diff --git a/.compat-glibc.metadata b/.compat-glibc.metadata
new file mode 100644
index 0000000..2fe025e
--- /dev/null
+++ b/.compat-glibc.metadata
@@ -0,0 +1,2 @@
+2929deef5e735cedfbe50fae8652fcfbabd85b00 SOURCES/glibc-2.12-2-gc4ccff1-fedora.tar.bz2
+9d52a929c93f099e1db80c846cda27309df07345 SOURCES/glibc-2.12-2-gc4ccff1.tar.bz2
diff --git a/README.md b/README.md
deleted file mode 100644
index 0e7897f..0000000
--- a/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-The master branch has no content
- 
-Look at the c7 branch if you are working with CentOS-7, or the c4/c5/c6 branch for CentOS-4, 5 or 6
- 
-If you find this file in a distro specific branch, it means that no content has been checked in yet
diff --git a/SOURCES/dummylib.sh b/SOURCES/dummylib.sh
new file mode 100644
index 0000000..4059496
--- /dev/null
+++ b/SOURCES/dummylib.sh
@@ -0,0 +1,51 @@
+#!/bin/sh
+if [ $# -lt 3 ]; then echo Usage: dummylib.sh orig_lib_path dummy_lib_path mapfile; exit 1; fi
+TMPDIR=`mktemp -d dummylib.sh.XXXXXX` || exit 1
+F=`file -L $1`
+C=
+S=8
+case "$F" in
+  *ELF\ 64-bit*shared\ object*x86-64*) C=-m64;;
+  *ELF\ 32-bit*shared\ object*80?86*) C=-m32; S=4;;
+  *ELF\ 64-bit*shared\ object*PowerPC*) C=-m64;;
+  *ELF\ 32-bit*shared\ object*PowerPC*) C=-m32; S=4;;
+  *ELF\ 64-bit*shared\ object*cisco*) C=-m64;;
+  *ELF\ 32-bit*shared\ object*cisco*) C=-m32; S=4;;
+  *ELF\ 64-bit*shared\ object*IA-64*) C=;;
+  *ELF\ 64-bit*shared\ object*Alpha*) C=;;
+  *ELF\ 64-bit*shared\ object*390*) C=-m64;;
+  *ELF\ 32-bit*shared\ object*390*) C=-m31; S=4;;
+  *ELF\ 64-bit*shared\ object*SPARC*) C=-m64;;
+  *ELF\ 32-bit*shared\ object*SPARC*) C=-m32; S=4;;
+  *ELF\ 64-bit*shared\ object*Alpha*) C=;;
+esac
+readelf -Ws $1 | awk '
+/\.dynsym.* contains/ { start=1 }
+/^$/ { start=0 }
+/  WEAK.*  UND [^@]*$/ { if (start) {
+  print ".data"; print ".weak " $8; print ".balign 8"
+  print ".'$S'byte " $8
+} }
+/  UND / { next }
+/@/ { if (start) {
+  fn=$8
+  intfn="HACK" hack+0
+  hack++
+  if ($4 ~ /FUNC/) { print ".text"; size=16; print ".type " intfn ",@function" }
+  else if ($4 ~ /OBJECT/) { print ".data"; size=$3; print ".type " intfn ",@object" }
+  else if ($4 ~ /NOTYPE/) { print ".data"; size=$3 }
+  else if ($4 ~ /TLS/) { print ".section .tdata,\"awT\",@progbits"; size=$3; print ".type " intfn ",@object" }
+  else exit(1);
+  print ".globl " intfn
+  if ($5 ~ /WEAK/) { print ".weak " intfn }
+  else if ($5 !~ /GLOBAL/) exit(1);
+  print intfn ": .skip " size
+  print ".size " intfn "," size
+  print ".symver " intfn "," fn
+} }
+' > $TMPDIR/lib.s || exit
+soname=`readelf -Wd $1 | grep SONAME | sed 's/^.*\[//;s/\].*$//'`
+gcc $C -Wl,-z,noexecstack -shared -Wl,-soname,$soname,-version-script,$3 \
+    -o $2 $TMPDIR/lib.s -nostdlib
+strip $2
+rm -rf $TMPDIR
diff --git a/SOURCES/glibc-aliasing.patch b/SOURCES/glibc-aliasing.patch
new file mode 100644
index 0000000..016a4d4
--- /dev/null
+++ b/SOURCES/glibc-aliasing.patch
@@ -0,0 +1,87 @@
+Index: glibc-2.12-2-gc4ccff1/elf/Makefile
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/elf/Makefile
++++ glibc-2.12-2-gc4ccff1/elf/Makefile
+@@ -129,6 +129,7 @@ include ../Makeconfig
+ ifeq ($(unwind-find-fde),yes)
+ routines += unwind-dw2-fde-glibc
+ shared-only-routines += unwind-dw2-fde-glibc
++CFLAGS-unwind-dw2-fde-glibc.c += -fno-strict-aliasing
+ endif
+ 
+ before-compile  = $(objpfx)trusted-dirs.h
+Index: glibc-2.12-2-gc4ccff1/inet/Makefile
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/inet/Makefile
++++ glibc-2.12-2-gc4ccff1/inet/Makefile
+@@ -57,6 +57,8 @@ tests := htontest test_ifindex tst-ntoa 
+ 
+ include ../Rules
+ 
++CFLAGS-tst-inet6_rth.c += -fno-strict-aliasing
++
+ ifeq ($(have-thread-library),yes)
+ 
+ CFLAGS-gethstbyad_r.c = -DUSE_NSCD=1 -fexceptions
+Index: glibc-2.12-2-gc4ccff1/nis/Makefile
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nis/Makefile
++++ glibc-2.12-2-gc4ccff1/nis/Makefile
+@@ -69,6 +69,8 @@ libnss_nisplus-inhibit-o = $(filter-out 
+ 
+ include ../Rules
+ 
++CFLAGS-nis_findserv.c += -fno-strict-aliasing
++CFLAGS-ypclnt.c += -fno-strict-aliasing
+ 
+ $(objpfx)libnss_compat.so: $(objpfx)libnsl.so$(libnsl.so-version)
+ $(objpfx)libnss_nis.so: $(objpfx)libnsl.so$(libnsl.so-version) \
+Index: glibc-2.12-2-gc4ccff1/nss/Makefile
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nss/Makefile
++++ glibc-2.12-2-gc4ccff1/nss/Makefile
+@@ -74,6 +74,7 @@ endif
+ 
+ include ../Rules
+ 
++CFLAGS-files-hosts.c += -fno-strict-aliasing
+ 
+ ifeq (yes,$(build-static-nss))
+ $(objpfx)getent: $(objpfx)libnss_files.a
+Index: glibc-2.12-2-gc4ccff1/resolv/Makefile
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/resolv/Makefile
++++ glibc-2.12-2-gc4ccff1/resolv/Makefile
+@@ -77,6 +77,7 @@ CPPFLAGS += -Dgethostbyname=res_gethostb
+ 	    -Dgetnetbyaddr=res_getnetbyaddr
+ 
+ CFLAGS-res_hconf.c = -fexceptions
++CFLAGS-res_send.c += -fno-strict-aliasing
+ 
+ # The BIND code elicits some harmless warnings.
+ +cflags += -Wno-strict-prototypes -Wno-write-strings
+Index: glibc-2.12-2-gc4ccff1/sunrpc/Makefile
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sunrpc/Makefile
++++ glibc-2.12-2-gc4ccff1/sunrpc/Makefile
+@@ -129,6 +129,10 @@ CFLAGS-openchild.c = -fexceptions
+ 
+ CPPFLAGS += -D_RPC_THREAD_SAFE_
+ 
++CFLAGS-clnt_tcp.c += -fno-strict-aliasing
++CFLAGS-clnt_udp.c += -fno-strict-aliasing
++CFLAGS-clnt_unix.c += -fno-strict-aliasing
++
+ include ../Rules
+ 
+ $(objpfx)rpcgen: $(addprefix $(objpfx),$(rpcgen-objs)) \
+Index: glibc-2.12-2-gc4ccff1/sysdeps/powerpc/powerpc64/elf/Makefile
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/powerpc/powerpc64/elf/Makefile
++++ glibc-2.12-2-gc4ccff1/sysdeps/powerpc/powerpc64/elf/Makefile
+@@ -9,3 +9,5 @@ CFLAGS-rtld-mempcpy.os = $(no-special-re
+ CFLAGS-rtld-memmove.os = $(no-special-regs)
+ CFLAGS-rtld-memchr.os = $(no-special-regs)
+ CFLAGS-rtld-strnlen.os = $(no-special-regs)
++
++CFLAGS-gmon-start.c += -fno-strict-aliasing
diff --git a/SOURCES/glibc-fedora.patch b/SOURCES/glibc-fedora.patch
new file mode 100644
index 0000000..5a7fce9
--- /dev/null
+++ b/SOURCES/glibc-fedora.patch
@@ -0,0 +1,2106 @@
+--- glibc-2.12-2-gc4ccff1/ChangeLog
++++ glibc-2.12-1/ChangeLog
+@@ -241,6 +241,12 @@
+ 
+ 	* Makerules (libc-abis): Fix search for libc-abis in add-ons.
+ 
++2010-04-06  Ulrich Drepper  <drepper@redhat.com>
++
++	* sysdeps/posix/getaddrinfo.c (default_scopes): Assign global
++	scope to RFC 1918 addresses.
++	* posix/gai.conf: Document difference from RFC 3484.
++
+ 2010-04-05  Thomas Schwinge  <thomas@schwinge.name>
+ 
+ 	* sysdeps/gnu/unwind-resume.c: New, moved from nptl/sysdeps/pthread/.
+@@ -995,6 +1001,19 @@
+ 	* sysdeps/x86_64/fpu/fegetenv.c: Likewise
+ 	* sysdeps/s390/fpu/fegetenv.c: Likewise.  Remove unused headers.
+ 
++2009-10-27  Aurelien Jarno  <aurelien@aurel32.net>
++
++	[BZ #10855]
++	* locale/programs/locarchive.c: use MMAP_SHARED to reserve memory
++	used later with MMAP_FIXED | MMAP_SHARED to cope with different
++	alignment restrictions.
++
++2010-02-08  Andreas Schwab  <schwab@redhat.com>
++
++	[BZ #11155]
++	* sysdeps/unix/sysv/linux/sparc/sparc64/fxstat.c: Include i386
++	version.
++
+ 2010-02-05  H.J. Lu  <hongjiu.lu@intel.com>
+ 
+ 	[BZ #11230]
+@@ -2938,6 +2957,11 @@ d2009-10-30  Ulrich Drepper  <drepper@re
+ 	* sysdeps/generic/ldsodefs.h (struct rtld_global): The map element in
+ 	the unique symbol hash table should not be const.
+ 
++2009-07-22  Jakub Jelinek  <jakub@redhat.com>
++
++	* Makeconfig (ASFLAGS): Append $(sysdep-ASFLAGS).
++	* sysdeps/i386/Makefile (sysdep-ASFLAGS): Add -U__i686.
++
+ 2009-07-21  Ulrich Drepper  <drepper@redhat.com>
+ 
+ 	* sysdeps/x86_64/multiarch/strstr.c: Minor cleanups.  Remove
+@@ -3203,6 +3227,11 @@ d2009-10-30  Ulrich Drepper  <drepper@re
+ 	out common code into new function get_common_indeces. Determine
+ 	extended family and model for Intel processors.
+ 
++2009-06-26  Andreas Schwab  <aschwab@redhat.com>
++
++	* timezone/zic.c (stringzone): Don't try to generate a POSIX TZ
++	string when the timezone ends in DST.
++
+ 2009-06-26  Ulrich Drepper  <drepper@redhat.com>
+ 
+ 	* resolv/resolv.h: Define RES_SNGLKUPREOP.
+@@ -11896,6 +11925,10 @@ d2009-10-30  Ulrich Drepper  <drepper@re
+ 	[BZ #4368]
+ 	* stdlib/stdlib.h: Remove obsolete part of comment for realpath.
+ 
++2007-04-16  Jakub Jelinek  <jakub@redhat.com>
++
++	* locale/programs/locarchive.c (add_alias, insert_name): Remove static.
++
+ 2007-04-16  Ulrich Drepper  <drepper@redhat.com>
+ 
+ 	[BZ #4364]
+@@ -13153,6 +13186,15 @@ d2009-10-30  Ulrich Drepper  <drepper@re
+ 	separators also if no non-zero digits found.
+ 	* stdlib/Makefile (tests): Add tst-strtod3.
+ 
++2006-12-10  Jakub Jelinek  <jakub@redhat.com>
++
++	* sysdeps/unix/sysv/linux/netlinkaccess.h: Include linux/if_addr.h
++	if IFA_MAX is not defined.
++	(IFA_RTA, IFA_PAYLOAD, IFLA_RTA, IFLA_PAYLOAD): Define if not
++	defined.
++	* sysdeps/unix/sysv/linux/check_pf.c: Include netlinkaccess.h
++	instead of asm/types.h, linux/netlink.h and linux/rtnetlink.h.
++
+ 2006-12-09  Ulrich Drepper  <drepper@redhat.com>
+ 
+ 	[BZ #3632]
+--- glibc-2.12-2-gc4ccff1/ChangeLog.15
++++ glibc-2.12-1/ChangeLog.15
+@@ -477,6 +477,14 @@
+ 
+ 2004-11-26  Jakub Jelinek  <jakub@redhat.com>
+ 
++	* posix/Makefile (generated: Add getconf.speclist.
++	($(inst_libexecdir)/getconf): Use getconf.speclist instead of
++	getconf output.
++	($(objpfx)getconf.speclist): New rule.
++	* posix/getconf.speclist.h: New file.
++
++2004-11-26  Jakub Jelinek  <jakub@redhat.com>
++
+ 	* sysdeps/generic/unsecvars.h (UNSECURE_ENVVARS): Add GETCONF_DIR.
+ 
+ 2004-11-26  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+@@ -1103,6 +1111,13 @@
+ 	* sysdeps/generic/tempname.c (__path_search): Add missing argument
+ 	TRY_TMPDIR.
+ 
++2004-11-02  Jakub Jelinek  <jakub@redhat.com>
++
++	* include/features.h (__USE_FORTIFY_LEVEL): Also set for Red Hat
++	GCC 3.4.x-RH >= 3.4.2-8.
++	* debug/tst-chk1.c (do_test): Deal with GCC 3.4.x-RH not
++	being able to recognize subobjects.
++
+ 2004-10-31  Mariusz Mazur <mmazur@kernel.pl>
+ 
+ 	* sysdeps/unix/sysv/linux/alpha/setregid.c: New file.
+@@ -1443,6 +1458,11 @@
+ 	* sysdeps/generic/readonly-area.c (__readonly_str): Renamed to ...
+ 	(__readonly_area): ... this.
+ 
++2004-10-19  Jakub Jelinek  <jakub@redhat.com>
++
++	* include/features.h (__USE_FORTIFY_LEVEL): Enable even with
++	Red Hat gcc4 4.0.0 and above.
++
+ 2004-10-18  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* sysdeps/generic/strcpy_chk.c (__strcpy_chk): Speed up by checking
+@@ -3182,6 +3202,23 @@
+ 	before return type.
+ 	* locale/localename.c (__current_locale_name): Likewise.
+ 
++2004-08-31  Jakub Jelinek  <jakub@redhat.com>
++
++	* elf/ldconfig.c (parse_conf): Add prefix argument, prepend it
++	before arguments to add_dir and pass to parse_conf_include.
++	(parse_conf_include): Add prefix argument, pass it down to
++	parse_conf.
++	(main): Call arch_startup.  Adjust parse_conf caller.
++	Call add_arch_dirs.
++	* sysdeps/generic/dl-cache.h (arch_startup, add_arch_dirs): Define.
++	* sysdeps/unix/sysv/linux/i386/dl-cache.h: New file.
++	* sysdeps/unix/sysv/linux/ia64/dl-cache.h (EMUL_HACK, arch_startup,
++	add_arch_dirs): Define.
++	* sysdeps/unix/sysv/linux/ia64/ldd-rewrite.sed: Prepend
++	/emul/ia32-linux before the 32-bit ld.so pathname.
++	* sysdeps/unix/sysv/linux/ia64/dl-procinfo.c: New file.
++	* sysdeps/unix/sysv/linux/ia64/dl-procinfo.h: New file.
++
+ 2004-08-30  Roland McGrath  <roland@frob.com>
+ 
+ 	* scripts/extract-abilist.awk: If `lastversion' variable defined, omit
+--- glibc-2.12-2-gc4ccff1/ChangeLog.16
++++ glibc-2.12-1/ChangeLog.16
+@@ -2042,6 +2042,9 @@
+ 	(__MATHDECL_2): Use __REDIRECT_NTH instead of __REDIRECT
+ 	followed by __THROW.
+ 
++	* sysdeps/unix/sysv/linux/futimesat.c (futimesat): If
++	file == NULL, use __futimes unconditionally.
++
+ 2006-02-02  Ulrich Drepper  <drepper@redhat.com>
+ 
+ 	* sysdeps/unix/sysv/linux/futimesat.c [__NR_futimesat]
+@@ -2101,6 +2104,11 @@
+ 	* sysdeps/ieee754/ldbl-128/s_llrintl.c (__llrintl): Fix a typo.
+ 	* sysdeps/s390/fpu/libm-test-ulps: Remove llrint ulps.
+ 
++2006-01-30  Jakub Jelinek  <jakub@redhat.com>
++
++	* include/bits/stdlib-ldbl.h: New file.
++	* include/bits/wchar-ldbl.h: New file.
++
+ 2006-01-19  Thomas Schwinge  <tschwinge@gnu.org>
+ 
+ 	* libio/genops.c: Include <stdbool.h>.
+@@ -8922,6 +8930,12 @@
+ 	* argp/argp-help.c (__argp_error): __asprintf -> vasprintf.
+ 	(__argp_failure): Likewise.
+ 
++2005-08-08  Jakub Jelinek  <jakub@redhat.com>
++
++	* sysdeps/unix/sysv/linux/dl-osinfo.h (_dl_setup_stack_chk_guard):
++	Shift marked &errno down on big-endian instead of up.
++	* elf/tst-stackguard1.c (do_test): Fix a typo.
++
+ 2005-08-08  Ulrich Drepper  <drepper@redhat.com>
+ 
+ 	* nscd/cache.c (cache_add): Commit hash table and header to disk.
+@@ -9046,6 +9060,17 @@
+ 	__syslog_chk.
+ 	* misc/Versions: Export __syslog_chk and __vsyslog_chk.
+ 
++2005-07-29  Jakub Jelinek  <jakub@redhat.com>
++
++	* sysdeps/unix/sysv/linux/dl-osinfo.h: Include errno.h, hp-timing.h,
++	endian.h.
++	(_dl_setup_stack_chk_guard): Even without
++	--enable-stackguard-randomization attempt to do some guard
++	randomization using hp-timing (if available) and kernel stack and
++	mmap randomization.
++	* elf/tst-stackguard1.c (do_test): Don't fail if the poor man's
++	randomization doesn't work well enough.
++
+ 2005-07-28  Thomas Schwinge  <schwinge@nic-nac-project.de>
+ 
+ 	[BZ #1137]
+--- glibc-2.12-2-gc4ccff1/Makeconfig
++++ glibc-2.12-1/Makeconfig
+@@ -789,12 +789,12 @@ endif
+ # The assembler can generate debug information too.
+ ifndef ASFLAGS
+ ifeq ($(have-cpp-asm-debuginfo),yes)
+-ASFLAGS := $(filter -g% -fdebug-prefix-map=%,$(CFLAGS))
++ASFLAGS = $(filter -g% -fdebug-prefix-map=%,$(CFLAGS))
+ else
+-ASFLAGS :=
++ASFLAGS =
+ endif
+ endif
+-ASFLAGS += $(ASFLAGS-config) $(asflags-cpu)
++ASFLAGS += $(ASFLAGS-config) $(asflags-cpu) $(sysdep-ASFLAGS)
+ 
+ ifndef BUILD_CC
+ BUILD_CC = $(CC)
+--- glibc-2.12-2-gc4ccff1/csu/Makefile
++++ glibc-2.12-1/csu/Makefile
+@@ -93,7 +93,8 @@ omit-deps += $(crtstuff)
+ $(crtstuff:%=$(objpfx)%.o): %.o: %.S $(objpfx)defs.h
+ 	$(compile.S) -g0 $(ASFLAGS-.os) -o $@
+ 
+-CFLAGS-initfini.s = -g0 -fPIC -fno-inline-functions $(fno-unit-at-a-time)
++CFLAGS-initfini.s = -g0 -fPIC -fno-inline-functions $(fno-unit-at-a-time) \
++		    -fno-asynchronous-unwind-tables
+ 
+ vpath initfini.c $(sysdirs)
+ 
+--- glibc-2.12-2-gc4ccff1/csu/elf-init.c
++++ glibc-2.12-1/csu/elf-init.c
+@@ -63,6 +63,23 @@ extern void (*__init_array_end []) (int,
+ extern void (*__fini_array_start []) (void) attribute_hidden;
+ extern void (*__fini_array_end []) (void) attribute_hidden;
+ 
++#if defined HAVE_VISIBILITY_ATTRIBUTE \
++    && (defined SHARED || defined LIBC_NONSHARED)
++# define hidden_undef_2(x) #x
++# define hidden_undef_1(x) hidden_undef_2 (x)
++# define hidden_undef(x) \
++  __asm (hidden_undef_1 (ASM_GLOBAL_DIRECTIVE) " " #x); \
++  __asm (".hidden " #x);
++#else
++# define hidden_undef(x)
++#endif
++
++hidden_undef (__preinit_array_start)
++hidden_undef (__preinit_array_end)
++hidden_undef (__init_array_start)
++hidden_undef (__init_array_end)
++hidden_undef (__fini_array_start)
++hidden_undef (__fini_array_end)
+ 
+ /* These function symbols are provided for the .init/.fini section entry
+    points automagically by the linker.  */
+--- glibc-2.12-2-gc4ccff1/debug/tst-chk1.c
++++ glibc-2.12-1/debug/tst-chk1.c
+@@ -17,6 +17,9 @@
+    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA.  */
+ 
++/* Hack: make sure GCC doesn't know __chk_fail () will not return.  */
++#define __noreturn__
++
+ #include <assert.h>
+ #include <fcntl.h>
+ #include <locale.h>
+@@ -242,7 +245,7 @@ do_test (void)
+   if (memcmp (a.buf1, "aabcdabcjj", 10))
+     FAIL ();
+ 
+-#if __USE_FORTIFY_LEVEL < 2
++#if __USE_FORTIFY_LEVEL < 2 || !__GNUC_PREREQ (4, 0)
+   /* The following tests are supposed to crash with -D_FORTIFY_SOURCE=2
+      and sufficient GCC support, as the string operations overflow
+      from a.buf1 into a.buf2.  */
+@@ -357,7 +360,7 @@ do_test (void)
+   memset (a.buf1 + 9, 'j', l0 + 2);
+   CHK_FAIL_END
+ 
+-# if __USE_FORTIFY_LEVEL >= 2
++# if __USE_FORTIFY_LEVEL >= 2 && __GNUC_PREREQ (4, 0)
+ #  define O 0
+ # else
+ #  define O 1
+--- glibc-2.12-2-gc4ccff1/elf/ldconfig.c
++++ glibc-2.12-1/elf/ldconfig.c
+@@ -1031,17 +1031,19 @@ search_dirs (void)
+ 
+ 
+ static void parse_conf_include (const char *config_file, unsigned int lineno,
+-				bool do_chroot, const char *pattern);
++				const char *prefix, bool do_chroot,
++				const char *pattern);
+ 
+ /* Parse configuration file.  */
+ static void
+-parse_conf (const char *filename, bool do_chroot)
++parse_conf (const char *filename, const char *prefix, bool do_chroot)
+ {
+   FILE *file = NULL;
+   char *line = NULL;
+   const char *canon;
+   size_t len = 0;
+   unsigned int lineno;
++  size_t prefix_len = prefix ? strlen (prefix) : 0;
+ 
+   if (do_chroot && opt_chroot)
+     {
+@@ -1102,7 +1104,14 @@ parse_conf (const char *filename, bool d
+ 	  cp += 8;
+ 	  while ((dir = strsep (&cp, " \t")) != NULL)
+ 	    if (dir[0] != '\0')
+-	      parse_conf_include (filename, lineno, do_chroot, dir);
++	      parse_conf_include (filename, lineno, prefix, do_chroot, dir);
++	}
++      else if (prefix != NULL)
++	{
++	  size_t cp_len = strlen (cp);
++	  char new_cp [prefix_len + cp_len + 1];
++	  memcpy (mempcpy (new_cp, prefix, prefix_len), cp, cp_len + 1);
++	  add_dir (new_cp);
+ 	}
+       else if (!strncasecmp (cp, "hwcap", 5) && isblank (cp[5]))
+ 	{
+@@ -1165,7 +1174,7 @@ parse_conf (const char *filename, bool d
+    config files to read.  */
+ static void
+ parse_conf_include (const char *config_file, unsigned int lineno,
+-		    bool do_chroot, const char *pattern)
++		    const char *prefix, bool do_chroot, const char *pattern)
+ {
+   if (opt_chroot && pattern[0] != '/')
+     error (EXIT_FAILURE, 0,
+@@ -1197,7 +1206,7 @@ parse_conf_include (const char *config_f
+     {
+     case 0:
+       for (size_t i = 0; i < gl.gl_pathc; ++i)
+-	parse_conf (gl.gl_pathv[i], false);
++	parse_conf (gl.gl_pathv[i], prefix, false);
+       globfree64 (&gl);
+       break;
+ 
+@@ -1240,6 +1249,8 @@ main (int argc, char **argv)
+   /* Set the text message domain.  */
+   textdomain (_libc_intl_domainname);
+ 
++  arch_startup (argc, argv);
++
+   /* Parse and process arguments.  */
+   int remaining;
+   argp_parse (&argp, argc, argv, 0, &remaining, NULL);
+@@ -1349,12 +1360,14 @@ main (int argc, char **argv)
+ 
+   if (!opt_only_cline)
+     {
+-      parse_conf (config_file, true);
++      parse_conf (config_file, NULL, true);
+ 
+       /* Always add the standard search paths.  */
+       add_system_dir (SLIBDIR);
+       if (strcmp (SLIBDIR, LIBDIR))
+ 	add_system_dir (LIBDIR);
++
++      add_arch_dirs (config_file);
+     }
+ 
+   char *aux_cache_file = _PATH_LDCONFIG_AUX_CACHE;
+--- glibc-2.12-2-gc4ccff1/elf/tst-stackguard1.c
++++ glibc-2.12-1/elf/tst-stackguard1.c
+@@ -160,17 +160,21 @@ do_test (void)
+      the 16 runs, something is very wrong.  */
+   int ndifferences = 0;
+   int ndefaults = 0;
++  int npartlyrandomized = 0;
+   for (i = 0; i < N; ++i) 
+     {
+       if (child_stack_chk_guards[i] != child_stack_chk_guards[i+1])
+ 	ndifferences++;
+       else if (child_stack_chk_guards[i] == default_guard)
+ 	ndefaults++;
++      else if (*(char *) &child_stack_chk_guards[i] == 0)
++	npartlyrandomized++;
+     }
+ 
+-  printf ("differences %d defaults %d\n", ndifferences, ndefaults);
++  printf ("differences %d defaults %d partly randomized %d\n",
++	  ndifferences, ndefaults, npartlyrandomized);
+ 
+-  if (ndifferences < N / 2 && ndefaults < N / 2)
++  if ((ndifferences + ndefaults + npartlyrandomized) < 3 * N / 4)
+     {
+       puts ("stack guard canaries are not randomized enough");
+       puts ("nor equal to the default canary value");
+--- glibc-2.12-2-gc4ccff1/include/bits/stdlib-ldbl.h
++++ glibc-2.12-1/include/bits/stdlib-ldbl.h
+@@ -0,0 +1 @@
++#include <stdlib/bits/stdlib-ldbl.h>
+--- glibc-2.12-2-gc4ccff1/include/bits/wchar-ldbl.h
++++ glibc-2.12-1/include/bits/wchar-ldbl.h
+@@ -0,0 +1 @@
++#include <wcsmbs/bits/wchar-ldbl.h>
+--- glibc-2.12-2-gc4ccff1/include/features.h
++++ glibc-2.12-1/include/features.h
+@@ -308,8 +308,13 @@
+ #endif
+ 
+ #if defined _FORTIFY_SOURCE && _FORTIFY_SOURCE > 0 \
+-    && __GNUC_PREREQ (4, 1) && defined __OPTIMIZE__ && __OPTIMIZE__ > 0
+-# if _FORTIFY_SOURCE > 1
++    && defined __OPTIMIZE__ && __OPTIMIZE__ > 0
++# if !__GNUC_PREREQ (4, 1)
++#  ifdef __GNUC_RH_RELEASE__
++#   warning _FORTIFY_SOURCE supported only with GCC 4.1 and later
++#  endif
++#  define __USE_FORTIFY_LEVEL 0
++# elif _FORTIFY_SOURCE > 1
+ #  define __USE_FORTIFY_LEVEL 2
+ # else
+ #  define __USE_FORTIFY_LEVEL 1
+--- glibc-2.12-2-gc4ccff1/intl/locale.alias
++++ glibc-2.12-1/intl/locale.alias
+@@ -57,8 +57,6 @@ korean		ko_KR.eucKR
+ korean.euc 	ko_KR.eucKR
+ ko_KR		ko_KR.eucKR
+ lithuanian      lt_LT.ISO-8859-13
+-no_NO		nb_NO.ISO-8859-1
+-no_NO.ISO-8859-1 nb_NO.ISO-8859-1
+ norwegian       nb_NO.ISO-8859-1
+ nynorsk		nn_NO.ISO-8859-1
+ polish          pl_PL.ISO-8859-2
+--- glibc-2.12-2-gc4ccff1/libio/stdio.h
++++ glibc-2.12-1/libio/stdio.h
+@@ -165,10 +165,12 @@ typedef _G_fpos64_t fpos64_t;
+ extern struct _IO_FILE *stdin;		/* Standard input stream.  */
+ extern struct _IO_FILE *stdout;		/* Standard output stream.  */
+ extern struct _IO_FILE *stderr;		/* Standard error output stream.  */
++#ifdef __STDC__
+ /* C89/C99 say they're macros.  Make them happy.  */
+ #define stdin stdin
+ #define stdout stdout
+ #define stderr stderr
++#endif
+ 
+ __BEGIN_NAMESPACE_STD
+ /* Remove file FILENAME.  */
+--- glibc-2.12-2-gc4ccff1/locale/iso-4217.def
++++ glibc-2.12-1/locale/iso-4217.def
+@@ -8,6 +8,7 @@
+  *
+  * !!! The list has to be sorted !!!
+  */
++DEFINE_INT_CURR("ADP")		/* Andorran Peseta -> EUR  */
+ DEFINE_INT_CURR("AED")		/* United Arab Emirates Dirham  */
+ DEFINE_INT_CURR("AFN")		/* Afghanistan Afgani  */
+ DEFINE_INT_CURR("ALL")		/* Albanian Lek  */
+@@ -15,12 +16,14 @@ DEFINE_INT_CURR("AMD")		/* Armenia Dram 
+ DEFINE_INT_CURR("ANG")		/* Netherlands Antilles  */
+ DEFINE_INT_CURR("AOA")		/* Angolan Kwanza  */
+ DEFINE_INT_CURR("ARS")		/* Argentine Peso  */
++DEFINE_INT_CURR("ATS")		/* Austrian Schilling -> EUR  */
+ DEFINE_INT_CURR("AUD")		/* Australian Dollar  */
+ DEFINE_INT_CURR("AWG")		/* Aruba Guilder  */
+ DEFINE_INT_CURR("AZM")		/* Azerbaijan Manat  */
+ DEFINE_INT_CURR("BAM")		/* Bosnian and Herzegovina Convertible Mark  */
+ DEFINE_INT_CURR("BBD")		/* Barbados Dollar  */
+ DEFINE_INT_CURR("BDT")		/* Bangladesh Taka  */
++DEFINE_INT_CURR("BEF")		/* Belgian Franc -> EUR  */
+ DEFINE_INT_CURR("BGN")		/* Bulgarian Lev  */
+ DEFINE_INT_CURR("BHD")		/* Bahraini Dinar  */
+ DEFINE_INT_CURR("BIF")		/* Burundi Franc  */
+@@ -44,6 +47,7 @@ DEFINE_INT_CURR("CUP")		/* Cuban Peso  *
+ DEFINE_INT_CURR("CVE")		/* Cape Verde Escudo  */
+ DEFINE_INT_CURR("CYP")		/* Cypriot Pound  */
+ DEFINE_INT_CURR("CZK")		/* Czech Koruna  */
++DEFINE_INT_CURR("DEM")		/* German Mark -> EUR  */
+ DEFINE_INT_CURR("DJF")		/* Djibouti Franc  */
+ DEFINE_INT_CURR("DKK")		/* Danish Krone (Faroe Islands, Greenland)  */
+ DEFINE_INT_CURR("DOP")		/* Dominican Republic  */
+@@ -51,16 +55,20 @@ DEFINE_INT_CURR("DZD")		/* Algerian Dina
+ DEFINE_INT_CURR("EEK")		/* Estonian Kroon  */
+ DEFINE_INT_CURR("EGP")		/* Egyptian Pound  */
+ DEFINE_INT_CURR("ERN")		/* Eritrean Nakfa  */
++DEFINE_INT_CURR("ESP")		/* Spanish Peseta -> EUR  */
+ DEFINE_INT_CURR("ETB")		/* Ethiopian Birr  */
+ DEFINE_INT_CURR("EUR")		/* European Union Euro  */
++DEFINE_INT_CURR("FIM")		/* Finnish Markka -> EUR  */
+ DEFINE_INT_CURR("FJD")		/* Fiji Dollar  */
+ DEFINE_INT_CURR("FKP")		/* Falkland Islands Pound (Malvinas)  */
++DEFINE_INT_CURR("FRF")		/* French Franc -> EUR  */
+ DEFINE_INT_CURR("GBP")		/* British Pound  */
+ DEFINE_INT_CURR("GEL")		/* Georgia Lari  */
+ DEFINE_INT_CURR("GHC")		/* Ghana Cedi  */
+ DEFINE_INT_CURR("GIP")		/* Gibraltar Pound  */
+ DEFINE_INT_CURR("GMD")		/* Gambian Dalasi  */
+ DEFINE_INT_CURR("GNF")		/* Guinea Franc  */
++DEFINE_INT_CURR("GRD")		/* Greek Drachma -> EUR  */
+ DEFINE_INT_CURR("GTQ")		/* Guatemala Quetzal  */
+ DEFINE_INT_CURR("GYD")		/* Guyana Dollar  */
+ DEFINE_INT_CURR("HKD")		/* Hong Kong Dollar  */
+@@ -69,12 +77,14 @@ DEFINE_INT_CURR("HRK")		/* Croatia Kuna 
+ DEFINE_INT_CURR("HTG")		/* Haiti Gourde  */
+ DEFINE_INT_CURR("HUF")		/* Hungarian Forint  */
+ DEFINE_INT_CURR("IDR")		/* Indonesia Rupiah  */
++DEFINE_INT_CURR("IEP")		/* Irish Pound -> EUR  */
+ DEFINE_INT_CURR("ILS")		/* Israeli Shekel  */
+ DEFINE_INT_CURR("IMP")		/* Isle of Man Pounds  */
+ DEFINE_INT_CURR("INR")		/* Indian Rupee (Bhutan)  */
+ DEFINE_INT_CURR("IQD")		/* Iraqi Dinar  */
+ DEFINE_INT_CURR("IRR")		/* Iranian Rial  */
+ DEFINE_INT_CURR("ISK")		/* Iceland Krona  */
++DEFINE_INT_CURR("ITL")		/* Italian Lira -> EUR  */
+ DEFINE_INT_CURR("JEP")		/* Jersey Pound  */
+ DEFINE_INT_CURR("JMD")		/* Jamaican Dollar  */
+ DEFINE_INT_CURR("JOD")		/* Jordanian Dinar  */
+@@ -94,6 +104,7 @@ DEFINE_INT_CURR("LKR")		/* Sri Lankan Ru
+ DEFINE_INT_CURR("LRD")		/* Liberian Dollar  */
+ DEFINE_INT_CURR("LSL")		/* Lesotho Maloti  */
+ DEFINE_INT_CURR("LTL")		/* Lithuanian Litas  */
++DEFINE_INT_CURR("LUF")		/* Luxembourg Franc -> EUR  */
+ DEFINE_INT_CURR("LVL")		/* Latvia Lat  */
+ DEFINE_INT_CURR("LYD")		/* Libyan Arab Jamahiriya Dinar  */
+ DEFINE_INT_CURR("MAD")		/* Moroccan Dirham  */
+@@ -114,6 +125,7 @@ DEFINE_INT_CURR("MZM")		/* Mozambique Me
+ DEFINE_INT_CURR("NAD")		/* Namibia Dollar  */
+ DEFINE_INT_CURR("NGN")		/* Nigeria Naira  */
+ DEFINE_INT_CURR("NIO")		/* Nicaragua Cordoba Oro  */
++DEFINE_INT_CURR("NLG")		/* Netherlands Guilder -> EUR  */
+ DEFINE_INT_CURR("NOK")		/* Norwegian Krone  */
+ DEFINE_INT_CURR("NPR")		/* Nepalese Rupee  */
+ DEFINE_INT_CURR("NZD")		/* New Zealand Dollar  */
+@@ -124,6 +136,7 @@ DEFINE_INT_CURR("PGK")		/* Papau New Gui
+ DEFINE_INT_CURR("PHP")		/* Philippines Peso  */
+ DEFINE_INT_CURR("PKR")		/* Pakistan Rupee  */
+ DEFINE_INT_CURR("PLN")		/* Polish Zloty  */
++DEFINE_INT_CURR("PTE")		/* Portugese Escudo -> EUR  */
+ DEFINE_INT_CURR("PYG")		/* Paraguay Guarani  */
+ DEFINE_INT_CURR("QAR")		/* Qatar Rial  */
+ DEFINE_INT_CURR("ROL")		/* Romanian Leu  */
+--- glibc-2.12-2-gc4ccff1/locale/programs/locarchive.c
++++ glibc-2.12-1/locale/programs/locarchive.c
+@@ -134,7 +134,7 @@ create_archive (const char *archivefname
+   size_t reserved = RESERVE_MMAP_SIZE;
+   int xflags = 0;
+   if (total < reserved
+-      && ((p = mmap64 (NULL, reserved, PROT_NONE, MAP_PRIVATE | MAP_ANON,
++      && ((p = mmap64 (NULL, reserved, PROT_NONE, MAP_SHARED | MAP_ANON,
+ 		       -1, 0)) != MAP_FAILED))
+     xflags = MAP_FIXED;
+   else
+@@ -241,9 +241,9 @@ oldlocrecentcmp (const void *a, const vo
+ /* forward decls for below */
+ static uint32_t add_locale (struct locarhandle *ah, const char *name,
+ 			    locale_data_t data, bool replace);
+-static void add_alias (struct locarhandle *ah, const char *alias,
+-		       bool replace, const char *oldname,
+-		       uint32_t *locrec_offset_p);
++void add_alias (struct locarhandle *ah, const char *alias,
++		bool replace, const char *oldname,
++		uint32_t *locrec_offset_p);
+ 
+ 
+ static bool
+@@ -396,7 +396,7 @@ enlarge_archive (struct locarhandle *ah,
+   size_t reserved = RESERVE_MMAP_SIZE;
+   int xflags = 0;
+   if (total < reserved
+-      && ((p = mmap64 (NULL, reserved, PROT_NONE, MAP_PRIVATE | MAP_ANON,
++      && ((p = mmap64 (NULL, reserved, PROT_NONE, MAP_SHARED | MAP_ANON,
+ 		       -1, 0)) != MAP_FAILED))
+     xflags = MAP_FIXED;
+   else
+@@ -614,7 +614,7 @@ open_archive (struct locarhandle *ah, bo
+   int xflags = 0;
+   void *p;
+   if (st.st_size < reserved
+-      && ((p = mmap64 (NULL, reserved, PROT_NONE, MAP_PRIVATE | MAP_ANON,
++      && ((p = mmap64 (NULL, reserved, PROT_NONE, MAP_SHARED | MAP_ANON,
+ 		       -1, 0)) != MAP_FAILED))
+     xflags = MAP_FIXED;
+   else
+@@ -649,7 +649,7 @@ close_archive (struct locarhandle *ah)
+ #include "../../intl/explodename.c"
+ #include "../../intl/l10nflist.c"
+ 
+-static struct namehashent *
++struct namehashent *
+ insert_name (struct locarhandle *ah,
+ 	     const char *name, size_t name_len, bool replace)
+ {
+@@ -707,7 +707,7 @@ insert_name (struct locarhandle *ah,
+   return &namehashtab[idx];
+ }
+ 
+-static void
++void
+ add_alias (struct locarhandle *ah, const char *alias, bool replace,
+ 	   const char *oldname, uint32_t *locrec_offset_p)
+ {
+--- glibc-2.12-2-gc4ccff1/localedata/Makefile
++++ glibc-2.12-1/localedata/Makefile
+@@ -227,6 +227,7 @@ $(INSTALL-SUPPORTED-LOCALES): install-lo
+ 	echo -n '...'; \
+ 	input=`echo $$locale | sed 's/\([^.]*\)[^@]*\(.*\)/\1\2/'`; \
+ 	$(LOCALEDEF) --alias-file=../intl/locale.alias \
++		     --no-archive \
+ 		     -i locales/$$input -c -f charmaps/$$charset \
+ 		     $(addprefix --prefix=,$(install_root)) $$locale; \
+ 	echo ' done'; \
+--- glibc-2.12-2-gc4ccff1/localedata/SUPPORTED
++++ glibc-2.12-1/localedata/SUPPORTED
+@@ -85,6 +85,7 @@ cy_GB.UTF-8/UTF-8 \
+ cy_GB/ISO-8859-14 \
+ da_DK.UTF-8/UTF-8 \
+ da_DK/ISO-8859-1 \
++da_DK.ISO-8859-15/ISO-8859-15 \
+ de_AT.UTF-8/UTF-8 \
+ de_AT/ISO-8859-1 \
+ de_AT@euro/ISO-8859-15 \
+@@ -116,6 +117,7 @@ en_DK.UTF-8/UTF-8 \
+ en_DK/ISO-8859-1 \
+ en_GB.UTF-8/UTF-8 \
+ en_GB/ISO-8859-1 \
++en_GB.ISO-8859-15/ISO-8859-15 \
+ en_HK.UTF-8/UTF-8 \
+ en_HK/ISO-8859-1 \
+ en_IE.UTF-8/UTF-8 \
+@@ -131,6 +133,7 @@ en_SG.UTF-8/UTF-8 \
+ en_SG/ISO-8859-1 \
+ en_US.UTF-8/UTF-8 \
+ en_US/ISO-8859-1 \
++en_US.ISO-8859-15/ISO-8859-15 \
+ en_ZA.UTF-8/UTF-8 \
+ en_ZA/ISO-8859-1 \
+ en_ZW.UTF-8/UTF-8 \
+@@ -307,6 +310,8 @@ nl_NL/ISO-8859-1 \
+ nl_NL@euro/ISO-8859-15 \
+ nn_NO.UTF-8/UTF-8 \
+ nn_NO/ISO-8859-1 \
++no_NO.UTF-8/UTF-8 \
++no_NO/ISO-8859-1 \
+ nr_ZA/UTF-8 \
+ nso_ZA/UTF-8 \
+ oc_FR.UTF-8/UTF-8 \
+@@ -367,6 +372,7 @@ sv_FI/ISO-8859-1 \
+ sv_FI@euro/ISO-8859-15 \
+ sv_SE.UTF-8/UTF-8 \
+ sv_SE/ISO-8859-1 \
++sv_SE.ISO-8859-15/ISO-8859-15 \
+ ta_IN/UTF-8 \
+ te_IN/UTF-8 \
+ tg_TJ.UTF-8/UTF-8 \
+--- glibc-2.12-2-gc4ccff1/localedata/locales/cy_GB
++++ glibc-2.12-1/localedata/locales/cy_GB
+@@ -248,8 +248,11 @@ mon         "<U0049><U006F><U006E><U0061
+ d_t_fmt     "<U0044><U0079><U0064><U0064><U0020><U0025><U0041><U0020><U0025><U0064><U0020><U006d><U0069><U0073><U0020><U0025><U0042><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
+ d_fmt       "<U0025><U0064><U002E><U0025><U006D><U002E><U0025><U0079>"
+ t_fmt       "<U0025><U0054>"
+-am_pm       "";""
+-t_fmt_ampm  ""
++am_pm       "<U0041><U004D>";"<U0050><U004D>"
++t_fmt_ampm  "<U0025><U006C><U003A><U0025><U004D><U003A><U0025><U0053><U0020><U0025><U0050><U0020><U0025><U005A>"
++date_fmt    "<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065>/
++<U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/
++<U0025><U005A><U0020><U0025><U0059>"
+ END LC_TIME
+ 
+ LC_MESSAGES
+--- glibc-2.12-2-gc4ccff1/localedata/locales/en_GB
++++ glibc-2.12-1/localedata/locales/en_GB
+@@ -116,8 +116,8 @@ mon         "<U004A><U0061><U006E><U0075
+ d_t_fmt     "<U0025><U0061><U0020><U0025><U0064><U0020><U0025><U0062><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
+ d_fmt       "<U0025><U0064><U002F><U0025><U006D><U002F><U0025><U0079>"
+ t_fmt       "<U0025><U0054>"
+-am_pm       "";""
+-t_fmt_ampm  ""
++am_pm       "<U0041><U004D>";"<U0050><U004D>"
++t_fmt_ampm  "<U0025><U006C><U003A><U0025><U004D><U003A><U0025><U0053><U0020><U0025><U0050><U0020><U0025><U005A>"
+ date_fmt	"<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065>/
+ <U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/
+ <U0025><U005A><U0020><U0025><U0059>"
+--- glibc-2.12-2-gc4ccff1/localedata/locales/no_NO
++++ glibc-2.12-1/localedata/locales/no_NO
+@@ -0,0 +1,69 @@
++escape_char	/
++comment_char    %
++
++% Norwegian language locale for Norway
++% Source: Norsk Standardiseringsforbund
++% Address: University Library,
++%   Drammensveien 41, N-9242 Oslo, Norge
++% Contact: Kolbjoern Aamboe
++% Tel: +47 - 22859109
++% Fax: +47 - 22434497
++% Email: kolbjorn.aambo@usit.uio.no
++% Language: no
++% Territory: NO
++% Revision: 4.3
++% Date: 1996-10-15
++% Application: general
++% Users: general
++% Repertoiremap: mnemonic.ds
++% Charset: ISO-8859-1
++% Distribution and use is free, also
++% for commercial purposes.
++
++LC_IDENTIFICATION
++copy "nb_NO"
++END LC_IDENTIFICATION
++
++LC_COLLATE
++copy "nb_NO"
++END LC_COLLATE
++
++LC_CTYPE
++copy "nb_NO"
++END LC_CTYPE
++
++LC_MONETARY
++copy "nb_NO"
++END LC_MONETARY
++
++LC_NUMERIC
++copy "nb_NO"
++END LC_NUMERIC
++
++LC_TIME
++copy "nb_NO"
++END LC_TIME
++
++LC_MESSAGES
++copy "nb_NO"
++END LC_MESSAGES
++
++LC_PAPER
++copy "nb_NO"
++END LC_PAPER
++
++LC_TELEPHONE
++copy "nb_NO"
++END LC_TELEPHONE
++
++LC_MEASUREMENT
++copy "nb_NO"
++END LC_MEASUREMENT
++
++LC_NAME
++copy "nb_NO"
++END LC_NAME
++
++LC_ADDRESS
++copy "nb_NO"
++END LC_ADDRESS
+--- glibc-2.12-2-gc4ccff1/localedata/locales/zh_TW
++++ glibc-2.12-1/localedata/locales/zh_TW
+@@ -1,7 +1,7 @@
+ comment_char %
+ escape_char /
+ %
+-% Chinese language locale for Taiwan R.O.C.
++% Chinese language locale for Taiwan
+ % charmap: BIG5-CP950
+ %
+ % Original Author:
+@@ -17,7 +17,7 @@ escape_char /
+ % Reference:	http://wwwold.dkuug.dk/JTC1/SC22/WG20/docs/n690.pdf
+ 
+ LC_IDENTIFICATION
+-title      "Chinese locale for Taiwan R.O.C."
++title      "Chinese locale for Taiwan"
+ source     ""
+ address    ""
+ contact    ""
+@@ -25,7 +25,7 @@ email      "bug-glibc-locales@gnu.org"
+ tel        ""
+ fax        ""
+ language   "Chinese"
+-territory  "Taiwan R.O.C."
++territory  "Taiwan"
+ revision   "0.2"
+ date       "2000-08-02"
+ %
+--- glibc-2.12-2-gc4ccff1/malloc/mcheck.c
++++ glibc-2.12-1/malloc/mcheck.c
+@@ -24,9 +24,25 @@
+ # include <mcheck.h>
+ # include <stdint.h>
+ # include <stdio.h>
++# include <stdlib.h>
+ # include <libintl.h>
+ #endif
+ 
++#ifdef _LIBC
++extern __typeof (malloc) __libc_malloc;
++extern __typeof (free) __libc_free;
++extern __typeof (realloc) __libc_realloc;
++libc_hidden_proto (__libc_malloc)
++libc_hidden_proto (__libc_realloc)
++libc_hidden_proto (__libc_free)
++libc_hidden_proto (__libc_memalign)
++#else
++# define __libc_malloc(sz) malloc (sz)
++# define __libc_free(ptr) free (ptr)
++# define __libc_realloc(ptr, sz) realloc (ptr, sz)
++# define __libc_memalign(al, sz) memalign (al, sz)
++#endif
++
+ /* Old hook values.  */
+ static void (*old_free_hook) (__ptr_t ptr, __const __ptr_t);
+ static __ptr_t (*old_malloc_hook) (__malloc_size_t size, const __ptr_t);
+@@ -197,7 +213,7 @@ freehook (__ptr_t ptr, const __ptr_t cal
+   if (old_free_hook != NULL)
+     (*old_free_hook) (ptr, caller);
+   else
+-    free (ptr);
++    __libc_free (ptr);
+   __free_hook = freehook;
+ }
+ 
+@@ -214,7 +230,7 @@ mallochook (__malloc_size_t size, const 
+     hdr = (struct hdr *) (*old_malloc_hook) (sizeof (struct hdr) + size + 1,
+ 					     caller);
+   else
+-    hdr = (struct hdr *) malloc (sizeof (struct hdr) + size + 1);
++    hdr = (struct hdr *) __libc_malloc (sizeof (struct hdr) + size + 1);
+   __malloc_hook = mallochook;
+   if (hdr == NULL)
+     return NULL;
+@@ -245,7 +261,7 @@ memalignhook (__malloc_size_t alignment,
+   if (old_memalign_hook != NULL)
+     block = (*old_memalign_hook) (alignment, slop + size + 1, caller);
+   else
+-    block = memalign (alignment, slop + size + 1);
++    block = __libc_memalign (alignment, slop + size + 1);
+   __memalign_hook = memalignhook;
+   if (block == NULL)
+     return NULL;
+@@ -300,8 +316,8 @@ reallochook (__ptr_t ptr, __malloc_size_
+ 					      sizeof (struct hdr) + size + 1,
+ 					      caller);
+   else
+-    hdr = (struct hdr *) realloc ((__ptr_t) hdr,
+-				  sizeof (struct hdr) + size + 1);
++    hdr = (struct hdr *) __libc_realloc ((__ptr_t) hdr,
++					 sizeof (struct hdr) + size + 1);
+   __free_hook = freehook;
+   __malloc_hook = mallochook;
+   __memalign_hook = memalignhook;
+@@ -361,8 +377,8 @@ mcheck (func)
+   if (__malloc_initialized <= 0 && !mcheck_used)
+     {
+       /* We call malloc() once here to ensure it is initialized.  */
+-      void *p = malloc (0);
+-      free (p);
++      void *p = __libc_malloc (0);
++      __libc_free (p);
+ 
+       old_free_hook = __free_hook;
+       __free_hook = freehook;
+--- glibc-2.12-2-gc4ccff1/manual/libc.texinfo
++++ glibc-2.12-1/manual/libc.texinfo
+@@ -5,7 +5,7 @@
+ @c setchapternewpage odd
+ 
+ @comment Tell install-info what to do.
+-@dircategory Software libraries
++@dircategory Libraries
+ @direntry
+ * Libc: (libc).                 C library.
+ @end direntry
+--- glibc-2.12-2-gc4ccff1/misc/sys/cdefs.h
++++ glibc-2.12-1/misc/sys/cdefs.h
+@@ -132,7 +132,10 @@
+ #define __bos(ptr) __builtin_object_size (ptr, __USE_FORTIFY_LEVEL > 1)
+ #define __bos0(ptr) __builtin_object_size (ptr, 0)
+ 
+-#if __GNUC_PREREQ (4,3)
++#if __GNUC_PREREQ (4,3) \
++    || (defined __GNUC_RH_RELEASE__ && __GNUC__ == 4 \
++	&& __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ == 2 \
++	&& __GNUC_RH_RELEASE__ >= 31)
+ # define __warndecl(name, msg) \
+   extern void name (void) __attribute__((__warning__ (msg)))
+ # define __warnattr(msg) __attribute__((__warning__ (msg)))
+@@ -291,10 +294,16 @@
+ 
+ /* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
+    inline semantics, unless -fgnu89-inline is used.  */
+-#if !defined __cplusplus || __GNUC_PREREQ (4,3)
++#if !defined __cplusplus || __GNUC_PREREQ (4,3) \
++    || (defined __GNUC_RH_RELEASE__ && __GNUC__ == 4 \
++	&& __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ == 2 \
++	&& __GNUC_RH_RELEASE__ >= 31)
+ # if defined __GNUC_STDC_INLINE__ || defined __cplusplus
+ #  define __extern_inline extern __inline __attribute__ ((__gnu_inline__))
+-#  if __GNUC_PREREQ (4,3)
++#  if __GNUC_PREREQ (4,3) \
++	|| (defined __GNUC_RH_RELEASE__ && __GNUC__ == 4 \
++	    && __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ == 2 \
++	    && __GNUC_RH_RELEASE__ >= 31)
+ #   define __extern_always_inline \
+   extern __always_inline __attribute__ ((__gnu_inline__, __artificial__))
+ #  else
+@@ -314,7 +323,10 @@
+ 
+ /* GCC 4.3 and above allow passing all anonymous arguments of an
+    __extern_always_inline function to some other vararg function.  */
+-#if __GNUC_PREREQ (4,3)
++#if __GNUC_PREREQ (4,3) \
++    || (defined __GNUC_RH_RELEASE__ && __GNUC__ == 4 \
++	&& __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ == 2 \
++	&& __GNUC_RH_RELEASE__ >= 31)
+ # define __va_arg_pack() __builtin_va_arg_pack ()
+ # define __va_arg_pack_len() __builtin_va_arg_pack_len ()
+ #endif
+--- glibc-2.12-2-gc4ccff1/nis/nss
++++ glibc-2.12-1/nis/nss
+@@ -25,7 +25,7 @@
+ #  memory with every getXXent() call.  Otherwise each getXXent() call
+ #  might result into a network communication with the server to get
+ #  the next entry.
+-#SETENT_BATCH_READ=TRUE
++SETENT_BATCH_READ=TRUE
+ #
+ # ADJUNCT_AS_SHADOW
+ #  If set to TRUE, the passwd routines in the NIS NSS module will not
+--- glibc-2.12-2-gc4ccff1/nptl/ChangeLog
++++ glibc-2.12-1/nptl/ChangeLog
+@@ -3884,6 +3884,15 @@
+ 	Use __sigfillset.  Document that sigfillset does the right thing wrt
+ 	to SIGSETXID.
+ 
++2005-08-08  Jakub Jelinek  <jakub@redhat.com>
++
++	* tst-stackguard1.c (do_test): Likewise.
++
++2005-07-29  Jakub Jelinek  <jakub@redhat.com>
++
++	* tst-stackguard1.c (do_test): Don't fail if the poor man's
++	randomization doesn't work well enough.
++
+ 2005-07-11  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	[BZ #1102]
+@@ -4620,6 +4629,11 @@
+ 	Move definition inside libpthread, libc, librt check.  Provide
+ 	definition for rtld.
+ 
++2004-09-02  Jakub Jelinek  <jakub@redhat.com>
++
++	* pthread_cond_destroy.c (__pthread_cond_destroy): If there are
++	waiters, awake all waiters on the associated mutex.
++
+ 2004-09-02  Ulrich Drepper  <drepper@redhat.com>
+ 
+ 	* sysdeps/alpha/jmpbuf-unwind.h: Define __libc_unwind_longjmp.
+@@ -6694,6 +6708,11 @@
+ 
+ 	* Makefile [$(build-shared) = yes] (tests): Depend on $(test-modules).
+ 
++2003-07-22  Jakub Jelinek  <jakub@redhat.com>
++
++	* descr.h: Don't include lowlevellock.h, pthreaddef.h and dl-sysdep.h
++	if __need_struct_pthread_size, instead define lll_lock_t.
++
+ 2003-07-25  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* tst-cancel17.c (do_test): Check if aio_cancel failed.
+--- glibc-2.12-2-gc4ccff1/nptl/Makefile
++++ glibc-2.12-1/nptl/Makefile
+@@ -341,7 +341,8 @@ endif
+ extra-objs += $(crti-objs) $(crtn-objs)
+ omit-deps += crti crtn
+ 
+-CFLAGS-pt-initfini.s = -g0 -fPIC -fno-inline-functions $(fno-unit-at-a-time)
++CFLAGS-pt-initfini.s = -g0 -fPIC -fno-inline-functions $(fno-unit-at-a-time) \
++		       -fno-asynchronous-unwind-tables
+ endif
+ 
+ CFLAGS-flockfile.c = -D_IO_MTSAFE_IO
+@@ -527,15 +528,19 @@ $(addprefix $(objpfx), \
+     $(tests) $(xtests) $(test-srcs))): $(objpfx)libpthread.so \
+ 				       $(objpfx)libpthread_nonshared.a
+ $(objpfx)tst-unload: $(common-objpfx)dlfcn/libdl.so
+-# $(objpfx)../libc.so is used instead of $(common-objpfx)libc.so,
++# $(objpfx)linklibc.so is used instead of $(common-objpfx)libc.so,
+ # since otherwise libpthread.so comes before libc.so when linking.
+ $(addprefix $(objpfx), $(tests-reverse)): \
+-  $(objpfx)../libc.so $(objpfx)libpthread.so \
++  $(objpfx)linklibc.so $(objpfx)libpthread.so \
+   $(objpfx)libpthread_nonshared.a
+ $(objpfx)../libc.so: $(common-objpfx)libc.so ;
+ $(addprefix $(objpfx),$(tests-static) $(xtests-static)): $(objpfx)libpthread.a
+ 
+ $(objpfx)tst-atfork2.out: $(objpfx)tst-atfork2mod.so
++
++$(objpfx)linklibc.so: $(common-objpfx)libc.so
++	ln -s ../libc.so $@
++generated += libclink.so
+ else
+ $(addprefix $(objpfx),$(tests) $(test-srcs)): $(objpfx)libpthread.a
+ endif
+--- glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/bits/posix_opt.h
++++ glibc-2.12-1/nptl/sysdeps/unix/sysv/linux/bits/posix_opt.h
+@@ -189,4 +189,7 @@
+ /* Typed memory objects are not available.  */
+ #define _POSIX_TYPED_MEMORY_OBJECTS	-1
+ 
++/* Streams are not available.  */
++#define _XOPEN_STREAMS	-1
++
+ #endif /* bits/posix_opt.h */
+--- glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/kernel-features.h
++++ glibc-2.12-1/nptl/sysdeps/unix/sysv/linux/kernel-features.h
+@@ -0,0 +1,6 @@
++#include_next <kernel-features.h>
++
++/* NPTL can always assume all clone thread flags work.  */
++#ifndef __ASSUME_CLONE_THREAD_FLAGS
++# define __ASSUME_CLONE_THREAD_FLAGS	1
++#endif
+--- glibc-2.12-2-gc4ccff1/nptl/tst-stackguard1.c
++++ glibc-2.12-1/nptl/tst-stackguard1.c
+@@ -190,17 +190,21 @@ do_test (void)
+      the 16 runs, something is very wrong.  */
+   int ndifferences = 0;
+   int ndefaults = 0;
++  int npartlyrandomized = 0;
+   for (i = 0; i < N; ++i) 
+     {
+       if (child_stack_chk_guards[i] != child_stack_chk_guards[i+1])
+ 	ndifferences++;
+       else if (child_stack_chk_guards[i] == default_guard)
+ 	ndefaults++;
++      else if (*(char *) &child_stack_chk_guards[i] == 0)
++	npartlyrandomized++;
+     }
+ 
+-  printf ("differences %d defaults %d\n", ndifferences, ndefaults);
++  printf ("differences %d defaults %d partly randomized %d\n",
++	  ndifferences, ndefaults, npartlyrandomized);
+ 
+-  if (ndifferences < N / 2 && ndefaults < N / 2)
++  if ((ndifferences + ndefaults + npartlyrandomized) < 3 * N / 4)
+     {
+       puts ("stack guard canaries are not randomized enough");
+       puts ("nor equal to the default canary value");
+--- glibc-2.12-2-gc4ccff1/nscd/nscd.conf
++++ glibc-2.12-1/nscd/nscd.conf
+@@ -33,7 +33,7 @@
+ #	logfile			/var/log/nscd.log
+ #	threads			4
+ #	max-threads		32
+-#	server-user		nobody
++	server-user		nscd
+ #	stat-user		somebody
+ 	debug-level		0
+ #	reload-count		5
+--- glibc-2.12-2-gc4ccff1/nscd/nscd.init
++++ glibc-2.12-1/nscd/nscd.init
+@@ -9,6 +9,7 @@
+ #		slow naming services like NIS, NIS+, LDAP, or hesiod.
+ # processname: /usr/sbin/nscd
+ # config: /etc/nscd.conf
++# config: /etc/sysconfig/nscd
+ #
+ ### BEGIN INIT INFO
+ # Provides: nscd
+@@ -28,20 +29,8 @@
+ # Source function library.
+ . /etc/init.d/functions
+ 
+-# nscd does not run on any kernel lower than 2.2.0 because of threading
+-# problems, so we require that in first place.
+-case $(uname -r) in
+-    2.[2-9].*)
+-	# this is okay
+-	;;
+-    [3-9]*)
+-	# these are of course also okay
+-	;;
+-    *)
+-	#this is not
+-	exit 1
+-	;;
+-esac
++# Source an auxiliary options file if we have one, and pick up NSCD_OPTIONS.
++[ -r /etc/sysconfig/nscd ] && . /etc/sysconfig/nscd
+ 
+ RETVAL=0
+ prog=nscd
+@@ -50,7 +39,7 @@ start () {
+     [ -d /var/run/nscd ] || mkdir /var/run/nscd
+     [ -d /var/db/nscd ] || mkdir /var/db/nscd
+     echo -n $"Starting $prog: "
+-    daemon /usr/sbin/nscd
++    daemon /usr/sbin/nscd $NSCD_OPTIONS
+     RETVAL=$?
+     echo
+     [ $RETVAL -eq 0 ] && touch /var/lock/subsys/nscd
+@@ -83,7 +72,7 @@ restart() {
+ # See how we were called.
+ case "$1" in
+     start)
+-	start
++	[ -e /var/lock/subsys/nscd ] || start
+ 	RETVAL=$?
+ 	;;
+     stop)
+@@ -99,14 +88,17 @@ case "$1" in
+ 	RETVAL=$?
+ 	;;
+     try-restart | condrestart)
+-	[ -e /var/lock/subsys/nscd ] && restart
++	[ ! -e /var/lock/subsys/nscd ] || restart
+ 	RETVAL=$?
+ 	;;
+     force-reload | reload)
+     	echo -n $"Reloading $prog: "
+-	killproc /usr/sbin/nscd -HUP
+-	RETVAL=$?
+-	echo
++    	RETVAL=0
++    	/usr/sbin/nscd -i passwd || RETVAL=$?
++    	/usr/sbin/nscd -i group || RETVAL=$?
++    	/usr/sbin/nscd -i hosts || RETVAL=$?
++    	/usr/sbin/nscd -i services || RETVAL=$?
++    	echo
+ 	;;
+     *)
+ 	echo $"Usage: $0 {start|stop|status|restart|reload|condrestart}"
+--- glibc-2.12-2-gc4ccff1/posix/Makefile
++++ glibc-2.12-1/posix/Makefile
+@@ -305,15 +305,8 @@ $(inst_libexecdir)/getconf: $(inst_bindi
+ 	  mv -f $@/$$spec.new $@/$$spec; \
+ 	done < $(objpfx)getconf.speclist
+ 
+-$(objpfx)getconf.speclist: $(objpfx)getconf
+-ifeq (no,$(cross-compiling))
+-	LC_ALL=C GETCONF_DIR=/dev/null \
+-	$(run-program-prefix) $< _POSIX_V7_WIDTH_RESTRICTED_ENVS > $@.new
+-	LC_ALL=C GETCONF_DIR=/dev/null \
+-	$(run-program-prefix) $< _POSIX_V6_WIDTH_RESTRICTED_ENVS >> $@.new
+-	LC_ALL=C GETCONF_DIR=/dev/null \
+-	$(run-program-prefix) $< _XBS5_WIDTH_RESTRICTED_ENVS >> $@.new
+-else
+-	> $@.new
+-endif
++$(objpfx)getconf.speclist: getconf.speclist.h
++	$(CC) -E $(CFLAGS) $(CPPFLAGS) $< \
++	  | sed -n -e '/START_OF_STRINGS/,$${/\(POSIX_V[67]\|_XBS5\)_/{s/^[^"]*"//;s/".*$$//;p}}' \
++	  > $@.new
+ 	mv -f $@.new $@
+--- glibc-2.12-2-gc4ccff1/posix/gai.conf
++++ glibc-2.12-1/posix/gai.conf
+@@ -41,7 +41,7 @@
+ #
+ # precedence  <mask>   <value>
+ #    Add another rule to the RFC 3484 precedence table.  See section 2.1
+-#    and 10.3 in RFC 3484.  The default is:
++#    and 10.3 in RFC 3484.  The RFC requires:
+ #
+ #precedence  ::1/128       50
+ #precedence  ::/0          40
+@@ -58,7 +58,7 @@
+ #    Add another rule to the RFC 3484 scope table for IPv4 addresses.
+ #    By default the scope IDs described in section 3.2 in RFC 3484 are
+ #    used.  Changing these defaults should hardly ever be necessary.
+-#    The defaults are equivalent to:
++#    The definitions in RFC 1918 are equivalent to:
+ #
+ #scopev4 ::ffff:169.254.0.0/112  2
+ #scopev4 ::ffff:127.0.0.0/104    2
+@@ -75,3 +75,5 @@
+ #scopev4 ::ffff:169.254.0.0/112  2
+ #scopev4 ::ffff:127.0.0.0/104    2
+ #scopev4 ::ffff:0.0.0.0/96       14
++#
++#    This is what the Red Hat setting currently uses.
+--- glibc-2.12-2-gc4ccff1/posix/getconf.speclist.h
++++ glibc-2.12-1/posix/getconf.speclist.h
+@@ -0,0 +1,39 @@
++#include <unistd.h>
++const char *START_OF_STRINGS =
++#if _POSIX_V7_ILP32_OFF32 == 1
++"POSIX_V7_ILP32_OFF32"
++#endif
++#if _POSIX_V7_ILP32_OFFBIG == 1
++"POSIX_V7_ILP32_OFFBIG"
++#endif
++#if _POSIX_V7_LP64_OFF64 == 1
++"POSIX_V7_LP64_OFF64"
++#endif
++#if _POSIX_V7_LPBIG_OFFBIG == 1
++"POSIX_V7_LPBIG_OFFBIG"
++#endif
++#if _POSIX_V6_ILP32_OFF32 == 1
++"POSIX_V6_ILP32_OFF32"
++#endif
++#if _POSIX_V6_ILP32_OFFBIG == 1
++"POSIX_V6_ILP32_OFFBIG"
++#endif
++#if _POSIX_V6_LP64_OFF64 == 1
++"POSIX_V6_LP64_OFF64"
++#endif
++#if _POSIX_V6_LPBIG_OFFBIG == 1
++"POSIX_V6_LPBIG_OFFBIG"
++#endif
++#if _XBS5_ILP32_OFF32 == 1
++"XBS5_ILP32_OFF32"
++#endif
++#if _XBS5_ILP32_OFFBIG == 1
++"XBS5_ILP32_OFFBIG"
++#endif
++#if _XBS5_LP64_OFF64 == 1
++"XBS5_LP64_OFF64"
++#endif
++#if _XBS5_LPBIG_OFFBIG == 1
++"XBS5_LPBIG_OFFBIG"
++#endif
++"";
+--- glibc-2.12-2-gc4ccff1/streams/Makefile
++++ glibc-2.12-1/streams/Makefile
+@@ -21,7 +21,7 @@
+ #
+ subdir	:= streams
+ 
+-headers		= stropts.h sys/stropts.h bits/stropts.h bits/xtitypes.h
++#headers		= stropts.h sys/stropts.h bits/stropts.h bits/xtitypes.h
+ routines	= isastream getmsg getpmsg putmsg putpmsg fattach fdetach
+ 
+ include ../Rules
+--- glibc-2.12-2-gc4ccff1/sysdeps/generic/dl-cache.h
++++ glibc-2.12-1/sysdeps/generic/dl-cache.h
+@@ -36,6 +36,14 @@
+ # define add_system_dir(dir) add_dir (dir)
+ #endif
+ 
++#ifndef arch_startup
++# define arch_startup(argc, argv) do { } while (0)
++#endif
++
++#ifndef add_arch_dirs
++# define add_arch_dirs(config_file) do { } while (0)
++#endif
++
+ #define CACHEMAGIC "ld.so-1.7.0"
+ 
+ /* libc5 and glibc 2.0/2.1 use the same format.  For glibc 2.2 another
+--- glibc-2.12-2-gc4ccff1/sysdeps/i386/Makefile
++++ glibc-2.12-1/sysdeps/i386/Makefile
+@@ -2,6 +2,8 @@
+ # Every i386 port in use uses gas syntax (I think).
+ asm-CPPFLAGS += -DGAS_SYNTAX
+ 
++sysdep-ASFLAGS += -U__i686
++
+ # The i386 `long double' is a distinct type we support.
+ long-double-fcts = yes
+ 
+@@ -64,6 +66,14 @@ endif
+ 
+ ifneq (,$(filter -mno-tls-direct-seg-refs,$(CFLAGS)))
+ defines += -DNO_TLS_DIRECT_SEG_REFS
++else
++# .a libraries are not performance critical and so we
++# build them without direct TLS segment references
++# always.
++CPPFLAGS-.o += -DNO_TLS_DIRECT_SEG_REFS
++CFLAGS-.o += -mno-tls-direct-seg-refs
++CPPFLAGS-.oS += -DNO_TLS_DIRECT_SEG_REFS
++CFLAGS-.oS += -mno-tls-direct-seg-refs
+ endif
+ 
+ ifeq ($(subdir),elf)
+--- glibc-2.12-2-gc4ccff1/sysdeps/ia64/Makefile
++++ glibc-2.12-1/sysdeps/ia64/Makefile
+@@ -12,8 +12,8 @@ elide-routines.os += hp-timing
+ 
+ ifeq (yes,$(build-shared))
+ # Compatibility
+-sysdep_routines += ia64libgcc
+-shared-only-routines += ia64libgcc
++sysdep_routines += libgcc-compat
++shared-only-routines += libgcc-compat
+ endif
+ endif
+ 
+--- glibc-2.12-2-gc4ccff1/sysdeps/ia64/ia64libgcc.S
++++ glibc-2.12-1/sysdeps/ia64/ia64libgcc.S
+@@ -1,350 +0,0 @@
+-/* From the Intel IA-64 Optimization Guide, choose the minimum latency
+-   alternative.  */
+-
+-#include <sysdep.h>
+-#undef ret
+-
+-#include <shlib-compat.h>
+-
+-#if SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_2_6)
+-
+-/* __divtf3
+-   Compute a 80-bit IEEE double-extended quotient.
+-   farg0 holds the dividend.  farg1 holds the divisor.  */
+-
+-ENTRY(___divtf3)
+-	cmp.eq p7, p0 = r0, r0
+-	frcpa.s0 f10, p6 = farg0, farg1
+-	;;
+-(p6)	cmp.ne p7, p0 = r0, r0
+-	.pred.rel.mutex p6, p7
+-(p6)	fnma.s1 f11 = farg1, f10, f1
+-(p6)	fma.s1 f12 = farg0, f10, f0
+-	;;
+-(p6)	fma.s1 f13 = f11, f11, f0
+-(p6)	fma.s1 f14 = f11, f11, f11
+-	;;
+-(p6)	fma.s1 f11 = f13, f13, f11
+-(p6)	fma.s1 f13 = f14, f10, f10
+-	;;
+-(p6)	fma.s1 f10 = f13, f11, f10
+-(p6)	fnma.s1 f11 = farg1, f12, farg0
+-	;;
+-(p6)	fma.s1 f11 = f11, f10, f12
+-(p6)	fnma.s1 f12 = farg1, f10, f1
+-	;;
+-(p6)	fma.s1 f10 = f12, f10, f10
+-(p6)	fnma.s1 f12 = farg1, f11, farg0
+-	;;
+-(p6)	fma.s0 fret0 = f12, f10, f11
+-(p7)	mov fret0 = f10
+-	br.ret.sptk rp
+-END(___divtf3)
+-	.symver ___divtf3, __divtf3@GLIBC_2.2
+-
+-/* __divdf3
+-   Compute a 64-bit IEEE double quotient.
+-   farg0 holds the dividend.  farg1 holds the divisor.  */
+-
+-ENTRY(___divdf3)
+-	cmp.eq p7, p0 = r0, r0
+-	frcpa.s0 f10, p6 = farg0, farg1
+-	;;
+-(p6)	cmp.ne p7, p0 = r0, r0
+-	.pred.rel.mutex p6, p7
+-(p6)	fmpy.s1 f11 = farg0, f10
+-(p6)	fnma.s1 f12 = farg1, f10, f1
+-	;;
+-(p6)	fma.s1 f11 = f12, f11, f11
+-(p6)	fmpy.s1 f13 = f12, f12
+-	;;
+-(p6)	fma.s1 f10 = f12, f10, f10
+-(p6)	fma.s1 f11 = f13, f11, f11
+-	;;
+-(p6)	fmpy.s1 f12 = f13, f13
+-(p6)	fma.s1 f10 = f13, f10, f10
+-	;;
+-(p6)	fma.d.s1 f11 = f12, f11, f11
+-(p6)	fma.s1 f10 = f12, f10, f10
+-	;;
+-(p6)	fnma.d.s1 f8 = farg1, f11, farg0
+-	;;
+-(p6)	fma.d fret0 = f8, f10, f11
+-(p7)	mov fret0 = f10
+-	br.ret.sptk rp
+-	;;
+-END(___divdf3)
+-	.symver	___divdf3, __divdf3@GLIBC_2.2
+-
+-/* __divsf3
+-   Compute a 32-bit IEEE float quotient.
+-   farg0 holds the dividend.  farg1 holds the divisor.  */
+-
+-ENTRY(___divsf3)
+-	cmp.eq p7, p0 = r0, r0
+-	frcpa.s0 f10, p6 = farg0, farg1
+-	;;
+-(p6)	cmp.ne p7, p0 = r0, r0
+-	.pred.rel.mutex p6, p7
+-(p6)	fmpy.s1 f8 = farg0, f10
+-(p6)	fnma.s1 f9 = farg1, f10, f1
+-	;;
+-(p6)	fma.s1 f8 = f9, f8, f8
+-(p6)	fmpy.s1 f9 = f9, f9
+-	;;
+-(p6)	fma.s1 f8 = f9, f8, f8
+-(p6)	fmpy.s1 f9 = f9, f9
+-	;;
+-(p6)	fma.d.s1 f10 = f9, f8, f8
+-	;;
+-(p6)	fnorm.s.s0 fret0 = f10
+-(p7)	mov fret0 = f10
+-	br.ret.sptk rp
+-	;;
+-END(___divsf3)
+-	.symver	___divsf3, __divsf3@GLIBC_2.2
+-
+-/* __divdi3
+-   Compute a 64-bit integer quotient.
+-   in0 holds the dividend.  in1 holds the divisor.  */
+-
+-ENTRY(___divdi3)
+-	.regstk 2,0,0,0
+-	/* Transfer inputs to FP registers.  */
+-	setf.sig f8 = in0
+-	setf.sig f9 = in1
+-	;;
+-	/* Convert the inputs to FP, so that they won't be treated as
+-	   unsigned.  */
+-	fcvt.xf f8 = f8
+-	fcvt.xf f9 = f9
+-	;;
+-	/* Compute the reciprocal approximation.  */
+-	frcpa.s1 f10, p6 = f8, f9
+-	;;
+-	/* 3 Newton-Raphson iterations.  */
+-(p6)	fnma.s1 f11 = f9, f10, f1
+-(p6)	fmpy.s1 f12 = f8, f10
+-	;;
+-(p6)	fmpy.s1 f13 = f11, f11
+-(p6)	fma.s1 f12 = f11, f12, f12
+-	;;
+-(p6)	fma.s1 f10 = f11, f10, f10
+-(p6)	fma.s1 f11 = f13, f12, f12
+-	;;
+-(p6)	fma.s1 f10 = f13, f10, f10
+-(p6)	fnma.s1 f12 = f9, f11, f8
+-	;;
+-(p6)	fma.s1 f10 = f12, f10, f11
+-	;;
+-	/* Round quotient to an integer.  */
+-	fcvt.fx.trunc.s1 f10 = f10
+-	;;
+-	/* Transfer result to GP registers.  */
+-	getf.sig ret0 = f10
+-	br.ret.sptk rp
+-	;;
+-END(___divdi3)
+-	.symver	___divdi3, __divdi3@GLIBC_2.2
+-
+-/* __moddi3
+-   Compute a 64-bit integer modulus.
+-   in0 holds the dividend (a).  in1 holds the divisor (b).  */
+-
+-ENTRY(___moddi3)
+-	.regstk 2,0,0,0
+-	/* Transfer inputs to FP registers.  */
+-	setf.sig f14 = in0
+-	setf.sig f9 = in1
+-	;;
+-	/* Convert the inputs to FP, so that they won't be treated as
+-	   unsigned.  */
+-	fcvt.xf f8 = f14
+-	fcvt.xf f9 = f9
+-	;;
+-	/* Compute the reciprocal approximation.  */
+-	frcpa.s1 f10, p6 = f8, f9
+-	;;
+-	/* 3 Newton-Raphson iterations.  */
+-(p6)	fmpy.s1 f12 = f8, f10
+-(p6)	fnma.s1 f11 = f9, f10, f1
+-	;;
+-(p6)	fma.s1 f12 = f11, f12, f12
+-(p6)	fmpy.s1 f13 = f11, f11
+-	;;
+-(p6)	fma.s1 f10 = f11, f10, f10
+-(p6)	fma.s1 f11 = f13, f12, f12
+-	;;
+-	sub in1 = r0, in1
+-(p6)	fma.s1 f10 = f13, f10, f10
+-(p6)	fnma.s1 f12 = f9, f11, f8
+-	;;
+-	setf.sig f9 = in1
+-(p6)	fma.s1 f10 = f12, f10, f11
+-	;;
+-	fcvt.fx.trunc.s1 f10 = f10
+-	;;
+-	/* r = q * (-b) + a  */
+-	xma.l f10 = f10, f9, f14
+-	;;
+-	/* Transfer result to GP registers.  */
+-	getf.sig ret0 = f10
+-	br.ret.sptk rp
+-	;;
+-END(___moddi3)
+-	.symver ___moddi3, __moddi3@GLIBC_2.2
+-
+-/* __udivdi3
+-   Compute a 64-bit unsigned integer quotient.
+-   in0 holds the dividend.  in1 holds the divisor.  */
+-
+-ENTRY(___udivdi3)
+-	.regstk 2,0,0,0
+-	/* Transfer inputs to FP registers.  */
+-	setf.sig f8 = in0
+-	setf.sig f9 = in1
+-	;;
+-	/* Convert the inputs to FP, to avoid FP software-assist faults.  */
+-	fcvt.xuf.s1 f8 = f8
+-	fcvt.xuf.s1 f9 = f9
+-	;;
+-	/* Compute the reciprocal approximation.  */
+-	frcpa.s1 f10, p6 = f8, f9
+-	;;
+-	/* 3 Newton-Raphson iterations.  */
+-(p6)	fnma.s1 f11 = f9, f10, f1
+-(p6)	fmpy.s1 f12 = f8, f10
+-	;;
+-(p6)	fmpy.s1 f13 = f11, f11
+-(p6)	fma.s1 f12 = f11, f12, f12
+-	;;
+-(p6)	fma.s1 f10 = f11, f10, f10
+-(p6)	fma.s1 f11 = f13, f12, f12
+-	;;
+-(p6)	fma.s1 f10 = f13, f10, f10
+-(p6)	fnma.s1 f12 = f9, f11, f8
+-	;;
+-(p6)	fma.s1 f10 = f12, f10, f11
+-	;;
+-	/* Round quotient to an unsigned integer.  */
+-	fcvt.fxu.trunc.s1 f10 = f10
+-	;;
+-	/* Transfer result to GP registers.  */
+-	getf.sig ret0 = f10
+-	br.ret.sptk rp
+-	;;
+-END(___udivdi3)
+-	.symver	___udivdi3, __udivdi3@GLIBC_2.2
+-
+-/* __umoddi3
+-   Compute a 64-bit unsigned integer modulus.
+-   in0 holds the dividend (a).  in1 holds the divisor (b).  */
+-
+-ENTRY(___umoddi3)
+-	.regstk 2,0,0,0
+-	/* Transfer inputs to FP registers.  */
+-	setf.sig f14 = in0
+-	setf.sig f9 = in1
+-	;;
+-	/* Convert the inputs to FP, to avoid FP software assist faults.  */
+-	fcvt.xuf.s1 f8 = f14
+-	fcvt.xuf.s1 f9 = f9
+-	;;
+-	/* Compute the reciprocal approximation.  */
+-	frcpa.s1 f10, p6 = f8, f9
+-	;;
+-	/* 3 Newton-Raphson iterations.  */
+-(p6)	fmpy.s1 f12 = f8, f10
+-(p6)	fnma.s1 f11 = f9, f10, f1
+-	;;
+-(p6)	fma.s1 f12 = f11, f12, f12
+-(p6)	fmpy.s1 f13 = f11, f11
+-	;;
+-(p6)	fma.s1 f10 = f11, f10, f10
+-(p6)	fma.s1 f11 = f13, f12, f12
+-	;;
+-	sub in1 = r0, in1
+-(p6)	fma.s1 f10 = f13, f10, f10
+-(p6)	fnma.s1 f12 = f9, f11, f8
+-	;;
+-	setf.sig f9 = in1
+-(p6)	fma.s1 f10 = f12, f10, f11
+-	;;
+-	/* Round quotient to an unsigned integer.  */
+-	fcvt.fxu.trunc.s1 f10 = f10
+-	;;
+-	/* r = q * (-b) + a  */
+-	xma.l f10 = f10, f9, f14
+-	;;
+-	/* Transfer result to GP registers.  */
+-	getf.sig ret0 = f10
+-	br.ret.sptk rp
+-	;;
+-END(___umoddi3)
+-	.symver	___umoddi3, __umoddi3@GLIBC_2.2
+-
+-/* __multi3
+-   Compute a 128-bit multiply of 128-bit multiplicands.
+-   in0/in1 holds one multiplicand (a), in2/in3 holds the other one (b).  */
+-
+-ENTRY(___multi3)
+-	.regstk 4,0,0,0
+-	setf.sig f6 = in1
+-	movl r19 = 0xffffffff
+-	setf.sig f7 = in2
+-	;;
+-	and r14 = r19, in0
+-	;;
+-	setf.sig f10 = r14
+-	and r14 = r19, in2
+-	xmpy.l f9 = f6, f7
+-	;;
+-	setf.sig f6 = r14
+-	shr.u r14 = in0, 32
+-	;;
+-	setf.sig f7 = r14
+-	shr.u r14 = in2, 32
+-	;;
+-	setf.sig f8 = r14
+-	xmpy.l f11 = f10, f6
+-	xmpy.l f6 = f7, f6
+-	;;
+-	getf.sig r16 = f11
+-	xmpy.l f7 = f7, f8
+-	;;
+-	shr.u r14 = r16, 32
+-	and r16 = r19, r16
+-	getf.sig r17 = f6
+-	setf.sig f6 = in0
+-	;;
+-	setf.sig f11 = r14
+-	getf.sig r21 = f7
+-	setf.sig f7 = in3
+-	;;
+-	xma.l f11 = f10, f8, f11
+-	xma.l f6 = f6, f7, f9
+-	;;
+-	getf.sig r18 = f11
+-	;;
+-	add r18 = r18, r17
+-	;;
+-	and r15 = r19, r18
+-	cmp.ltu p7, p6 = r18, r17
+-	;;
+-	getf.sig r22 = f6
+-(p7)	adds r14 = 1, r19
+-	;;
+-(p7)	add r21 = r21, r14
+-	shr.u r14 = r18, 32
+-	shl r15 = r15, 32
+-	;;
+-	add r20 = r21, r14
+-	;;
+-	add ret0 = r15, r16
+-	add ret1 = r22, r20
+-	br.ret.sptk rp
+-	;;
+-END(___multi3)
+-	.symver	___multi3, __multi3@GLIBC_2.2
+-
+-#endif
+--- glibc-2.12-2-gc4ccff1/sysdeps/ia64/libgcc-compat.c
++++ glibc-2.12-1/sysdeps/ia64/libgcc-compat.c
+@@ -0,0 +1,84 @@
++/* pre-.hidden libgcc compatibility
++   Copyright (C) 2002 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library 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
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++
++#include <stdint.h>
++#include <shlib-compat.h>
++
++#if SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_2_6)
++
++typedef int int128_t __attribute__((__mode__(TI)));
++
++extern long double __divtf3 (long double, long double) attribute_hidden;
++long double INTUSE (__divtf3) (long double x, long double y)
++{
++  return __divtf3 (x, y);
++}
++symbol_version (INTUSE (__divtf3), __divtf3, GLIBC_2.2);
++
++extern double __divdf3 (double, double) attribute_hidden;
++double INTUSE (__divdf3) (double x, double y)
++{
++  return __divdf3 (x, y);
++}
++symbol_version (INTUSE (__divdf3), __divdf3, GLIBC_2.2);
++
++extern float __divsf3 (float, float) attribute_hidden;
++float INTUSE (__divsf3) (float x, float y)
++{
++  return __divsf3 (x, y);
++}
++symbol_version (INTUSE (__divsf3), __divsf3, GLIBC_2.2);
++
++extern int64_t __divdi3 (int64_t, int64_t) attribute_hidden;
++int64_t INTUSE (__divdi3) (int64_t x, int64_t y)
++{
++  return __divdi3 (x, y);
++}
++symbol_version (INTUSE (__divdi3), __divdi3, GLIBC_2.2);
++
++extern int64_t __moddi3 (int64_t, int64_t) attribute_hidden;
++int64_t INTUSE (__moddi3) (int64_t x, int64_t y)
++{
++  return __moddi3 (x, y);
++}
++symbol_version (INTUSE (__moddi3), __moddi3, GLIBC_2.2);
++
++extern uint64_t __udivdi3 (uint64_t, uint64_t) attribute_hidden;
++uint64_t INTUSE (__udivdi3) (uint64_t x, uint64_t y)
++{
++  return __udivdi3 (x, y);
++}
++symbol_version (INTUSE (__udivdi3), __udivdi3, GLIBC_2.2);
++
++extern uint64_t __umoddi3 (uint64_t, uint64_t) attribute_hidden;
++uint64_t INTUSE (__umoddi3) (uint64_t x, uint64_t y)
++{
++  return __umoddi3 (x, y);
++}
++symbol_version (INTUSE (__umoddi3), __umoddi3, GLIBC_2.2);
++
++extern int128_t __multi3 (int128_t, int128_t) attribute_hidden;
++int128_t INTUSE (__multi3) (int128_t x, int128_t y)
++{
++  return __multi3 (x, y);
++}
++symbol_version (INTUSE (__multi3), __multi3, GLIBC_2.2);
++
++#endif
+--- glibc-2.12-2-gc4ccff1/sysdeps/posix/getaddrinfo.c
++++ glibc-2.12-1/sysdeps/posix/getaddrinfo.c
+@@ -1099,10 +1099,12 @@ static const struct scopeentry
+     /* Link-local addresses: scope 2.  */
+     { { { 169, 254, 0, 0 } }, htonl_c (0xffff0000), 2 },
+     { { { 127, 0, 0, 0 } }, htonl_c (0xff000000), 2 },
++#if 0
+     /* Site-local addresses: scope 5.  */
+     { { { 10, 0, 0, 0 } }, htonl_c (0xff000000), 5 },
+     { { { 172, 16, 0, 0 } }, htonl_c (0xfff00000), 5 },
+     { { { 192, 168, 0, 0 } }, htonl_c (0xffff0000), 5 },
++#endif
+     /* Default: scope 14.  */
+     { { { 0, 0, 0, 0 } }, htonl_c (0x00000000), 14 }
+   };
+--- glibc-2.12-2-gc4ccff1/sysdeps/powerpc/powerpc64/Makefile
++++ glibc-2.12-1/sysdeps/powerpc/powerpc64/Makefile
+@@ -30,6 +30,7 @@ ifneq ($(elf),no)
+ # we use -fpic instead which is much better.
+ CFLAGS-initfini.s += -fpic -O1
+ endif
++CFLAGS-libc-start.c += -fno-asynchronous-unwind-tables
+ endif
+ 
+ ifeq ($(subdir),elf)
+--- glibc-2.12-2-gc4ccff1/sysdeps/unix/nice.c
++++ glibc-2.12-1/sysdeps/unix/nice.c
+@@ -42,7 +42,12 @@ nice (int incr)
+ 	__set_errno (save);
+     }
+ 
+-  result = setpriority (PRIO_PROCESS, 0, prio + incr);
++  prio += incr;
++  if (prio < PRIO_MIN)
++    prio = PRIO_MIN;
++  else if (prio >= PRIO_MAX)
++    prio = PRIO_MAX - 1;
++  result = setpriority (PRIO_PROCESS, 0, prio);
+   if (result == -1)
+     {
+       if (errno == EACCES)
+--- glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/check_pf.c
++++ glibc-2.12-1/sysdeps/unix/sysv/linux/check_pf.c
+@@ -27,13 +27,10 @@
+ #include <unistd.h>
+ #include <sys/socket.h>
+ 
+-#include <asm/types.h>
+-#include <linux/netlink.h>
+-#include <linux/rtnetlink.h>
+-
+ #include <not-cancel.h>
+ #include <kernel-features.h>
+ 
++#include "netlinkaccess.h"
+ 
+ #ifndef IFA_F_HOMEADDRESS
+ # define IFA_F_HOMEADDRESS 0
+--- glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/dl-osinfo.h
++++ glibc-2.12-1/sysdeps/unix/sysv/linux/dl-osinfo.h
+@@ -17,10 +17,13 @@
+    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA.  */
+ 
++#include <errno.h>
+ #include <kernel-features.h>
+ #include <dl-sysdep.h>
+ #include <fcntl.h>
+ #include <stdint.h>
++#include <hp-timing.h>
++#include <endian.h>
+ 
+ #ifndef MIN
+ # define MIN(a,b) (((a)<(b))?(a):(b))
+@@ -80,6 +83,32 @@ _dl_setup_stack_chk_guard (void *dl_rand
+       unsigned char *p = (unsigned char *) &ret;
+       p[sizeof (ret) - 1] = 255;
+       p[sizeof (ret) - 2] = '\n';
++#ifdef HP_TIMING_NOW
++      hp_timing_t hpt;
++      HP_TIMING_NOW (hpt);
++      hpt = (hpt & 0xffff) << 8;
++      ret ^= hpt;
++#endif
++      uintptr_t stk;
++      /* Avoid GCC being too smart.  */
++      asm ("" : "=r" (stk) : "r" (p));
++      stk &= 0x7ffff0;
++#if __BYTE_ORDER == __LITTLE_ENDIAN
++      stk <<= (__WORDSIZE - 23);
++#elif __WORDSIZE == 64
++      stk <<= 31;
++#endif
++      ret ^= stk;
++      /* Avoid GCC being too smart.  */
++      p = (unsigned char *) &errno;
++      asm ("" : "=r" (stk) : "r" (p));
++      stk &= 0x7fff00;
++#if __BYTE_ORDER == __LITTLE_ENDIAN
++      stk <<= (__WORDSIZE - 29);
++#else
++      stk >>= 8;
++#endif
++      ret ^= stk;
+     }
+   else
+ #endif
+--- glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/futimesat.c
++++ glibc-2.12-1/sysdeps/unix/sysv/linux/futimesat.c
+@@ -37,14 +37,14 @@ futimesat (fd, file, tvp)
+ {
+   int result;
+ 
++  if (file == NULL)
++    return __futimes (fd, tvp);
++
+ #ifdef __NR_futimesat
+ # ifndef __ASSUME_ATFCTS
+   if (__have_atfcts >= 0)
+ # endif
+     {
+-      if (file == NULL)
+-	return __futimes (fd, tvp);
+-
+       result = INLINE_SYSCALL (futimesat, 3, fd, file, tvp);
+ # ifndef __ASSUME_ATFCTS
+       if (result == -1 && errno == ENOSYS)
+@@ -58,22 +58,7 @@ futimesat (fd, file, tvp)
+ #ifndef __ASSUME_ATFCTS
+   char *buf = NULL;
+ 
+-  if (file == NULL)
+-    {
+-      static const char procfd[] = "/proc/self/fd/%d";
+-      /* Buffer for the path name we are going to use.  It consists of
+-	 - the string /proc/self/fd/
+-	 - the file descriptor number.
+-	 The final NUL is included in the sizeof.   A bit of overhead
+-	 due to the format elements compensates for possible negative
+-	 numbers.  */
+-      size_t buflen = sizeof (procfd) + sizeof (int) * 3;
+-      buf = alloca (buflen);
+-
+-      __snprintf (buf, buflen, procfd, fd);
+-      file = buf;
+-    }
+-  else if (fd != AT_FDCWD && file[0] != '/')
++  if (fd != AT_FDCWD && file[0] != '/')
+     {
+       size_t filelen = strlen (file);
+       if (__builtin_expect (filelen == 0, 0))
+--- glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/i386/dl-cache.h
++++ glibc-2.12-1/sysdeps/unix/sysv/linux/i386/dl-cache.h
+@@ -0,0 +1,59 @@
++/* Support for reading /etc/ld.so.cache files written by Linux ldconfig.
++   Copyright (C) 2004 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library 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
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++static inline int
++is_ia64 (void)
++{
++  unsigned int fl1, fl2;
++
++  /* See if we can use cpuid.  */
++  __asm__ ("pushfl; pushfl; popl %0; movl %0,%1; xorl %2,%0;"
++           "pushl %0; popfl; pushfl; popl %0; popfl"
++           : "=&r" (fl1), "=&r" (fl2)
++           : "i" (0x00200000));
++  if (((fl1 ^ fl2) & 0x00200000) == 0)
++    return 0;
++
++  /* Host supports cpuid.  See if cpuid gives capabilities, try
++     CPUID(0).  Preserve %ebx and %ecx; cpuid insn clobbers these, we
++     don't need their CPUID values here, and %ebx may be the PIC
++     register.  */
++  __asm__ ("pushl %%ecx; pushl %%ebx; cpuid; popl %%ebx; popl %%ecx"
++           : "=a" (fl1) : "0" (0) : "edx", "cc");
++  if (fl1 == 0)
++    return 0;
++
++  /* Invoke CPUID(1), return %edx; caller can examine bits to
++     determine what's supported.  */
++  __asm__ ("pushl %%ecx; pushl %%ebx; cpuid; popl %%ebx; popl %%ecx"
++           : "=d" (fl2), "=a" (fl1) : "1" (1) : "cc");
++  return (fl2 & (1 << 30)) != 0;
++}
++
++#define arch_startup(argc, argv) \
++  do {									\
++    /* On IA-64, try to execute 64-bit ldconfig if possible.		\
++       This is because the badly designed /emul/ia32-linux hack		\
++       will cause 32-bit ldconfig to do all sorts of weird things.  */	\
++    if (is_ia64 ())							\
++      execv ("/emul/ia32-linux/../../sbin/ldconfig",			\
++	     (char *const *) argv);					\
++  } while (0)
++
++#include_next <dl-cache.h>
+--- glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/ia64/dl-cache.h
++++ glibc-2.12-1/sysdeps/unix/sysv/linux/ia64/dl-cache.h
+@@ -22,4 +22,31 @@
+ #define _dl_cache_check_flags(flags) \
+   ((flags) == _DL_CACHE_DEFAULT_ID)
+ 
++#define EMUL_HACK "/emul/ia32-linux"
++
++#define arch_startup(argc, argv) unlink (EMUL_HACK LD_SO_CACHE)
++
++#define add_arch_dirs(config_file) \
++  do {							\
++    int save_verbose = opt_verbose;			\
++    opt_verbose = 0;					\
++							\
++    parse_conf (config_file, EMUL_HACK, true);		\
++							\
++    /* Always add the standard search paths.  */	\
++    add_system_dir (EMUL_HACK SLIBDIR);			\
++    if (strcmp (SLIBDIR, LIBDIR))			\
++      add_system_dir (EMUL_HACK LIBDIR);		\
++							\
++    char emul_config_file[strlen (config_file)		\
++			  + sizeof EMUL_HACK];		\
++    strcpy (mempcpy (emul_config_file, EMUL_HACK,	\
++		     strlen (EMUL_HACK)), config_file);	\
++							\
++    if (! access (emul_config_file, R_OK))		\
++      parse_conf (emul_config_file, EMUL_HACK, true);	\
++							\
++    opt_verbose = save_verbose;				\
++  } while (0)
++
+ #include_next <dl-cache.h>
+--- glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/ia64/dl-procinfo.c
++++ glibc-2.12-1/sysdeps/unix/sysv/linux/ia64/dl-procinfo.c
+@@ -0,0 +1,5 @@
++#ifdef IS_IN_ldconfig
++#include <sysdeps/i386/dl-procinfo.c>
++#else
++#include <sysdeps/generic/dl-procinfo.c>
++#endif
+--- glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/ia64/dl-procinfo.h
++++ glibc-2.12-1/sysdeps/unix/sysv/linux/ia64/dl-procinfo.h
+@@ -0,0 +1,5 @@
++#ifdef IS_IN_ldconfig
++#include <sysdeps/unix/sysv/linux/i386/dl-procinfo.h>
++#else
++#include <sysdeps/generic/dl-procinfo.h>
++#endif
+--- glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/ia64/ldd-rewrite.sed
++++ glibc-2.12-1/sysdeps/unix/sysv/linux/ia64/ldd-rewrite.sed
+@@ -1 +1 @@
+-s_^\(RTLDLIST=\)\([^ 	]*\)-ia64\(\.so\.[0-9.]*\)[ 	]*$_\1"\2-ia64\3 \2\3"_
++s_^\(RTLDLIST=\)\([^ 	]*\)-ia64\(\.so\.[0-9.]*\)[ 	]*$_\1"\2-ia64\3 /emul/ia32-linux\2\3"_
+--- glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/netlinkaccess.h
++++ glibc-2.12-1/sysdeps/unix/sysv/linux/netlinkaccess.h
+@@ -25,6 +25,24 @@
+ 
+ #include <kernel-features.h>
+ 
++#ifndef IFA_MAX
++/* 2.6.19 kernel headers helpfully removed some macros and
++   moved lots of stuff into new headers, some of which aren't
++   included by linux/rtnetlink.h.  */
++#include <linux/if_addr.h>
++#endif
++
++#ifndef IFA_RTA
++# define IFA_RTA(r) \
++  ((struct rtattr*) ((char*)(r) + NLMSG_ALIGN (sizeof (struct ifaddrmsg))))
++# define IFA_PAYLOAD(n) NLMSG_PAYLOAD (n, sizeof (struct ifaddrmsg))
++#endif
++
++#ifndef IFLA_RTA
++# define IFLA_RTA(r) \
++  ((struct rtattr*) ((char*)(r) + NLMSG_ALIGN (sizeof (struct ifinfomsg))))
++# define IFLA_PAYLOAD(n) NLMSG_PAYLOAD (n, sizeof (struct ifinfomsg))
++#endif
+ 
+ struct netlink_res
+ {
+--- glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/paths.h
++++ glibc-2.12-1/sysdeps/unix/sysv/linux/paths.h
+@@ -62,7 +62,7 @@
+ #define	_PATH_TTY	"/dev/tty"
+ #define	_PATH_UNIX	"/boot/vmlinux"
+ #define _PATH_UTMP	"/var/run/utmp"
+-#define	_PATH_VI	"/usr/bin/vi"
++#define	_PATH_VI	"/bin/vi"
+ #define _PATH_WTMP	"/var/log/wtmp"
+ 
+ /* Provide trailing slash, since mostly used for building pathnames. */
+--- glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/sparc/sparc64/fxstat.c
++++ glibc-2.12-1/sysdeps/unix/sysv/linux/sparc/sparc64/fxstat.c
+@@ -1 +1 @@
+-#include "../../fxstat.c"
++#include "../../i386/fxstat.c"
+--- glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/tcsetattr.c
++++ glibc-2.12-1/sysdeps/unix/sysv/linux/tcsetattr.c
+@@ -49,6 +49,7 @@ tcsetattr (fd, optional_actions, termios
+ {
+   struct __kernel_termios k_termios;
+   unsigned long int cmd;
++  int retval;
+ 
+   switch (optional_actions)
+     {
+@@ -80,6 +81,35 @@ tcsetattr (fd, optional_actions, termios
+   memcpy (&k_termios.c_cc[0], &termios_p->c_cc[0],
+ 	  __KERNEL_NCCS * sizeof (cc_t));
+ 
+-  return INLINE_SYSCALL (ioctl, 3, fd, cmd, &k_termios);
++  retval = INLINE_SYSCALL (ioctl, 3, fd, cmd, &k_termios);
++
++  if (retval == 0 && cmd == TCSETS)
++    {
++      /* The Linux kernel has a bug which silently ignore the invalid
++        c_cflag on pty. We have to check it here. */
++      int save = errno;
++      retval = INLINE_SYSCALL (ioctl, 3, fd, TCGETS, &k_termios);
++      if (retval)
++       {
++         /* We cannot verify if the setting is ok. We don't return
++            an error (?). */
++         __set_errno (save);
++         retval = 0;
++       }
++      else if ((termios_p->c_cflag & (PARENB | CREAD))
++              != (k_termios.c_cflag & (PARENB | CREAD))
++              || ((termios_p->c_cflag & CSIZE)
++                  && ((termios_p->c_cflag & CSIZE)
++                      != (k_termios.c_cflag & CSIZE))))
++       {
++         /* It looks like the Linux kernel silently changed the
++            PARENB/CREAD/CSIZE bits in c_cflag. Report it as an
++            error. */
++         __set_errno (EINVAL);
++         retval = -1;
++       }
++    }
++
++  return retval;
+ }
+ libc_hidden_def (tcsetattr)
+--- glibc-2.12-2-gc4ccff1/timezone/zic.c
++++ glibc-2.12-1/timezone/zic.c
+@@ -1921,7 +1921,7 @@ const int			zonecount;
+ 		if (stdrp != NULL && stdrp->r_hiyear == 2037)
+ 			return;
+ 	}
+-	if (stdrp == NULL && zp->z_nrules != 0)
++	if (stdrp == NULL && (zp->z_nrules != 0 || zp->z_stdoff != 0))
+ 		return;
+ 	abbrvar = (stdrp == NULL) ? "" : stdrp->r_abbrvar;
+ 	doabbr(result, zp->z_format, abbrvar, FALSE, TRUE);
diff --git a/SOURCES/glibc-fix-implicit-rule.patch b/SOURCES/glibc-fix-implicit-rule.patch
new file mode 100644
index 0000000..7c21696
--- /dev/null
+++ b/SOURCES/glibc-fix-implicit-rule.patch
@@ -0,0 +1,16 @@
+diff -rup a/manual/Makefile b/manual/Makefile
+--- a/manual/Makefile	2010-05-04 05:27:23.000000000 -0600
++++ b/manual/Makefile	2012-05-07 15:18:52.443176136 -0600
+@@ -232,7 +232,11 @@ ifdef objpfx
+ .PHONY: stubs
+ stubs: $(objpfx)stubs
+ endif
+-$(objpfx)stubs ../po/manual.pot $(objpfx)stamp%:
++$(objpfx)stubs ../po/manual.pot:
++	$(make-target-directory)
++	touch $@
++
++$(objpfx)stamp%:
+ 	$(make-target-directory)
+ 	touch $@
+ 
diff --git a/SOURCES/glibc-gcc47-ctordtor.patch b/SOURCES/glibc-gcc47-ctordtor.patch
new file mode 100644
index 0000000..cf456d0
--- /dev/null
+++ b/SOURCES/glibc-gcc47-ctordtor.patch
@@ -0,0 +1,263 @@
+diff -Nrup a/config.h.in b/config.h.in
+--- a/config.h.in	2012-06-07 10:17:05.004639296 -0600
++++ b/config.h.in	2012-06-07 10:17:45.289449200 -0600
+@@ -204,6 +204,9 @@
+ /* Define if Systemtap <sys/sdt.h> probes should be defined.  */
+ #undef USE_STAP_PROBE
+ 
++/* Define if `.ctors' and `.dtors' sections shouldn't be used.  */
++#undef	NO_CTORS_DTORS_SECTIONS
++
+ /*
+  */
+ 
+diff -Nrup a/configure b/configure
+--- a/configure	2012-06-07 10:17:05.427637302 -0600
++++ b/configure	2012-06-07 10:18:20.452282885 -0600
+@@ -577,7 +577,7 @@ as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr
+ exec 7<&0 </dev/null 6>&1
+ 
+ # Name of the host.
+-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
++# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+ # so uname gets run too.
+ ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+ 
+@@ -1307,8 +1307,8 @@ target=$target_alias
+ if test "x$host_alias" != x; then
+   if test "x$build_alias" = x; then
+     cross_compiling=maybe
+-    $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+-    If a cross compiler is detected then cross compile mode will be used." >&2
++    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
++    If a cross compiler is detected then cross compile mode will be used" >&2
+   elif test "x$build_alias" != "x$host_alias"; then
+     cross_compiling=yes
+   fi
+@@ -1412,7 +1412,7 @@ Configuration:
+       --help=short        display options specific to this package
+       --help=recursive    display the short help of all the included packages
+   -V, --version           display version information and exit
+-  -q, --quiet, --silent   do not print \`checking...' messages
++  -q, --quiet, --silent   do not print \`checking ...' messages
+       --cache-file=FILE   cache test results in FILE [disabled]
+   -C, --config-cache      alias for \`--cache-file=config.cache'
+   -n, --no-create         do not create output files
+@@ -1725,11 +1725,9 @@ trap 'exit_status=$?
+   {
+     echo
+ 
+-    cat <<\_ASBOX
+-## ---------------- ##
++    $as_echo "## ---------------- ##
+ ## Cache variables. ##
+-## ---------------- ##
+-_ASBOX
++## ---------------- ##"
+     echo
+     # The following way of writing the cache mishandles newlines in values,
+ (
+@@ -1763,11 +1761,9 @@ $as_echo "$as_me: WARNING: cache variabl
+ )
+     echo
+ 
+-    cat <<\_ASBOX
+-## ----------------- ##
++    $as_echo "## ----------------- ##
+ ## Output variables. ##
+-## ----------------- ##
+-_ASBOX
++## ----------------- ##"
+     echo
+     for ac_var in $ac_subst_vars
+     do
+@@ -1780,11 +1776,9 @@ _ASBOX
+     echo
+ 
+     if test -n "$ac_subst_files"; then
+-      cat <<\_ASBOX
+-## ------------------- ##
++      $as_echo "## ------------------- ##
+ ## File substitutions. ##
+-## ------------------- ##
+-_ASBOX
++## ------------------- ##"
+       echo
+       for ac_var in $ac_subst_files
+       do
+@@ -1798,11 +1792,9 @@ _ASBOX
+     fi
+ 
+     if test -s confdefs.h; then
+-      cat <<\_ASBOX
+-## ----------- ##
++      $as_echo "## ----------- ##
+ ## confdefs.h. ##
+-## ----------- ##
+-_ASBOX
++## ----------- ##"
+       echo
+       cat confdefs.h
+       echo
+@@ -1855,7 +1847,12 @@ _ACEOF
+ ac_site_file1=NONE
+ ac_site_file2=NONE
+ if test -n "$CONFIG_SITE"; then
+-  ac_site_file1=$CONFIG_SITE
++  # We do not want a PATH search for config.site.
++  case $CONFIG_SITE in #((
++    -*)  ac_site_file1=./$CONFIG_SITE;;
++    */*) ac_site_file1=$CONFIG_SITE;;
++    *)   ac_site_file1=./$CONFIG_SITE;;
++  esac
+ elif test "x$prefix" != xNONE; then
+   ac_site_file1=$prefix/share/config.site
+   ac_site_file2=$prefix/etc/config.site
+@@ -1870,7 +1867,11 @@ do
+     { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+ $as_echo "$as_me: loading site script $ac_site_file" >&6;}
+     sed 's/^/| /' "$ac_site_file" >&5
+-    . "$ac_site_file"
++    . "$ac_site_file" \
++      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++as_fn_error $? "failed to load site script $ac_site_file
++See \`config.log' for more details" "$LINENO" 5; }
+   fi
+ done
+ 
+@@ -6520,9 +6521,15 @@ fi
+ { $as_echo "$as_me:$LINENO: result: $libc_cv_initfini_array" >&5
+ $as_echo "$libc_cv_initfini_array" >&6; }
+   if test $libc_cv_initfini_array != yes; then
+-    { { $as_echo "$as_me:$LINENO: error: Need linker with .init_array/.fini_array support." >&5
+-$as_echo "$as_me: error: Need linker with .init_array/.fini_array support." >&2;}
+-   { (exit 1); exit 1; }; }
++    as_fn_error $? "Need linker with .init_array/.fini_array support." "$LINENO" 5
++  elif { ac_try='${CC-cc} -Wl,--verbose 2>&1|grep SORT_BY_INIT_PRIORITY 1>&5'
++  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++  test $ac_status = 0; }; }; then
++    $as_echo "#define NO_CTORS_DTORS_SECTIONS 1" >>confdefs.h
++
+   fi
+ 
+   { $as_echo "$as_me:$LINENO: checking for libunwind-support in compiler" >&5
+@@ -9054,6 +9061,7 @@ DEFS=-DHAVE_CONFIG_H
+ 
+ ac_libobjs=
+ ac_ltlibobjs=
++U=
+ for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+   # 1. Remove the extension, and $U if already installed.
+   ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+diff -Nrup a/configure.in b/configure.in
+--- a/configure.in	2012-06-07 10:17:05.009639273 -0600
++++ b/configure.in	2012-06-07 10:17:45.349448917 -0600
+@@ -1536,6 +1536,8 @@ EOF
+   rm -f conftest*])
+   if test $libc_cv_initfini_array != yes; then
+     AC_MSG_ERROR([Need linker with .init_array/.fini_array support.])
++  elif AC_TRY_COMMAND([${CC-cc} -Wl,--verbose 2>&1|grep SORT_BY_INIT_PRIORITY 1>&AS_MESSAGE_LOG_FD]); then
++    AC_DEFINE(NO_CTORS_DTORS_SECTIONS)
+   fi
+ 
+   AC_CACHE_CHECK(for libunwind-support in compiler,
+diff -Nrup a/elf/sofini.c b/elf/sofini.c
+--- a/elf/sofini.c	2010-05-04 05:27:23.000000000 -0600
++++ b/elf/sofini.c	2012-06-07 10:17:45.350448913 -0600
+@@ -1,12 +1,14 @@
+ /* Finalizer module for ELF shared C library.  This provides terminating
+    null pointer words in the `.ctors' and `.dtors' sections.  */
+ 
++#ifndef NO_CTORS_DTORS_SECTIONS
+ static void (*const __CTOR_END__[1]) (void)
+      __attribute__ ((used, section (".ctors")))
+      = { 0 };
+ static void (*const __DTOR_END__[1]) (void)
+      __attribute__ ((used, section (".dtors")))
+      = { 0 };
++#endif
+ 
+ /* Terminate the frame unwind info section with a 4byte 0 as a sentinel;
+    this would be the 'length' field in a real FDE.  */
+diff -Nrup a/elf/soinit.c b/elf/soinit.c
+--- a/elf/soinit.c	2010-05-04 05:27:23.000000000 -0600
++++ b/elf/soinit.c	2012-06-07 10:17:45.351448908 -0600
+@@ -3,6 +3,7 @@
+    the `.ctors' and `.dtors' sections so the lists are terminated, and
+    calling those lists of functions.  */
+ 
++#ifndef NO_CTORS_DTORS_SECTIONS
+ #include <libc-internal.h>
+ #include <stdlib.h>
+ 
+@@ -40,3 +41,4 @@ __libc_fini (void)
+ 
+ void (*_fini_ptr) (void) __attribute__ ((section (".fini_array")))
+      = &__libc_fini;
++#endif
+diff -Nrup a/sysdeps/i386/init-first.c b/sysdeps/i386/init-first.c
+--- a/sysdeps/i386/init-first.c	2010-05-04 05:27:23.000000000 -0600
++++ b/sysdeps/i386/init-first.c	2012-06-07 10:17:45.353448898 -0600
+@@ -59,7 +59,9 @@ _init (int argc, ...)
+ {
+   init (&argc);
+ 
++#ifndef NO_CTORS_DTORS_SECTIONS
+   __libc_global_ctors ();
++#endif
+ }
+ #endif
+ 
+diff -Nrup a/sysdeps/mach/hurd/i386/init-first.c b/sysdeps/mach/hurd/i386/init-first.c
+--- a/sysdeps/mach/hurd/i386/init-first.c	2010-05-04 05:27:23.000000000 -0600
++++ b/sysdeps/mach/hurd/i386/init-first.c	2012-06-07 10:17:45.354448893 -0600
+@@ -92,7 +92,7 @@ posixland_init (int argc, char **argv, c
+   __getopt_clean_environment (envp);
+ #endif
+ 
+-#ifdef SHARED
++#if defined SHARED && !defined NO_CTORS_DTORS_SECTIONS
+   __libc_global_ctors ();
+ #endif
+ }
+diff -Nrup a/sysdeps/mach/hurd/powerpc/init-first.c b/sysdeps/mach/hurd/powerpc/init-first.c
+--- a/sysdeps/mach/hurd/powerpc/init-first.c	2010-05-04 05:27:23.000000000 -0600
++++ b/sysdeps/mach/hurd/powerpc/init-first.c	2012-06-07 10:17:45.354448893 -0600
+@@ -82,7 +82,7 @@ posixland_init (int argc, char **argv, c
+   __getopt_clean_environment (__environ);
+ #endif
+ 
+-#ifdef SHARED
++#if defined SHARED && !defined NO_CTORS_DTORS_SECTIONS
+   __libc_global_ctors ();
+ #endif
+ }
+diff -Nrup a/sysdeps/sh/init-first.c b/sysdeps/sh/init-first.c
+--- a/sysdeps/sh/init-first.c	2010-05-04 05:27:23.000000000 -0600
++++ b/sysdeps/sh/init-first.c	2012-06-07 10:17:45.355448888 -0600
+@@ -59,7 +59,9 @@ _init (int argc, ...)
+ {
+   init (&argc);
+ 
++#ifndef NO_CTORS_DTORS_SECTIONS
+   __libc_global_ctors ();
++#endif
+ }
+ #endif
+ 
+diff -Nrup a/sysdeps/unix/sysv/linux/init-first.c b/sysdeps/unix/sysv/linux/init-first.c
+--- a/sysdeps/unix/sysv/linux/init-first.c	2010-05-04 05:27:23.000000000 -0600
++++ b/sysdeps/unix/sysv/linux/init-first.c	2012-06-07 10:17:45.356448884 -0600
+@@ -93,7 +93,7 @@ _init (int argc, char **argv, char **env
+   __getopt_clean_environment (envp);
+ #endif
+ 
+-#ifdef SHARED
++#if defined SHARED && !defined NO_CTORS_DTORS_SECTIONS
+   __libc_global_ctors ();
+ #endif
+ }
diff --git a/SOURCES/glibc-getlogin-r.patch b/SOURCES/glibc-getlogin-r.patch
new file mode 100644
index 0000000..9181ce1
--- /dev/null
+++ b/SOURCES/glibc-getlogin-r.patch
@@ -0,0 +1,36 @@
+2010-05-05  Ulrich Drepper  <drepper@redhat.com>
+
+	[BZ #11571]
+	* sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid): Handle
+	too small buffers according to the standard.
+
+Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/getlogin_r.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/getlogin_r.c
++++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/getlogin_r.c
+@@ -81,13 +81,22 @@ __getlogin_r_loginuid (name, namesize)
+   if (tpwd == NULL)
+     goto fail;
+ 
+-  strncpy (name, pwd.pw_name, namesize - 1);
+-  name[namesize - 1] = '\0';
++  int result = 0;
++  size_t needed = strlen (pwd.pw_name) + 1;
++  if (needed > namesize)
++    {
++      __set_errno (ERANGE);
++      result = ERANGE;
++      goto out;
++    }
+ 
++  memcpy (name, pwd.pw_name, needed);
++
++ out:
+   if (use_malloc)
+     free (buf);
+ 
+-  return 0;
++  return result;
+ }
+ 
+ 
diff --git a/SOURCES/glibc-ia64-lib64.patch b/SOURCES/glibc-ia64-lib64.patch
new file mode 100644
index 0000000..05fd922
--- /dev/null
+++ b/SOURCES/glibc-ia64-lib64.patch
@@ -0,0 +1,92 @@
+2004-05-14  Jakub Jelinek  <jakub@redhat.com>
+
+	* sysdeps/unix/sysv/linux/configure.in: Use */lib64 even for ia64.
+	* sysdeps/unix/sysv/linux/configure: Rebuilt.
+	* sysdeps/unix/sysv/linux/ia64/dl-procinfo.c: New file.
+	* sysdeps/unix/sysv/linux/ia64/dl-procinfo.h: New file.
+	* sysdeps/unix/sysv/linux/ia64/ldd-rewrite.sed: Change /lib64/ld*
+	into /lib/ld*.  Add LD_LIBRARY_VERSION.
+	* sysdeps/unix/sysv/linux/ia64/ldconfig.h
+	(SYSDEP_KNOWN_INTERPRETER_NAMES): Add /lib64/ld-linux-ia64.so.2.
+	* sysdeps/unix/sysv/linux/ia64/dl-cache.h: Include sparc-linux
+	dl-cache.h instead of generic dl-cache.h.
+
+--- libc/sysdeps/unix/sysv/linux/configure.jj	2003-03-23 03:10:04.000000000 +0100
++++ libc/sysdeps/unix/sysv/linux/configure	2004-05-14 15:54:35.669802684 +0200
+@@ -225,7 +225,7 @@ case "$prefix" in
+   # 64-bit libraries on bi-arch platforms go in /lib64 instead of /lib
+   case $machine in
+   sparc/sparc64 | x86_64 | powerpc/powerpc64 | s390/s390-64 | \
+-  mips/mips64/n64/* )
++  mips/mips64/n64/* | ia64 )
+     libc_cv_slibdir="/lib64"
+     if test "$libdir" = '${exec_prefix}/lib'; then
+       libdir='${exec_prefix}/lib64';
+--- libc/sysdeps/unix/sysv/linux/configure.in.jj	2003-03-23 03:10:04.000000000 +0100
++++ libc/sysdeps/unix/sysv/linux/configure.in	2004-05-14 15:53:44.355998785 +0200
+@@ -158,7 +158,7 @@ case "$prefix" in
+   # 64-bit libraries on bi-arch platforms go in /lib64 instead of /lib
+   case $machine in
+   sparc/sparc64 | x86_64 | powerpc/powerpc64 | s390/s390-64 | \
+-  mips/mips64/n64/* )
++  mips/mips64/n64/* | ia64 )
+     libc_cv_slibdir="/lib64"
+     if test "$libdir" = '${exec_prefix}/lib'; then
+       libdir='${exec_prefix}/lib64';
+--- libc/sysdeps/unix/sysv/linux/ia64/dl-procinfo.c.jj	2004-05-14 15:42:09.307560515 +0200
++++ libc/sysdeps/unix/sysv/linux/ia64/dl-procinfo.c	2003-09-30 00:23:24.000000000 +0200
+@@ -0,0 +1,5 @@
++#ifdef IS_IN_ldconfig
++#include <sysdeps/i386/dl-procinfo.c>
++#else
++#include <sysdeps/generic/dl-procinfo.c>
++#endif
+--- libc/sysdeps/unix/sysv/linux/ia64/ldd-rewrite.sed.jj	2002-01-17 07:49:28.000000000 +0100
++++ libc/sysdeps/unix/sysv/linux/ia64/ldd-rewrite.sed	2004-05-14 16:21:03.041325040 +0200
+@@ -1 +1,4 @@
+-s_^\(RTLDLIST=\)\([^ 	]*\)-ia64\(\.so\.[0-9.]*\)[ 	]*$_\1"\2-ia64\3 \2\3"_
++/LD_TRACE_LOADED_OBJECTS=1/a\
++add_env="$add_env LD_LIBRARY_VERSION=\\$verify_out"
++s_^\(RTLDLIST=\)/lib64/ld\([^ 	]*\)-ia64\(\.so\.[0-9.]*\)[ 	]*$_\1"/lib/ld\2-ia64\3 /lib/ld\2\3"_
++s_^\(RTLDLIST=\)\([^"][^ 	]*\)-ia64\(\.so\.[0-9.]*\)[ 	]*$_\1"\2-ia64\3 \2\3"_
+--- libc/sysdeps/unix/sysv/linux/ia64/ldconfig.h.jj	2001-07-06 06:56:17.000000000 +0200
++++ libc/sysdeps/unix/sysv/linux/ia64/ldconfig.h	2004-05-14 15:45:40.103783087 +0200
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 2001 Free Software Foundation, Inc.
++/* Copyright (C) 2001, 2004 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+ 
+    The GNU C Library is free software; you can redistribute it and/or
+@@ -19,7 +19,8 @@
+ #include <sysdeps/generic/ldconfig.h>
+ 
+ #define SYSDEP_KNOWN_INTERPRETER_NAMES \
+-  { "/lib/ld-linux.so.2", FLAG_ELF_LIBC6 },
++  { "/lib/ld-linux.so.2", FLAG_ELF_LIBC6 }, \
++  { "/lib64/ld-linux-ia64.so.2", FLAG_ELF_LIBC6 },
+ #define SYSDEP_KNOWN_LIBRARY_NAMES \
+   { "libc.so.6", FLAG_ELF_LIBC6 },	\
+   { "libm.so.6", FLAG_ELF_LIBC6 },
+--- libc/sysdeps/unix/sysv/linux/ia64/dl-cache.h.jj	2001-07-06 06:56:17.000000000 +0200
++++ libc/sysdeps/unix/sysv/linux/ia64/dl-cache.h	2004-05-14 15:41:11.658891907 +0200
+@@ -1,5 +1,5 @@
+ /* Support for reading /etc/ld.so.cache files written by Linux ldconfig.
+-   Copyright (C) 2000 Free Software Foundation, Inc.
++   Copyright (C) 2000, 2004 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+ 
+    The GNU C Library is free software; you can redistribute it and/or
+@@ -22,4 +22,4 @@
+ #define _dl_cache_check_flags(flags) \
+   ((flags) == _DL_CACHE_DEFAULT_ID)
+ 
+-#include_next <dl-cache.h>
++#include <sysdeps/unix/sysv/linux/sparc/dl-cache.h>
+--- libc/sysdeps/unix/sysv/linux/ia64/dl-procinfo.h.jj	2004-05-14 15:42:13.018895395 +0200
++++ libc/sysdeps/unix/sysv/linux/ia64/dl-procinfo.h	2003-07-23 00:06:23.000000000 +0200
+@@ -0,0 +1,5 @@
++#ifdef IS_IN_ldconfig
++#include <sysdeps/unix/sysv/linux/i386/dl-procinfo.h>
++#else
++#include <sysdeps/generic/dl-procinfo.h>
++#endif
diff --git a/SOURCES/glibc-localedata.patch b/SOURCES/glibc-localedata.patch
new file mode 100644
index 0000000..15de7c6
--- /dev/null
+++ b/SOURCES/glibc-localedata.patch
@@ -0,0 +1,18 @@
+2010-05-04  Andreas Schwab  <schwab@redhat.com>
+
+	* SUPPORTED (SUPPORTED-LOCALES): Fix name of tt_RU.UTF-8@iqtelif
+	locale.
+
+Index: glibc-2.12-2-gc4ccff1/localedata/SUPPORTED
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/SUPPORTED
++++ glibc-2.12-2-gc4ccff1/localedata/SUPPORTED
+@@ -392,7 +392,7 @@ tr_TR.UTF-8/UTF-8 \
+ tr_TR/ISO-8859-9 \
+ ts_ZA/UTF-8 \
+ tt_RU.UTF-8/UTF-8 \
+-tt_RU@iqtelif.UTF-8/UTF-8 \
++tt_RU.UTF-8@iqtelif/UTF-8 \
+ ug_CN/UTF-8 \
+ uk_UA.UTF-8/UTF-8 \
+ uk_UA/KOI8-U \
diff --git a/SOURCES/glibc-ppc-mnemonics.patch b/SOURCES/glibc-ppc-mnemonics.patch
new file mode 100644
index 0000000..b805892
--- /dev/null
+++ b/SOURCES/glibc-ppc-mnemonics.patch
@@ -0,0 +1,11 @@
+diff -Nrup a/sysdeps/powerpc/Makefile b/sysdeps/powerpc/Makefile
+--- a/sysdeps/powerpc/Makefile	2010-05-04 05:27:23.000000000 -0600
++++ b/sysdeps/powerpc/Makefile	2013-05-28 09:56:51.056475174 -0600
+@@ -1,7 +1,3 @@
+-# We always want to use the new mnemonic syntax even if we are on a RS6000
+-# machine.
+-+cflags += -mnew-mnemonics
+-
+ ifeq ($(subdir),gmon)
+ sysdep_routines += ppc-mcount
+ endif
diff --git a/SOURCES/glibc-recvmmsg.patch b/SOURCES/glibc-recvmmsg.patch
new file mode 100644
index 0000000..9e3aa7a
--- /dev/null
+++ b/SOURCES/glibc-recvmmsg.patch
@@ -0,0 +1,182 @@
+2010-05-21  Andreas Schwab  <schwab@redhat.com>
+
+	* sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Add recvmmsg
+	and internal_recvmmsg.
+	* sysdeps/unix/sysv/linux/recvmmsg.c: New file.
+	* sysdeps/unix/sysv/linux/internal_recvmmsg.S: New file.
+	* sysdeps/unix/sysv/linux/socketcall.h (SOCKOP_recvmmsg): Define.
+	* sysdeps/unix/sysv/linux/syscalls.list (recvmmsg): Remove.
+
+Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/Makefile
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/Makefile
++++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/Makefile
+@@ -12,7 +12,7 @@ CFLAGS-malloc.c += -DMORECORE_CLEARS=2
+ endif
+ 
+ ifeq ($(subdir),socket)
+-sysdep_routines += internal_accept4
++sysdep_routines += internal_accept4 recvmmsg internal_recvmmsg
+ endif
+ 
+ ifeq ($(subdir),misc)
+Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/internal_recvmmsg.S
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/internal_recvmmsg.S
+@@ -0,0 +1,14 @@
++#include <kernel-features.h>
++#include <sys/syscall.h>
++#if !defined __NR_recvmmsg && defined __NR_socketcall
++# define socket	recvmmsg
++# ifdef __ASSUME_RECVMMSG
++#  define __socket recvmmsg
++# else
++#  define __socket __internal_recvmmsg
++# endif
++# define NARGS 5
++# define NEED_CANCELLATION
++# define NO_WEAK_ALIAS
++# include <socket.S>
++#endif
+Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/kernel-features.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/kernel-features.h
++++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/kernel-features.h
+@@ -547,3 +547,8 @@
+ #if __LINUX_KERNEL_VERSION >= 0x020620
+ # define __ASSUME_F_GETOWN_EX	1
+ #endif
++
++/* Support for the recvmmsg syscall was added in 2.6.33.  */
++#if __LINUX_KERNEL_VERSION >= 0x020621
++# define __ASSUME_RECVMMSG	1
++#endif
+Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/recvmmsg.c
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/recvmmsg.c
+@@ -0,0 +1,100 @@
++/* Copyright (C) 2010 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++   Contributed by Andreas Schwab <schwab@redhat.com>, 2010.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library 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
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++#include <errno.h>
++#include <sys/socket.h>
++
++#include <sysdep-cancel.h>
++#include <sys/syscall.h>
++#include <kernel-features.h>
++
++
++#ifdef __NR_recvmmsg
++int
++recvmmsg (int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags,
++	  const struct timespec *tmo)
++{
++  if (SINGLE_THREAD_P)
++    return INLINE_SYSCALL (recvmmsg, 5, fd, vmessages, vlen, flags, tmo);
++
++  int oldtype = LIBC_CANCEL_ASYNC ();
++
++  int result = INLINE_SYSCALL (recvmmsg, 5, fd, vmessages, vlen, flags, tmo);
++
++  LIBC_CANCEL_RESET (oldtype);
++
++  return result;
++}
++#elif defined __NR_socketcall
++# ifndef __ASSUME_RECVMMSG
++extern int __internal_recvmmsg (int fd, struct mmsghdr *vmessages,
++				unsigned int vlen, int flags,
++				const struct timespec *tmo)
++     attribute_hidden;
++
++static int have_recvmmsg;
++
++int
++recvmmsg (int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags,
++	  const struct timespec *tmo)
++{
++  if (__builtin_expect (have_recvmmsg >= 0, 1))
++    {
++      int ret = __internal_recvmmsg (fd, vmessages, vlen, flags, tmo);
++      /* The kernel returns -EINVAL for unknown socket operations.
++	 We need to convert that error to an ENOSYS error.  */
++      if (__builtin_expect (ret < 0, 0)
++	  && have_recvmmsg == 0
++	  && errno == EINVAL)
++	{
++	  /* Try another call, this time with an invalid file
++	     descriptor and all other parameters cleared.  This call
++	     will not cause any harm and it will return
++	     immediately.  */
++	  ret = __internal_recvmmsg (-1, 0, 0, 0, 0);
++	  if (errno == EINVAL)
++	    {
++	      have_recvmmsg = -1;
++	      __set_errno (ENOSYS);
++	    }
++	  else
++	    {
++	      have_recvmmsg = 1;
++	      __set_errno (EINVAL);
++	    }
++	  return -1;
++	}
++      return ret;
++    }
++  __set_errno (ENOSYS);
++  return -1;
++}
++# else
++/* When __ASSUME_RECVMMSG recvmmsg is defined in internal_recvmmsg.S.  */
++# endif
++#else
++int
++recvmmsg (int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags,
++	  const struct timespec *tmo)
++{
++  __set_errno (ENOSYS);
++  return -1;
++}
++stub_warning (recvmmsg)
++#endif
+Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/socketcall.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/socketcall.h
++++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/socketcall.h
+@@ -44,5 +44,6 @@
+ #define SOCKOP_sendmsg		16
+ #define SOCKOP_recvmsg		17
+ #define SOCKOP_accept4		18
++#define SOCKOP_recvmmsg		19
+ 
+ #endif /* sys/socketcall.h */
+Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/syscalls.list
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/syscalls.list
++++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/syscalls.list
+@@ -53,7 +53,6 @@ prctl		EXTRA	prctl		i:iiiii	__prctl		prc
+ putpmsg		-	putpmsg		i:ippii	putpmsg
+ query_module	EXTRA	query_module	i:sipip	query_module
+ quotactl	EXTRA	quotactl	i:isip	quotactl
+-recvmmsg	EXTRA	recvmmsg	Ci:ipiip	recvmmsg
+ remap_file_pages -	remap_file_pages i:piiii	__remap_file_pages remap_file_pages
+ sched_getp	-	sched_getparam	i:ip	__sched_getparam	sched_getparam
+ sched_gets	-	sched_getscheduler	i:i	__sched_getscheduler	sched_getscheduler
diff --git a/SOURCES/glibc-rh580498.patch b/SOURCES/glibc-rh580498.patch
new file mode 100644
index 0000000..05b673a
--- /dev/null
+++ b/SOURCES/glibc-rh580498.patch
@@ -0,0 +1,296 @@
+2010-07-03  Ulrich Drepper  <drepper@redhat.com>
+
+	* tst-abstime.c (do_test): Some more cleanups
+
+2010-07-02  Ulrich Drepper  <drepper@redhat.com>
+
+	* tst-abstime.c: Correct testing and add test for sem_timedwait.
+
+2010-07-01  Andreas Schwab  <schwab@redhat.com>
+	    Ulrich Drepper  <drepper@redhat.com>
+
+	* Makefile (tests): Add tst-abstime.
+	* tst-abstime.c: New file.
+	* sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S
+	(__lll_timedlock_wait): Check for timestamp before the Epoch.
+	* sysdeps/unix/sysv/linux/x86_64/lowlevellock.S
+	(__lll_timedlock_wait): Likewise.
+	* sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S
+	(__lll_robust_timedlock_wait): Likewise.
+	* sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
+	(__pthread_cond_timedwait): Likewise.
+	* sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S
+	(pthread_rwlock_timedrdlock): Likewise.
+	* sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S
+	(pthread_rwlock_timedwrlock): Likewise.
+	* sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S (sem_timedwait):
+	Likewise.
+
+Index: glibc-2.12-2-gc4ccff1/nptl/Makefile
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nptl/Makefile
++++ glibc-2.12-2-gc4ccff1/nptl/Makefile
+@@ -256,6 +256,7 @@ tests = tst-typesizes \
+ 	tst-sched1 \
+ 	tst-backtrace1 \
+ 	tst-oddstacklimit \
++	tst-abstime \
+ 	tst-vfork1 tst-vfork2 tst-vfork1x tst-vfork2x \
+ 	tst-getpid1 tst-getpid2 tst-getpid3 \
+ 	tst-initializers1 $(patsubst %,tst-initializers1-%,c89 gnu89 c99 gnu99)
+Index: glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S
++++ glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S
+@@ -188,6 +188,9 @@ __lll_timedlock_wait:
+ 	je	.Lreltmo
+ # endif
+ 
++	cmpl	$0, (%edx)
++	js	8f
++
+ 	movl	%ecx, %ebx
+ 	movl	%esi, %ecx
+ 	movl	%edx, %esi
+@@ -223,6 +226,9 @@ __lll_timedlock_wait:
+ 	cfi_restore(%ebp)
+ 	ret
+ 
++8:	movl	$ETIMEDOUT, %eax
++	jmp	7b
++
+ # ifndef __ASSUME_FUTEX_CLOCK_REALTIME
+ .Lreltmo:
+ 	/* Check for a valid timeout value.  */
+Index: glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S
++++ glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S
+@@ -169,9 +169,13 @@ __lll_timedlock_wait:
+ 	je	.Lreltmo
+ # endif
+ 
++	cmpq	$0, (%rdx)
++	js	5f
++
+ 	pushq	%r9
+ 	cfi_adjust_cfa_offset(8)
+ 	cfi_rel_offset(%r9, 0)
++
+ 	movq	%rdx, %r10
+ 	movl	$0xffffffff, %r9d
+ 	LOAD_FUTEX_WAIT_ABS (%esi)
+@@ -202,6 +206,9 @@ __lll_timedlock_wait:
+ 	cfi_restore(%r9)
+ 	retq
+ 
++5:	movl	$ETIMEDOUT, %eax
++	retq
++
+ # ifndef __ASSUME_FUTEX_CLOCK_REALTIME
+ .Lreltmo:
+ 	/* Check for a valid timeout value.  */
+Index: glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S
++++ glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S
+@@ -125,6 +125,9 @@ __lll_robust_timedlock_wait:
+ 	je	.Lreltmo
+ # endif
+ 
++	cmpq	$0, (%rdx)
++	js	7f
++
+ 	pushq	%r9
+ 	cfi_adjust_cfa_offset(8)
+ 	cfi_rel_offset(%r9, 0)
+@@ -180,6 +183,9 @@ __lll_robust_timedlock_wait:
+ 	cfi_adjust_cfa_offset(-8)
+ 	cfi_restore(%r9)
+ 
++7:	movl	$ETIMEDOUT, %eax
++	retq
++
+ 
+ # ifndef __ASSUME_FUTEX_CLOCK_REALTIME
+ .Lreltmo:
+Index: glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
++++ glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
+@@ -144,6 +144,10 @@ __pthread_cond_timedwait:
+ 	movq	%r9, 24(%rsp)
+ 	movl	%edx, 4(%rsp)
+ 
++	cmpq	$0, (%r13)
++	movq	$-ETIMEDOUT, %r14
++	js	36f
++
+ 38:	movl	cond_futex(%rdi), %r12d
+ 
+ 	/* Unlock.  */
+Index: glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S
++++ glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S
+@@ -102,6 +102,9 @@ pthread_rwlock_timedrdlock:
+ 	je	.Lreltmo
+ #endif
+ 
++	cmpq	$0, (%r13)
++	js	16f		/* Time is already up.  */
++
+ 	movl	$FUTEX_PRIVATE_FLAG|FUTEX_WAIT_BITSET|FUTEX_CLOCK_REALTIME, %esi
+ 	xorl	PSHARED(%r12), %esi
+ 	movq	%r13, %r10
+Index: glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S
++++ glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S
+@@ -99,6 +99,9 @@ pthread_rwlock_timedwrlock:
+ 	je	.Lreltmo
+ #endif
+ 
++	cmpq	$0, (%r13)
++	js	16f		/* Time is already up. */
++
+ 	movl	$FUTEX_PRIVATE_FLAG|FUTEX_WAIT_BITSET|FUTEX_CLOCK_REALTIME, %esi
+ 	xorl	PSHARED(%r12), %esi
+ 	movq	%r13, %r10
+Index: glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S
++++ glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S
+@@ -77,6 +77,9 @@ sem_timedwait:
+ 	je	.Lreltmo
+ #endif
+ 
++	cmpq	$0, (%rsi)
++	js	16f
++
+ 	/* This push is only needed to store the sem_t pointer for the
+ 	   exception handler.  */
+ 	pushq	%rdi
+@@ -169,6 +172,19 @@ sem_timedwait:
+ 
+ 	retq
+ 
++16:
++#if USE___THREAD
++	movq	errno@gottpoff(%rip), %rdx
++	movl	$ETIMEDOUT, %fs:(%rdx)
++#else
++	callq	__errno_location@plt
++	movl	$ETIMEDOUT, (%rax)
++#endif
++
++	orl	$-1, %eax
++
++	retq
++
+ #ifndef __ASSUME_FUTEX_CLOCK_REALTIME
+ .Lreltmo:
+ 	pushq	%r12
+Index: glibc-2.12-2-gc4ccff1/nptl/tst-abstime.c
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/nptl/tst-abstime.c
+@@ -0,0 +1,98 @@
++/* Copyright (C) 2010 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++   Contributed by Andreas Schwab <schwab@redhat.com>, 2010.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library 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
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++#include <errno.h>
++#include <pthread.h>
++#include <semaphore.h>
++#include <stdio.h>
++
++static pthread_cond_t c = PTHREAD_COND_INITIALIZER;
++static pthread_mutex_t m1 = PTHREAD_MUTEX_INITIALIZER;
++static pthread_mutex_t m2 = PTHREAD_MUTEX_INITIALIZER;
++static pthread_rwlock_t rw1 = PTHREAD_RWLOCK_INITIALIZER;
++static pthread_rwlock_t rw2 = PTHREAD_RWLOCK_INITIALIZER;
++static sem_t sem;
++
++static void *
++th (void *arg)
++{
++  long int res = 0;
++  int r;
++  struct timespec t = { -2, 0 };
++
++  r = pthread_mutex_timedlock (&m1, &t);
++  if (r != ETIMEDOUT)
++    {
++      puts ("pthread_mutex_timedlock did not return ETIMEDOUT");
++      res = 1;
++    }
++  r = pthread_rwlock_timedrdlock (&rw1, &t);
++  if (r != ETIMEDOUT)
++    {
++      puts ("pthread_rwlock_timedrdlock did not return ETIMEDOUT");
++      res = 1;
++    }
++  r = pthread_rwlock_timedwrlock (&rw2, &t);
++  if (r != ETIMEDOUT)
++    {
++      puts ("pthread_rwlock_timedwrlock did not return ETIMEDOUT");
++      res = 1;
++    }
++  return (void *) res;
++}
++
++static int
++do_test (void)
++{
++  int res = 0;
++  int r;
++  struct timespec t = { -2, 0 };
++  pthread_t pth;
++
++  sem_init (&sem, 0, 0);
++  r = sem_timedwait (&sem, &t);
++  if (r != -1 || errno != ETIMEDOUT)
++    {
++      puts ("sem_timedwait did not fail with ETIMEDOUT");
++      res = 1;
++    }
++
++  pthread_mutex_lock (&m1);
++  pthread_rwlock_wrlock (&rw1);
++  pthread_rwlock_rdlock (&rw2);
++  pthread_mutex_lock (&m2);
++  if (pthread_create (&pth, 0, th, 0) != 0)
++    {
++      puts ("cannot create thread");
++      return 1;
++    }
++  r = pthread_cond_timedwait (&c, &m2, &t);
++  if (r != ETIMEDOUT)
++    {
++      puts ("pthread_cond_timedwait did not return ETIMEDOUT");
++      res = 1;
++    }
++  void *thres;
++  pthread_join (pth, &thres);
++  return res | (thres != NULL);
++}
++
++
++#define TEST_FUNCTION do_test ()
++#include "../test-skeleton.c"
diff --git a/SOURCES/glibc-rh582738.patch b/SOURCES/glibc-rh582738.patch
new file mode 100644
index 0000000..40f7b80
--- /dev/null
+++ b/SOURCES/glibc-rh582738.patch
@@ -0,0 +1,13 @@
+Index: glibc-2.11-382-g1cdb215/nscd/nscd.init
+===================================================================
+--- glibc-2.11-382-g1cdb215.orig/nscd/nscd.init
++++ glibc-2.11-382-g1cdb215/nscd/nscd.init
+@@ -76,7 +76,7 @@ case "$1" in
+ 	RETVAL=$?
+ 	;;
+     stop)
+-	stop
++	[ ! -e /var/lock/subsys/nscd ] || stop
+ 	RETVAL=$?
+ 	;;
+     status)
diff --git a/SOURCES/glibc-rh587360.patch b/SOURCES/glibc-rh587360.patch
new file mode 100644
index 0000000..07b62e6
--- /dev/null
+++ b/SOURCES/glibc-rh587360.patch
@@ -0,0 +1,13 @@
+Index: glibc-2.11-382-g1cdb215/posix/regexec.c
+===================================================================
+--- glibc-2.11-382-g1cdb215.orig/posix/regexec.c
++++ glibc-2.11-382-g1cdb215/posix/regexec.c
+@@ -4031,7 +4031,7 @@ find_collation_sequence_value (const uns
+ 	  /* Skip the collation sequence value.  */
+ 	  idx += sizeof (uint32_t);
+ 	  /* Skip the wide char sequence of the collating element.  */
+-	  idx = idx + sizeof (uint32_t) * (extra[idx] + 1);
++	  idx = idx + sizeof (uint32_t) * (*(int32_t *) (extra + idx) + 1);
+ 	  /* If we found the entry, return the sequence value.  */
+ 	  if (found)
+ 	    return *(uint32_t *) (extra + idx);
diff --git a/SOURCES/glibc-rh593396.patch b/SOURCES/glibc-rh593396.patch
new file mode 100644
index 0000000..b907a36
--- /dev/null
+++ b/SOURCES/glibc-rh593396.patch
@@ -0,0 +1,42 @@
+2010-05-06  Ulrich Drepper  <drepper@redhat.com>
+
+	* malloc/malloc.c (_int_free): Possible race in the most recently
+	added check.  Only act on the data if no current modification
+	happened.
+
+Index: glibc-2.12-2-gc4ccff1/malloc/malloc.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/malloc/malloc.c
++++ glibc-2.12-2-gc4ccff1/malloc/malloc.c
+@@ -4859,6 +4859,7 @@ _int_free(mstate av, mchunkptr p)
+ #ifdef ATOMIC_FASTBINS
+     mchunkptr fd;
+     mchunkptr old = *fb;
++    unsigned int old_idx = ~0u;
+     do
+       {
+ 	/* Another simple check: make sure the top of the bin is not the
+@@ -4868,15 +4869,17 @@ _int_free(mstate av, mchunkptr p)
+ 	    errstr = "double free or corruption (fasttop)";
+ 	    goto errout;
+ 	  }
+-	if (old != NULL
+-	    && __builtin_expect (fastbin_index(chunksize(old)) != idx, 0))
+-	  {
+-	    errstr = "invalid fastbin entry (free)";
+-	    goto errout;
+-	  }
++	if (old != NULL)
++	  old_idx = fastbin_index(chunksize(old));
+ 	p->fd = fd = old;
+       }
+     while ((old = catomic_compare_and_exchange_val_rel (fb, p, fd)) != fd);
++
++    if (fd != NULL && __builtin_expect (old_idx != idx, 0))
++      {
++	errstr = "invalid fastbin entry (free)";
++	goto errout;
++      }
+ #else
+     /* Another simple check: make sure the top of the bin is not the
+        record we are going to add (i.e., double free).  */
diff --git a/SOURCES/glibc-rh593686.patch b/SOURCES/glibc-rh593686.patch
new file mode 100644
index 0000000..3eceb68
--- /dev/null
+++ b/SOURCES/glibc-rh593686.patch
@@ -0,0 +1,179 @@
+2010-05-26  Andreas Schwab  <schwab@redhat.com>
+
+	* elf/Makefile: Add rules to build and run unload8 test.
+	* elf/unload8.c: New file.
+	* elf/unload8mod1.c: New file.
+	* elf/unload8mod1x.c: New file.
+	* elf/unload8mod2.c: New file.
+	* elf/unload8mod3.c: New file.
+
+	* elf/dl-close.c (_dl_close_worker): Reset private search list if
+	it wasn't used.
+
+Index: glibc-2.12-2-gc4ccff1/elf/Makefile
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/elf/Makefile
++++ glibc-2.12-2-gc4ccff1/elf/Makefile
+@@ -89,6 +89,7 @@ distribute	:= rtld-Rules \
+ 		   unload4mod1.c unload4mod2.c unload4mod3.c unload4mod4.c \
+ 		   unload6mod1.c unload6mod2.c unload6mod3.c \
+ 		   unload7mod1.c unload7mod2.c \
++		   unload8mod1.c unload8mod1x.c unload8mod2.c unload8mod3.c \
+ 		   tst-audit1.c tst-audit2.c tst-audit3.c tst-audit4.c \
+ 		   tst-auditmod1.c tst-auditmod3a.c tst-auditmod3b.c \
+ 		   tst-auditmod4a.c tst-auditmod4b.c \
+@@ -196,7 +197,7 @@ tests += loadtest restest1 preloadtest l
+ 	 tst-align tst-align2 $(tests-execstack-$(have-z-execstack)) \
+ 	 tst-dlmodcount tst-dlopenrpath tst-deep1 \
+ 	 tst-dlmopen1 tst-dlmopen2 tst-dlmopen3 \
+-	 unload3 unload4 unload5 unload6 unload7 tst-global1 order2 \
++	 unload3 unload4 unload5 unload6 unload7 unload8 tst-global1 order2 \
+ 	 tst-audit1 tst-audit2 \
+ 	 tst-stackguard1 tst-addr1 tst-thrlock \
+ 	 tst-unique1 tst-unique2
+@@ -247,6 +248,7 @@ modules-names = testobj1 testobj2 testob
+ 		unload4mod1 unload4mod2 unload4mod3 unload4mod4 \
+ 		unload6mod1 unload6mod2 unload6mod3 \
+ 		unload7mod1 unload7mod2 \
++		unload8mod1 unload8mod1x unload8mod2 unload8mod3 \
+ 		order2mod1 order2mod2 order2mod3 order2mod4 \
+ 		tst-unique1mod1 tst-unique1mod2 \
+ 		tst-unique2mod1 tst-unique2mod2
+@@ -522,6 +524,9 @@ $(objpfx)unload6mod2.so: $(libdl)
+ $(objpfx)unload6mod3.so: $(libdl)
+ $(objpfx)unload7mod1.so: $(libdl)
+ $(objpfx)unload7mod2.so: $(objpfx)unload7mod1.so
++$(objpfx)unload8mod1.so: $(objpfx)unload8mod2.so
++$(objpfx)unload8mod2.so: $(objpfx)unload8mod3.so
++$(objpfx)unload8mod3.so: $(libdl)
+ 
+ LDFLAGS-tst-tlsmod5.so = -nostdlib
+ LDFLAGS-tst-tlsmod6.so = -nostdlib
+@@ -823,6 +828,9 @@ $(objpfx)unload7: $(libdl)
+ $(objpfx)unload7.out: $(objpfx)unload7mod1.so $(objpfx)unload7mod2.so
+ unload7-ENV = MALLOC_PERTURB_=85
+ 
++$(objpfx)unload8: $(libdl)
++$(objpfx)unload8.out: $(objpfx)unload8mod1.so $(objpfx)unload8mod1x.so
++
+ ifdef libdl
+ $(objpfx)tst-tls9-static: $(common-objpfx)dlfcn/libdl.a
+ $(objpfx)tst-tls9-static.out: $(objpfx)tst-tlsmod5.so $(objpfx)tst-tlsmod6.so
+Index: glibc-2.12-2-gc4ccff1/elf/dl-close.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/elf/dl-close.c
++++ glibc-2.12-2-gc4ccff1/elf/dl-close.c
+@@ -421,6 +421,13 @@ _dl_close_worker (struct link_map *map)
+ 
+ 	      imap->l_scope_max = new_size;
+ 	    }
++	  else if (new_list != NULL)
++	    {
++	      /* We didn't change the scope array, so reset the search
++		 list.  */
++	      imap->l_searchlist.r_list = NULL;
++	      imap->l_searchlist.r_nlist = 0;
++	    }
+ 
+ 	  /* The loader is gone, so mark the object as not having one.
+ 	     Note: l_idx != IDX_STILL_USED -> object will be removed.  */
+Index: glibc-2.12-2-gc4ccff1/elf/unload8.c
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/elf/unload8.c
+@@ -0,0 +1,33 @@
++#include <dlfcn.h>
++#include <stdio.h>
++
++int
++main (void)
++{
++  void *h = dlopen ("$ORIGIN/unload8mod1.so", RTLD_LAZY);
++  if (h == NULL)
++    {
++      puts ("dlopen unload8mod1.so failed");
++      return 1;
++    }
++
++  void *h2 = dlopen ("$ORIGIN/unload8mod1x.so", RTLD_LAZY);
++  if (h2 == NULL)
++    {
++      puts ("dlopen unload8mod1x.so failed");
++      return 1;
++    }
++  dlclose (h2);
++
++  int (*mod1) (void) = dlsym (h, "mod1");
++  if (mod1 == NULL)
++    {
++      puts ("dlsym failed");
++      return 1;
++    }
++
++  mod1 ();
++  dlclose (h);
++
++  return 0;
++}
+Index: glibc-2.12-2-gc4ccff1/elf/unload8mod1.c
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/elf/unload8mod1.c
+@@ -0,0 +1,7 @@
++extern void mod2 (void);
++
++void
++mod1 (void)
++{
++  mod2 ();
++}
+Index: glibc-2.12-2-gc4ccff1/elf/unload8mod1x.c
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/elf/unload8mod1x.c
+@@ -0,0 +1 @@
++int mod1x;
+Index: glibc-2.12-2-gc4ccff1/elf/unload8mod2.c
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/elf/unload8mod2.c
+@@ -0,0 +1,7 @@
++extern void mod3 (void);
++
++void
++mod2 (void)
++{
++  mod3 ();
++}
+Index: glibc-2.12-2-gc4ccff1/elf/unload8mod3.c
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/elf/unload8mod3.c
+@@ -0,0 +1,27 @@
++#include <dlfcn.h>
++#include <stdio.h>
++#include <stdlib.h>
++
++void
++mod3_fini2 (void)
++{
++}
++
++void
++mod3_fini (void)
++{
++  mod3_fini2 ();
++}
++
++void
++mod3 (void)
++{
++  void *h = dlopen ("$ORIGIN/unload8mod2.so", RTLD_LAZY);
++  if (h == NULL)
++    {
++      puts ("dlopen unload8mod2.so failed");
++      exit (1);
++    }
++
++  atexit (mod3_fini);
++}
diff --git a/SOURCES/glibc-rh601686.patch b/SOURCES/glibc-rh601686.patch
new file mode 100644
index 0000000..01e42dc
--- /dev/null
+++ b/SOURCES/glibc-rh601686.patch
@@ -0,0 +1,4640 @@
+2010-11-09  H.J. Lu  <hongjiu.lu@intel.com>
+
+	[BZ #12205]
+	* string/test-strncasecmp.c (check_result): New function.
+	(do_one_test): Use it.
+	(check1): New function.
+	(test_main): Use it.
+	* sysdeps/i386/i686/multiarch/strcmp.S (nibble_ashr_use_sse4_2_exit):
+	Support strcasecmp and strncasecmp.
+
+2010-10-03  Ulrich Drepper  <drepper@gmail.com>
+
+	[BZ #12077]
+	* sysdeps/x86_64/strcmp.S: Fix handling of remaining bytes in buffer
+	for strncmp and strncasecmp.
+	* string/stratcliff.c: Add tests for strcmp and strncmp.
+	* wcsmbs/wcsatcliff.c: Adjust for stratcliff change.
+
+2010-09-20  Ulrich Drepper  <drepper@redhat.com>
+
+	* sysdeps/x86_64/strcmp.S: Fix another type in strncasecmp limit
+	detection.
+
+2010-08-19  Ulrich Drepper  <drepper@redhat.com>
+
+	* sysdeps/x86_64/multiarch/strcmp.S: Fix two typos in strncasecmp
+	handling.
+
+2010-08-15  Ulrich Drepper  <drepper@redhat.com>
+
+	* sysdeps/x86_64/strcmp.S: Use correct register for fourth parameter
+	of strncasecmp_l.
+	* sysdeps/multiarch/strcmp.S: Likewise.
+
+2010-08-14  Ulrich Drepper  <drepper@redhat.com>
+
+	* sysdeps/x86_64/Makefile [subdir=string] (sysdep_routines): Add
+	strncase_l-nonascii.
+	* sysdeps/x86_64/multiarch/Makefile [subdir=string] (sysdep_routines):
+	Add strncase_l-ssse3.
+	* sysdeps/x86_64/multiarch/strcmp.S: Prepare for use as strncasecmp.
+	* sysdeps/x86_64/strcmp.S: Likewise.
+	* sysdeps/x86_64/multiarch/strncase_l-ssse3.S: New file.
+	* sysdeps/x86_64/multiarch/strncase_l.S: New file.
+	* sysdeps/x86_64/strncase.S: New file.
+	* sysdeps/x86_64/strncase_l-nonascii.c: New file.
+	* sysdeps/x86_64/strncase_l.S: New file.
+	* string/Makefile (strop-tests): Add strncasecmp.
+	* string/test-strncasecmp.c: New file.
+
+	* sysdeps/x86_64/strcasecmp_l-nonascii.c: Add prototype to avoid
+	warning.
+
+	* sysdeps/x86_64/strcmp.S: Move definition of NO_NOLOCALE_ALIAS to...
+	* sysdeps/x86_64/multiarch/strcasecmp_l-ssse3.S: ... here.
+
+2010-07-31  Ulrich Drepper  <drepper@redhat.com>
+
+	* sysdeps/x86_64/multiarch/Makefile [subdir=string] (sysdep_routines):
+	Add strcasecmp_l-ssse3.
+	* sysdeps/x86_64/multiarch/strcmp.S: Add support to compile for
+	strcasecmp.
+	* sysdeps/x86_64/strcmp.S: Allow more flexible compiling of strcasecmp.
+	* sysdeps/x86_64/multiarch/strcasecmp_l.S: New file.
+	* sysdeps/x86_64/multiarch/strcasecmp_l-ssse3.S: New file.
+
+2010-07-30  Ulrich Drepper  <drepper@redhat.com>
+
+	* sysdeps/x86_64/multiarch/strcmp.S: Pretty printing.
+
+	* string/Makefile (strop-tests): Add strcasecmp.
+	* sysdeps/x86_64/Makefile [subdir=string] (sysdep_routines): Add
+	strcasecmp_l-nonascii.
+	(gen-as-const-headers): Add locale-defines.sym.
+	* sysdeps/x86_64/strcmp.S: Add support for strcasecmp implementation.
+	* sysdeps/x86_64/strcasecmp.S: New file.
+	* sysdeps/x86_64/strcasecmp_l.S: New file.
+	* sysdeps/x86_64/strcasecmp_l-nonascii.c: New file.
+	* sysdeps/x86_64/locale-defines.sym: New file.
+	* string/test-strcasecmp.c: New file.
+
+	* string/test-strcasestr.c: Test both ends of the range of characters.
+	* sysdeps/x86_64/multiarch/strstr.c: Fix UCHIGH definition.
+
+2010-07-26  Ulrich Drepper  <drepper@redhat.com>
+
+	* string/test-strnlen.c: New file.
+	* string/Makefile (strop-tests): Add strnlen.
+	* string/tester.c (test_strnlen): Add a few more test cases.
+	* string/tst-strlen.c: Better error reporting.
+
+	* sysdeps/x86_64/strnlen.S: New file.
+
+2010-07-24  Ulrich Drepper  <drepper@redhat.com>
+
+	* sysdeps/x86_64/multiarch/strstr.c (__m128i_strloadu_tolower): Use
+	lower-latency instructions.
+
+2010-07-23  Ulrich Drepper  <drepper@redhat.com>
+
+	* string/test-strcasestr.c: New file.
+	* string/test-strstr.c: New file.
+	* string/Makefile (strop-tests): Add strstr and strcasestr.
+	* string/str-two-way.h: Don't undefine MAX.
+	* string/strcasestr.c: Don't define alias if NO_ALIAS is defined.
+
+2010-07-21  Andreas Schwab  <schwab@redhat.com>
+
+	* sysdeps/i386/i686/multiarch/Makefile (sysdep_routines): Add
+	strcasestr-nonascii.
+	(CFLAGS-strcasestr-nonascii.c): Define.
+	* sysdeps/i386/i686/multiarch/strcasestr-nonascii.c: New file.
+	* sysdeps/x86_64/multiarch/strcasestr-nonascii.c (STRSTR_SSE42):
+	Remove unused attribute.
+
+2010-07-16  Ulrich Drepper  <drepper@redhat.com>
+
+	* sysdeps/x86_64/multiarch/strstr.c: Rewrite to avoid indirect function
+	call in strcasestr.
+	* sysdeps/x86_64/multiarch/strcasestr.c: Declare
+	__strcasestr_sse42_nonascii.
+	* sysdeps/x86_64/multiarch/Makefile: Add rules to build
+	strcasestr-nonascii.c.
+	* sysdeps/x86_64/multiarch/strcasestr-nonascii.c: New file.
+
+Index: glibc-2.12-2-gc4ccff1/string/Makefile
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/string/Makefile
++++ glibc-2.12-2-gc4ccff1/string/Makefile
+@@ -48,7 +48,8 @@ o-objects.ob	:= memcpy.o memset.o memchr
+ 
+ strop-tests	:= memchr memcmp memcpy memmove mempcpy memset memccpy	\
+ 		   stpcpy stpncpy strcat strchr strcmp strcpy strcspn	\
+-		   strlen strncmp strncpy strpbrk strrchr strspn memmem
++		   strlen strncmp strncpy strpbrk strrchr strspn memmem	\
++		   strstr strcasestr strnlen strcasecmp strncasecmp
+ tests		:= tester inl-tester noinl-tester testcopy test-ffs	\
+ 		   tst-strlen stratcliff tst-svc tst-inlcall		\
+ 		   bug-strncat1 bug-strspn1 bug-strpbrk1 tst-bswap	\
+Index: glibc-2.12-2-gc4ccff1/string/str-two-way.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/string/str-two-way.h
++++ glibc-2.12-2-gc4ccff1/string/str-two-way.h
+@@ -426,5 +426,4 @@ two_way_long_needle (const unsigned char
+ #undef AVAILABLE
+ #undef CANON_ELEMENT
+ #undef CMP_FUNC
+-#undef MAX
+ #undef RETURN_TYPE
+Index: glibc-2.12-2-gc4ccff1/string/stratcliff.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/string/stratcliff.c
++++ glibc-2.12-2-gc4ccff1/string/stratcliff.c
+@@ -47,6 +47,8 @@
+ # define MEMCPY memcpy
+ # define MEMPCPY mempcpy
+ # define MEMCHR memchr
++# define STRCMP strcmp
++# define STRNCMP strncmp
+ #endif
+ 
+ 
+@@ -277,7 +279,74 @@ do_test (void)
+ 
+ 	      adr[inner] = L('T');
+ 	    }
+-        }
++	}
++
++      /* strcmp/wcscmp tests */
++      for (outer = 1; outer < 32; ++outer)
++	for (middle = 0; middle < 16; ++middle)
++	  {
++	    MEMSET (adr + middle, L('T'), 256);
++	    adr[256] = L('\0');
++	    MEMSET (dest + nchars - outer, L('T'), outer - 1);
++	    dest[nchars - 1] = L('\0');
++
++	    if (STRCMP (adr + middle, dest + nchars - outer) <= 0)
++	      {
++		printf ("%s 1 flunked for outer = %d, middle = %d\n",
++			STRINGIFY (STRCMP), outer, middle);
++		result = 1;
++	      }
++
++	    if (STRCMP (dest + nchars - outer, adr + middle) >= 0)
++	      {
++		printf ("%s 2 flunked for outer = %d, middle = %d\n",
++			STRINGIFY (STRCMP), outer, middle);
++		result = 1;
++	      }
++	  }
++
++      /* strncmp/wcsncmp tests */
++      for (outer = 1; outer < 32; ++outer)
++	for (middle = 0; middle < 16; ++middle)
++	  {
++	    MEMSET (adr + middle, L('T'), 256);
++	    adr[256] = L('\0');
++	    MEMSET (dest + nchars - outer, L('T'), outer - 1);
++	    dest[nchars - 1] = L('U');
++
++	    for (inner = 0; inner < outer; ++inner)
++	      {
++		if (STRNCMP (adr + middle, dest + nchars - outer, inner) != 0)
++		  {
++		    printf ("%s 1 flunked for outer = %d, middle = %d, "
++			    "inner = %d\n",
++			    STRINGIFY (STRNCMP), outer, middle, inner);
++		    result = 1;
++		  }
++
++		if (STRNCMP (dest + nchars - outer, adr + middle, inner) != 0)
++		  {
++		    printf ("%s 2 flunked for outer = %d, middle = %d, "
++			    "inner = %d\n",
++			    STRINGIFY (STRNCMP), outer, middle, inner);
++		    result = 1;
++		  }
++	      }
++
++	    if (STRNCMP (adr + middle, dest + nchars - outer, outer) >= 0)
++	      {
++		printf ("%s 1 flunked for outer = %d, middle = %d, full\n",
++			STRINGIFY (STRNCMP), outer, middle);
++		result = 1;
++	      }
++
++	    if (STRNCMP (dest + nchars - outer, adr + middle, outer) <= 0)
++	      {
++		printf ("%s 2 flunked for outer = %d, middle = %d, full\n",
++			STRINGIFY (STRNCMP), outer, middle);
++		result = 1;
++	      }
++	  }
+ 
+       /* strncpy/wcsncpy tests */
+       adr[nchars - 1] = L('T');
+Index: glibc-2.12-2-gc4ccff1/string/strcasestr.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/string/strcasestr.c
++++ glibc-2.12-2-gc4ccff1/string/strcasestr.c
+@@ -103,4 +103,6 @@ STRCASESTR (const char *haystack_start, 
+ 
+ #undef LONG_NEEDLE_THRESHOLD
+ 
++#ifndef NO_ALIAS
+ weak_alias (__strcasestr, strcasestr)
++#endif
+Index: glibc-2.12-2-gc4ccff1/string/test-strcasecmp.c
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/string/test-strcasecmp.c
+@@ -0,0 +1,276 @@
++/* Test and measure strcasecmp functions.
++   Copyright (C) 1999, 2002, 2003, 2005, 2010 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++   Written by Jakub Jelinek <jakub@redhat.com>, 1999.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library 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
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++#include <ctype.h>
++#define TEST_MAIN
++#include "test-string.h"
++
++typedef int (*proto_t) (const char *, const char *);
++static int simple_strcasecmp (const char *, const char *);
++static int stupid_strcasecmp (const char *, const char *);
++
++IMPL (stupid_strcasecmp, 0)
++IMPL (simple_strcasecmp, 0)
++IMPL (strcasecmp, 1)
++
++static int
++simple_strcasecmp (const char *s1, const char *s2)
++{
++  int ret;
++
++  while ((ret = ((unsigned char) tolower (*s1)
++		 - (unsigned char) tolower (*s2))) == 0
++	 && *s1++)
++    ++s2;
++  return ret;
++}
++
++static int
++stupid_strcasecmp (const char *s1, const char *s2)
++{
++  size_t ns1 = strlen (s1) + 1, ns2 = strlen (s2) + 1;
++  size_t n = ns1 < ns2 ? ns1 : ns2;
++  int ret = 0;
++
++  while (n--)
++    {
++      if ((ret = ((unsigned char) tolower (*s1)
++		  - (unsigned char) tolower (*s2))) != 0)
++	break;
++      ++s1;
++      ++s2;
++    }
++  return ret;
++}
++
++static void
++do_one_test (impl_t *impl, const char *s1, const char *s2, int exp_result)
++{
++  int result = CALL (impl, s1, s2);
++  if ((exp_result == 0 && result != 0)
++      || (exp_result < 0 && result >= 0)
++      || (exp_result > 0 && result <= 0))
++    {
++      error (0, 0, "Wrong result in function %s %d %d", impl->name,
++	     result, exp_result);
++      ret = 1;
++      return;
++    }
++
++  if (HP_TIMING_AVAIL)
++    {
++      hp_timing_t start __attribute ((unused));
++      hp_timing_t stop __attribute ((unused));
++      hp_timing_t best_time = ~ (hp_timing_t) 0;
++      size_t i;
++
++      for (i = 0; i < 32; ++i)
++	{
++	  HP_TIMING_NOW (start);
++	  CALL (impl, s1, s2);
++	  HP_TIMING_NOW (stop);
++	  HP_TIMING_BEST (best_time, start, stop);
++	}
++
++      printf ("\t%zd", (size_t) best_time);
++    }
++}
++
++static void
++do_test (size_t align1, size_t align2, size_t len, int max_char,
++	 int exp_result)
++{
++  size_t i;
++  char *s1, *s2;
++
++  if (len == 0)
++    return;
++
++  align1 &= 7;
++  if (align1 + len + 1 >= page_size)
++    return;
++
++  align2 &= 7;
++  if (align2 + len + 1 >= page_size)
++    return;
++
++  s1 = (char *) (buf1 + align1);
++  s2 = (char *) (buf2 + align2);
++
++  for (i = 0; i < len; i++)
++    {
++      s1[i] = toupper (1 + 23 * i % max_char);
++      s2[i] = tolower (s1[i]);
++    }
++
++  s1[len] = s2[len] = 0;
++  s1[len + 1] = 23;
++  s2[len + 1] = 24 + exp_result;
++  if ((s2[len - 1] == 'z' && exp_result == -1)
++      || (s2[len - 1] == 'a' && exp_result == 1))
++    s1[len - 1] += exp_result;
++  else
++    s2[len - 1] -= exp_result;
++
++  if (HP_TIMING_AVAIL)
++    printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
++
++  FOR_EACH_IMPL (impl, 0)
++    do_one_test (impl, s1, s2, exp_result);
++
++  if (HP_TIMING_AVAIL)
++    putchar ('\n');
++}
++
++static void
++do_random_tests (void)
++{
++  size_t i, j, n, align1, align2, pos, len1, len2;
++  int result;
++  long r;
++  unsigned char *p1 = buf1 + page_size - 512;
++  unsigned char *p2 = buf2 + page_size - 512;
++
++  for (n = 0; n < ITERATIONS; n++)
++    {
++      align1 = random () & 31;
++      if (random () & 1)
++	align2 = random () & 31;
++      else
++	align2 = align1 + (random () & 24);
++      pos = random () & 511;
++      j = align1 > align2 ? align1 : align2;
++      if (pos + j >= 511)
++	pos = 510 - j - (random () & 7);
++      len1 = random () & 511;
++      if (pos >= len1 && (random () & 1))
++	len1 = pos + (random () & 7);
++      if (len1 + j >= 512)
++	len1 = 511 - j - (random () & 7);
++      if (pos >= len1)
++	len2 = len1;
++      else
++	len2 = len1 + (len1 != 511 - j ? random () % (511 - j - len1) : 0);
++      j = (pos > len2 ? pos : len2) + align1 + 64;
++      if (j > 512)
++	j = 512;
++      for (i = 0; i < j; ++i)
++	{
++	  p1[i] = tolower (random () & 255);
++	  if (i < len1 + align1 && !p1[i])
++	    {
++	      p1[i] = tolower (random () & 255);
++	      if (!p1[i])
++		p1[i] = tolower (1 + (random () & 127));
++	    }
++	}
++      for (i = 0; i < j; ++i)
++	{
++	  p2[i] = toupper (random () & 255);
++	  if (i < len2 + align2 && !p2[i])
++	    {
++	      p2[i] = toupper (random () & 255);
++	      if (!p2[i])
++		toupper (p2[i] = 1 + (random () & 127));
++	    }
++	}
++
++      result = 0;
++      memcpy (p2 + align2, p1 + align1, pos);
++      if (pos < len1)
++	{
++	  if (tolower (p2[align2 + pos]) == p1[align1 + pos])
++	    {
++	      p2[align2 + pos] = toupper (random () & 255);
++	      if (tolower (p2[align2 + pos]) == p1[align1 + pos])
++		p2[align2 + pos] = toupper (p1[align1 + pos]
++					    + 3 + (random () & 127));
++	    }
++
++	  if (p1[align1 + pos] < tolower (p2[align2 + pos]))
++	    result = -1;
++	  else
++	    result = 1;
++	}
++      p1[len1 + align1] = 0;
++      p2[len2 + align2] = 0;
++
++      FOR_EACH_IMPL (impl, 1)
++	{
++	  r = CALL (impl, (char *) (p1 + align1), (char *) (p2 + align2));
++	  /* Test whether on 64-bit architectures where ABI requires
++	     callee to promote has the promotion been done.  */
++	  asm ("" : "=g" (r) : "0" (r));
++	  if ((r == 0 && result)
++	      || (r < 0 && result >= 0)
++	      || (r > 0 && result <= 0))
++	    {
++	      error (0, 0, "Iteration %zd - wrong result in function %s (%zd, %zd, %zd, %zd, %zd) %ld != %d, p1 %p p2 %p",
++		     n, impl->name, align1, align2, len1, len2, pos, r, result, p1, p2);
++	      ret = 1;
++	    }
++	}
++    }
++}
++
++int
++test_main (void)
++{
++  size_t i;
++
++  test_init ();
++
++  printf ("%23s", "");
++  FOR_EACH_IMPL (impl, 0)
++    printf ("\t%s", impl->name);
++  putchar ('\n');
++
++  for (i = 1; i < 16; ++i)
++    {
++      do_test (i, i, i, 127, 0);
++      do_test (i, i, i, 127, 1);
++      do_test (i, i, i, 127, -1);
++    }
++
++  for (i = 1; i < 10; ++i)
++    {
++      do_test (0, 0, 2 << i, 127, 0);
++      do_test (0, 0, 2 << i, 254, 0);
++      do_test (0, 0, 2 << i, 127, 1);
++      do_test (0, 0, 2 << i, 254, 1);
++      do_test (0, 0, 2 << i, 127, -1);
++      do_test (0, 0, 2 << i, 254, -1);
++    }
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (i, 2 * i, 8 << i, 127, 0);
++      do_test (2 * i, i, 8 << i, 254, 0);
++      do_test (i, 2 * i, 8 << i, 127, 1);
++      do_test (2 * i, i, 8 << i, 254, 1);
++      do_test (i, 2 * i, 8 << i, 127, -1);
++      do_test (2 * i, i, 8 << i, 254, -1);
++    }
++
++  do_random_tests ();
++  return ret;
++}
++
++#include "../test-skeleton.c"
+Index: glibc-2.12-2-gc4ccff1/string/test-strcasestr.c
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/string/test-strcasestr.c
+@@ -0,0 +1,197 @@
++/* Test and measure strcasestr functions.
++   Copyright (C) 2010 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++   Written by Ulrich Drepper <drepper@redhat.com>, 2010.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library 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
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++#define TEST_MAIN
++#include "test-string.h"
++
++
++#define STRCASESTR simple_strcasestr
++#define NO_ALIAS
++#define __strncasecmp strncasecmp
++#include "strcasestr.c"
++
++
++static char *
++stupid_strcasestr (const char *s1, const char *s2)
++{
++  ssize_t s1len = strlen (s1);
++  ssize_t s2len = strlen (s2);
++
++  if (s2len > s1len)
++    return NULL;
++
++  for (ssize_t i = 0; i <= s1len - s2len; ++i)
++    {
++      size_t j;
++      for (j = 0; j < s2len; ++j)
++	if (tolower (s1[i + j]) != tolower (s2[j]))
++	  break;
++      if (j == s2len)
++	return (char *) s1 + i;
++    }
++
++  return NULL;
++}
++
++
++typedef char *(*proto_t) (const char *, const char *);
++
++IMPL (stupid_strcasestr, 0)
++IMPL (simple_strcasestr, 0)
++IMPL (strcasestr, 1)
++
++
++static void
++do_one_test (impl_t *impl, const char *s1, const char *s2, char *exp_result)
++{
++  char *result = CALL (impl, s1, s2);
++  if (result != exp_result)
++    {
++      error (0, 0, "Wrong result in function %s %s %s", impl->name,
++	     result, exp_result);
++      ret = 1;
++      return;
++    }
++
++  if (HP_TIMING_AVAIL)
++    {
++      hp_timing_t start __attribute ((unused));
++      hp_timing_t stop __attribute ((unused));
++      hp_timing_t best_time = ~(hp_timing_t) 0;
++      size_t i;
++
++      for (i = 0; i < 32; ++i)
++	{
++	  HP_TIMING_NOW (start);
++	  CALL (impl, s1, s2);
++	  HP_TIMING_NOW (stop);
++	  HP_TIMING_BEST (best_time, start, stop);
++	}
++
++      printf ("\t%zd", (size_t) best_time);
++    }
++}
++
++
++static void
++do_test (size_t align1, size_t align2, size_t len1, size_t len2,
++	 int fail)
++{
++  char *s1 = (char *) (buf1 + align1);
++  char *s2 = (char *) (buf2 + align2);
++
++  static const char d[] = "1234567890abcxyz";
++#define dl (sizeof (d) - 1)
++  char *ss2 = s2;
++  for (size_t l = len2; l > 0; l = l > dl ? l - dl : 0)
++    {
++      size_t t = l > dl ? dl : l;
++      ss2 = mempcpy (ss2, d, t);
++    }
++  s2[len2] = '\0';
++
++  if (fail)
++    {
++      char *ss1 = s1;
++      for (size_t l = len1; l > 0; l = l > dl ? l - dl : 0)
++	{
++	  size_t t = l > dl ? dl : l;
++	  memcpy (ss1, d, t);
++	  ++ss1[len2 > 7 ? 7 : len2 - 1];
++	  ss1 += t;
++	}
++    }
++  else
++    {
++      memset (s1, '0', len1);
++      for (size_t i = 0; i < len2; ++i)
++	s1[len1 - len2 + i] = toupper (s2[i]);
++    }
++  s1[len1] = '\0';
++
++  if (HP_TIMING_AVAIL)
++    printf ("Length %4zd/%zd, alignment %2zd/%2zd, %s:",
++	    len1, len2, align1, align2, fail ? "fail" : "found");
++
++  FOR_EACH_IMPL (impl, 0)
++    do_one_test (impl, s1, s2, fail ? NULL : s1 + len1 - len2);
++
++  if (HP_TIMING_AVAIL)
++    putchar ('\n');
++}
++
++
++static int
++test_main (void)
++{
++  test_init ();
++
++  printf ("%23s", "");
++  FOR_EACH_IMPL (impl, 0)
++    printf ("\t%s", impl->name);
++  putchar ('\n');
++
++  for (size_t klen = 2; klen < 32; ++klen)
++    for (size_t hlen = 2 * klen; hlen < 16 * klen; hlen += klen)
++      {
++	do_test (0, 0, hlen, klen, 0);
++	do_test (0, 0, hlen, klen, 1);
++	do_test (0, 3, hlen, klen, 0);
++	do_test (0, 3, hlen, klen, 1);
++	do_test (0, 9, hlen, klen, 0);
++	do_test (0, 9, hlen, klen, 1);
++	do_test (0, 15, hlen, klen, 0);
++	do_test (0, 15, hlen, klen, 1);
++
++	do_test (3, 0, hlen, klen, 0);
++	do_test (3, 0, hlen, klen, 1);
++	do_test (3, 3, hlen, klen, 0);
++	do_test (3, 3, hlen, klen, 1);
++	do_test (3, 9, hlen, klen, 0);
++	do_test (3, 9, hlen, klen, 1);
++	do_test (3, 15, hlen, klen, 0);
++	do_test (3, 15, hlen, klen, 1);
++
++	do_test (9, 0, hlen, klen, 0);
++	do_test (9, 0, hlen, klen, 1);
++	do_test (9, 3, hlen, klen, 0);
++	do_test (9, 3, hlen, klen, 1);
++	do_test (9, 9, hlen, klen, 0);
++	do_test (9, 9, hlen, klen, 1);
++	do_test (9, 15, hlen, klen, 0);
++	do_test (9, 15, hlen, klen, 1);
++
++	do_test (15, 0, hlen, klen, 0);
++	do_test (15, 0, hlen, klen, 1);
++	do_test (15, 3, hlen, klen, 0);
++	do_test (15, 3, hlen, klen, 1);
++	do_test (15, 9, hlen, klen, 0);
++	do_test (15, 9, hlen, klen, 1);
++	do_test (15, 15, hlen, klen, 0);
++	do_test (15, 15, hlen, klen, 1);
++      }
++
++  do_test (0, 0, page_size - 1, 16, 0);
++  do_test (0, 0, page_size - 1, 16, 1);
++
++  return ret;
++}
++
++#include "../test-skeleton.c"
+Index: glibc-2.12-2-gc4ccff1/string/test-strncasecmp.c
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/string/test-strncasecmp.c
+@@ -0,0 +1,349 @@
++/* Test and measure strncasecmp functions.
++   Copyright (C) 1999, 2002, 2003, 2005, 2010 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++   Written by Jakub Jelinek <jakub@redhat.com>, 1999.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library 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
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++#include <ctype.h>
++#define TEST_MAIN
++#include "test-string.h"
++
++typedef int (*proto_t) (const char *, const char *, size_t);
++static int simple_strncasecmp (const char *, const char *, size_t);
++static int stupid_strncasecmp (const char *, const char *, size_t);
++
++IMPL (stupid_strncasecmp, 0)
++IMPL (simple_strncasecmp, 0)
++IMPL (strncasecmp, 1)
++
++static int
++simple_strncasecmp (const char *s1, const char *s2, size_t n)
++{
++  int ret;
++
++  if (n == 0)
++    return 0;
++
++  while ((ret = ((unsigned char) tolower (*s1)
++		 - (unsigned char) tolower (*s2))) == 0
++	 && *s1++)
++    {
++      if (--n == 0)
++	return 0;
++      ++s2;
++    }
++  return ret;
++}
++
++static int
++stupid_strncasecmp (const char *s1, const char *s2, size_t max)
++{
++  size_t ns1 = strlen (s1) + 1;
++  size_t ns2 = strlen (s2) + 1;
++  size_t n = ns1 < ns2 ? ns1 : ns2;
++  if (n > max)
++    n = max;
++  int ret = 0;
++
++  while (n--)
++    {
++      if ((ret = ((unsigned char) tolower (*s1)
++		  - (unsigned char) tolower (*s2))) != 0)
++	break;
++      ++s1;
++      ++s2;
++    }
++  return ret;
++}
++
++static int
++check_result (impl_t *impl, const char *s1, const char *s2, size_t n,
++	      int exp_result)
++{
++  int result = CALL (impl, s1, s2, n);
++  if ((exp_result == 0 && result != 0)
++      || (exp_result < 0 && result >= 0)
++      || (exp_result > 0 && result <= 0))
++    {
++      error (0, 0, "Wrong result in function %s %d %d", impl->name,
++	     result, exp_result);
++      ret = 1;
++      return -1;
++    }
++
++  return 0;
++}
++
++static void
++do_one_test (impl_t *impl, const char *s1, const char *s2, size_t n,
++	     int exp_result)
++{
++  if (check_result (impl, s1, s2, n, exp_result) < 0)
++    return;
++
++  if (HP_TIMING_AVAIL)
++    {
++      hp_timing_t start __attribute ((unused));
++      hp_timing_t stop __attribute ((unused));
++      hp_timing_t best_time = ~ (hp_timing_t) 0;
++      size_t i;
++
++      for (i = 0; i < 32; ++i)
++	{
++	  HP_TIMING_NOW (start);
++	  CALL (impl, s1, s2, n);
++	  HP_TIMING_NOW (stop);
++	  HP_TIMING_BEST (best_time, start, stop);
++	}
++
++      printf ("\t%zd", (size_t) best_time);
++    }
++}
++
++static void
++do_test (size_t align1, size_t align2, size_t n, size_t len, int max_char,
++	 int exp_result)
++{
++  size_t i;
++  char *s1, *s2;
++
++  if (len == 0)
++    return;
++
++  align1 &= 7;
++  if (align1 + len + 1 >= page_size)
++    return;
++
++  align2 &= 7;
++  if (align2 + len + 1 >= page_size)
++    return;
++
++  s1 = (char *) (buf1 + align1);
++  s2 = (char *) (buf2 + align2);
++
++  for (i = 0; i < len; i++)
++    {
++      s1[i] = toupper (1 + 23 * i % max_char);
++      s2[i] = tolower (s1[i]);
++    }
++
++  s1[len] = s2[len] = 0;
++  s1[len + 1] = 23;
++  s2[len + 1] = 24 + exp_result;
++  if ((s2[len - 1] == 'z' && exp_result == -1)
++      || (s2[len - 1] == 'a' && exp_result == 1))
++    s1[len - 1] += exp_result;
++  else
++    s2[len - 1] -= exp_result;
++
++  if (HP_TIMING_AVAIL)
++    printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
++
++  FOR_EACH_IMPL (impl, 0)
++    do_one_test (impl, s1, s2, n, exp_result);
++
++  if (HP_TIMING_AVAIL)
++    putchar ('\n');
++}
++
++static void
++do_random_tests (void)
++{
++  size_t i, j, n, align1, align2, pos, len1, len2;
++  int result;
++  long r;
++  unsigned char *p1 = buf1 + page_size - 512;
++  unsigned char *p2 = buf2 + page_size - 512;
++
++  for (n = 0; n < ITERATIONS; n++)
++    {
++      align1 = random () & 31;
++      if (random () & 1)
++	align2 = random () & 31;
++      else
++	align2 = align1 + (random () & 24);
++      pos = random () & 511;
++      j = align1 > align2 ? align1 : align2;
++      if (pos + j >= 511)
++	pos = 510 - j - (random () & 7);
++      len1 = random () & 511;
++      if (pos >= len1 && (random () & 1))
++	len1 = pos + (random () & 7);
++      if (len1 + j >= 512)
++	len1 = 511 - j - (random () & 7);
++      if (pos >= len1)
++	len2 = len1;
++      else
++	len2 = len1 + (len1 != 511 - j ? random () % (511 - j - len1) : 0);
++      j = (pos > len2 ? pos : len2) + align1 + 64;
++      if (j > 512)
++	j = 512;
++      for (i = 0; i < j; ++i)
++	{
++	  p1[i] = tolower (random () & 255);
++	  if (i < len1 + align1 && !p1[i])
++	    {
++	      p1[i] = tolower (random () & 255);
++	      if (!p1[i])
++		p1[i] = tolower (1 + (random () & 127));
++	    }
++	}
++      for (i = 0; i < j; ++i)
++	{
++	  p2[i] = toupper (random () & 255);
++	  if (i < len2 + align2 && !p2[i])
++	    {
++	      p2[i] = toupper (random () & 255);
++	      if (!p2[i])
++		toupper (p2[i] = 1 + (random () & 127));
++	    }
++	}
++
++      result = 0;
++      memcpy (p2 + align2, p1 + align1, pos);
++      if (pos < len1)
++	{
++	  if (tolower (p2[align2 + pos]) == p1[align1 + pos])
++	    {
++	      p2[align2 + pos] = toupper (random () & 255);
++	      if (tolower (p2[align2 + pos]) == p1[align1 + pos])
++		p2[align2 + pos] = toupper (p1[align1 + pos]
++					    + 3 + (random () & 127));
++	    }
++
++	  if (p1[align1 + pos] < tolower (p2[align2 + pos]))
++	    result = -1;
++	  else
++	    result = 1;
++	}
++      p1[len1 + align1] = 0;
++      p2[len2 + align2] = 0;
++
++      FOR_EACH_IMPL (impl, 1)
++	{
++	  r = CALL (impl, (char *) (p1 + align1), (char *) (p2 + align2),
++		    pos + 1 + (random () & 255));
++	  /* Test whether on 64-bit architectures where ABI requires
++	     callee to promote has the promotion been done.  */
++	  asm ("" : "=g" (r) : "0" (r));
++	  if ((r == 0 && result)
++	      || (r < 0 && result >= 0)
++	      || (r > 0 && result <= 0))
++	    {
++	      error (0, 0, "Iteration %zd - wrong result in function %s (%zd, %zd, %zd, %zd, %zd) %ld != %d, p1 %p p2 %p",
++		     n, impl->name, align1, align2, len1, len2, pos, r, result, p1, p2);
++	      ret = 1;
++	    }
++	}
++    }
++}
++
++
++static void
++check1 (void)
++{
++  static char cp [4096+16] __attribute__ ((aligned(4096)));
++  static char gotrel[4096] __attribute__ ((aligned(4096)));
++  char *s1 = cp + 0xffa;
++  char *s2 = gotrel + 0xcbe;
++  int exp_result;
++  size_t n = 6;
++
++  strcpy (s1, "gottpoff");
++  strcpy (s2, "GOTPLT");
++
++  exp_result = simple_strncasecmp (s1, s2, n);
++  FOR_EACH_IMPL (impl, 0)
++    check_result (impl, s1, s2, n, exp_result);
++}
++
++int
++test_main (void)
++{
++  size_t i;
++
++  test_init ();
++
++  check1 ();
++
++  printf ("%23s", "");
++  FOR_EACH_IMPL (impl, 0)
++    printf ("\t%s", impl->name);
++  putchar ('\n');
++
++  for (i = 1; i < 16; ++i)
++    {
++      do_test (i, i, i - 1, i, 127, 0);
++
++      do_test (i, i, i, i, 127, 0);
++      do_test (i, i, i, i, 127, 1);
++      do_test (i, i, i, i, 127, -1);
++
++      do_test (i, i, i + 1, i, 127, 0);
++      do_test (i, i, i + 1, i, 127, 1);
++      do_test (i, i, i + 1, i, 127, -1);
++    }
++
++  for (i = 1; i < 10; ++i)
++    {
++      do_test (0, 0, (2 << i) - 1, 2 << i, 127, 0);
++      do_test (0, 0, 2 << i, 2 << i, 254, 0);
++      do_test (0, 0, (2 << i) + 1, 2 << i, 127, 0);
++
++      do_test (0, 0, (2 << i) + 1, 2 << i, 254, 0);
++
++      do_test (0, 0, 2 << i, 2 << i, 127, 1);
++      do_test (0, 0, (2 << i) + 10, 2 << i, 127, 1);
++
++      do_test (0, 0, 2 << i, 2 << i, 254, 1);
++      do_test (0, 0, (2 << i) + 10, 2 << i, 254, 1);
++
++      do_test (0, 0, 2 << i, 2 << i, 127, -1);
++      do_test (0, 0, (2 << i) + 10, 2 << i, 127, -1);
++
++      do_test (0, 0, 2 << i, 2 << i, 254, -1);
++      do_test (0, 0, (2 << i) + 10, 2 << i, 254, -1);
++    }
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (i, 2 * i, (8 << i) - 1, 8 << i, 127, 0);
++      do_test (i, 2 * i, 8 << i, 8 << i, 127, 0);
++      do_test (i, 2 * i, (8 << i) + 100, 8 << i, 127, 0);
++
++      do_test (2 * i, i, (8 << i) - 1, 8 << i, 254, 0);
++      do_test (2 * i, i, 8 << i, 8 << i, 254, 0);
++      do_test (2 * i, i, (8 << i) + 100, 8 << i, 254, 0);
++
++      do_test (i, 2 * i, 8 << i, 8 << i, 127, 1);
++      do_test (i, 2 * i, (8 << i) + 100, 8 << i, 127, 1);
++
++      do_test (2 * i, i, 8 << i, 8 << i, 254, 1);
++      do_test (2 * i, i, (8 << i) + 100, 8 << i, 254, 1);
++
++      do_test (i, 2 * i, 8 << i, 8 << i, 127, -1);
++      do_test (i, 2 * i, (8 << i) + 100, 8 << i, 127, -1);
++
++      do_test (2 * i, i, 8 << i, 8 << i, 254, -1);
++      do_test (2 * i, i, (8 << i) + 100, 8 << i, 254, -1);
++    }
++
++  do_random_tests ();
++  return ret;
++}
++
++#include "../test-skeleton.c"
+Index: glibc-2.12-2-gc4ccff1/string/test-strnlen.c
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/string/test-strnlen.c
+@@ -0,0 +1,197 @@
++/* Test and measure strlen functions.
++   Copyright (C) 1999, 2002, 2003, 2005, 2010 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++   Written by Jakub Jelinek <jakub@redhat.com>, 1999.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library 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
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++#define TEST_MAIN
++#include "test-string.h"
++
++typedef size_t (*proto_t) (const char *, size_t);
++size_t simple_strnlen (const char *, size_t);
++
++IMPL (simple_strnlen, 0)
++IMPL (strnlen, 1)
++
++size_t
++simple_strnlen (const char *s, size_t maxlen)
++{
++  size_t i;
++
++  for (i = 0; i < maxlen && s[i]; ++i);
++  return i;
++}
++
++static void
++do_one_test (impl_t *impl, const char *s, size_t maxlen, size_t exp_len)
++{
++  size_t len = CALL (impl, s, maxlen);
++  if (len != exp_len)
++    {
++      error (0, 0, "Wrong result in function %s %zd %zd", impl->name,
++	     len, exp_len);
++      ret = 1;
++      return;
++    }
++
++  if (HP_TIMING_AVAIL)
++    {
++      hp_timing_t start __attribute ((unused));
++      hp_timing_t stop __attribute ((unused));
++      hp_timing_t best_time = ~ (hp_timing_t) 0;
++      size_t i;
++
++      for (i = 0; i < 32; ++i)
++	{
++	  HP_TIMING_NOW (start);
++	  CALL (impl, s, maxlen);
++	  HP_TIMING_NOW (stop);
++	  HP_TIMING_BEST (best_time, start, stop);
++	}
++
++      printf ("\t%zd", (size_t) best_time);
++    }
++}
++
++static void
++do_test (size_t align, size_t len, size_t maxlen, int max_char)
++{
++  size_t i;
++
++  align &= 7;
++  if (align + len >= page_size)
++    return;
++
++  for (i = 0; i < len; ++i)
++    buf1[align + i] = 1 + 7 * i % max_char;
++  buf1[align + len] = 0;
++
++  if (HP_TIMING_AVAIL)
++    printf ("Length %4zd, alignment %2zd:", len, align);
++
++  FOR_EACH_IMPL (impl, 0)
++    do_one_test (impl, (char *) (buf1 + align), maxlen, MIN (len, maxlen));
++
++  if (HP_TIMING_AVAIL)
++    putchar ('\n');
++}
++
++static void
++do_random_tests (void)
++{
++  size_t i, j, n, align, len;
++  unsigned char *p = buf1 + page_size - 512;
++
++  for (n = 0; n < ITERATIONS; n++)
++    {
++      align = random () & 15;
++      len = random () & 511;
++      if (len + align > 510)
++	len = 511 - align - (random () & 7);
++      j = len + align + 64;
++      if (j > 512)
++	j = 512;
++
++      for (i = 0; i < j; i++)
++	{
++	  if (i == len + align)
++	    p[i] = 0;
++	  else
++	    {
++	      p[i] = random () & 255;
++	      if (i >= align && i < len + align && !p[i])
++		p[i] = (random () & 127) + 1;
++	    }
++	}
++
++      FOR_EACH_IMPL (impl, 1)
++	{
++	  if (len > 0
++	      && CALL (impl, (char *) (p + align), len - 1) != len - 1)
++	    {
++	      error (0, 0, "Iteration %zd (limited) - wrong result in function %s (%zd) %zd != %zd, p %p",
++		     n, impl->name, align,
++		     CALL (impl, (char *) (p + align), len - 1), len - 1, p);
++	      ret = 1;
++	    }
++	  if (CALL (impl, (char *) (p + align), len) != len)
++	    {
++	      error (0, 0, "Iteration %zd (exact) - wrong result in function %s (%zd) %zd != %zd, p %p",
++		     n, impl->name, align,
++		     CALL (impl, (char *) (p + align), len), len, p);
++	      ret = 1;
++	    }
++	  if (CALL (impl, (char *) (p + align), len + 1) != len)
++	    {
++	      error (0, 0, "Iteration %zd (long) - wrong result in function %s (%zd) %zd != %zd, p %p",
++		     n, impl->name, align,
++		     CALL (impl, (char *) (p + align), len + 1), len, p);
++	      ret = 1;
++	    }
++	}
++    }
++}
++
++int
++test_main (void)
++{
++  size_t i;
++
++  test_init ();
++
++  printf ("%20s", "");
++  FOR_EACH_IMPL (impl, 0)
++    printf ("\t%s", impl->name);
++  putchar ('\n');
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (0, i, i - 1, 127);
++      do_test (0, i, i, 127);
++      do_test (0, i, i + 1, 127);
++    }
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (i, i, i - 1, 127);
++      do_test (i, i, i, 127);
++      do_test (i, i, i + 1, 127);
++    }
++
++  for (i = 2; i <= 10; ++i)
++    {
++      do_test (0, 1 << i, 5000, 127);
++      do_test (1, 1 << i, 5000, 127);
++    }
++
++  for (i = 1; i < 8; ++i)
++    do_test (0, i, 5000, 255);
++
++  for (i = 1; i < 8; ++i)
++    do_test (i, i, 5000, 255);
++
++  for (i = 2; i <= 10; ++i)
++    {
++      do_test (0, 1 << i, 5000, 255);
++      do_test (1, 1 << i, 5000, 255);
++    }
++
++  do_random_tests ();
++  return ret;
++}
++
++#include "../test-skeleton.c"
+Index: glibc-2.12-2-gc4ccff1/string/test-strstr.c
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/string/test-strstr.c
+@@ -0,0 +1,194 @@
++/* Test and measure strstr functions.
++   Copyright (C) 2010 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++   Written by Ulrich Drepper <drepper@redhat.com>, 2010.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library 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
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++#define TEST_MAIN
++#include "test-string.h"
++
++
++#define STRSTR simple_strstr
++#include "strstr.c"
++
++
++static char *
++stupid_strstr (const char *s1, const char *s2)
++{
++  ssize_t s1len = strlen (s1);
++  ssize_t s2len = strlen (s2);
++
++  if (s2len > s1len)
++    return NULL;
++
++  for (ssize_t i = 0; i <= s1len - s2len; ++i)
++    {
++      size_t j;
++      for (j = 0; j < s2len; ++j)
++	if (s1[i + j] != s2[j])
++	  break;
++      if (j == s2len)
++	return (char *) s1 + i;
++    }
++
++  return NULL;
++}
++
++
++typedef char *(*proto_t) (const char *, const char *);
++
++IMPL (stupid_strstr, 0)
++IMPL (simple_strstr, 0)
++IMPL (strstr, 1)
++
++
++static void
++do_one_test (impl_t *impl, const char *s1, const char *s2, char *exp_result)
++{
++  char *result = CALL (impl, s1, s2);
++  if (result != exp_result)
++    {
++      error (0, 0, "Wrong result in function %s %s %s", impl->name,
++	     result, exp_result);
++      ret = 1;
++      return;
++    }
++
++  if (HP_TIMING_AVAIL)
++    {
++      hp_timing_t start __attribute ((unused));
++      hp_timing_t stop __attribute ((unused));
++      hp_timing_t best_time = ~(hp_timing_t) 0;
++      size_t i;
++
++      for (i = 0; i < 32; ++i)
++	{
++	  HP_TIMING_NOW (start);
++	  CALL (impl, s1, s2);
++	  HP_TIMING_NOW (stop);
++	  HP_TIMING_BEST (best_time, start, stop);
++	}
++
++      printf ("\t%zd", (size_t) best_time);
++    }
++}
++
++
++static void
++do_test (size_t align1, size_t align2, size_t len1, size_t len2,
++	 int fail)
++{
++  char *s1 = (char *) (buf1 + align1);
++  char *s2 = (char *) (buf2 + align2);
++
++  static const char d[] = "1234567890abcdef";
++#define dl (sizeof (d) - 1)
++  char *ss2 = s2;
++  for (size_t l = len2; l > 0; l = l > dl ? l - dl : 0)
++    {
++      size_t t = l > dl ? dl : l;
++      ss2 = mempcpy (ss2, d, t);
++    }
++  s2[len2] = '\0';
++
++  if (fail)
++    {
++      char *ss1 = s1;
++      for (size_t l = len1; l > 0; l = l > dl ? l - dl : 0)
++	{
++	  size_t t = l > dl ? dl : l;
++	  memcpy (ss1, d, t);
++	  ++ss1[len2 > 7 ? 7 : len2 - 1];
++	  ss1 += t;
++	}
++    }
++  else
++    {
++      memset (s1, '0', len1);
++      memcpy (s1 + len1 - len2, s2, len2);
++    }
++  s1[len1] = '\0';
++
++  if (HP_TIMING_AVAIL)
++    printf ("Length %4zd/%zd, alignment %2zd/%2zd, %s:",
++	    len1, len2, align1, align2, fail ? "fail" : "found");
++
++  FOR_EACH_IMPL (impl, 0)
++    do_one_test (impl, s1, s2, fail ? NULL : s1 + len1 - len2);
++
++  if (HP_TIMING_AVAIL)
++    putchar ('\n');
++}
++
++
++static int
++test_main (void)
++{
++  test_init ();
++
++  printf ("%23s", "");
++  FOR_EACH_IMPL (impl, 0)
++    printf ("\t%s", impl->name);
++  putchar ('\n');
++
++  for (size_t klen = 2; klen < 32; ++klen)
++    for (size_t hlen = 2 * klen; hlen < 16 * klen; hlen += klen)
++      {
++	do_test (0, 0, hlen, klen, 0);
++	do_test (0, 0, hlen, klen, 1);
++	do_test (0, 3, hlen, klen, 0);
++	do_test (0, 3, hlen, klen, 1);
++	do_test (0, 9, hlen, klen, 0);
++	do_test (0, 9, hlen, klen, 1);
++	do_test (0, 15, hlen, klen, 0);
++	do_test (0, 15, hlen, klen, 1);
++
++	do_test (3, 0, hlen, klen, 0);
++	do_test (3, 0, hlen, klen, 1);
++	do_test (3, 3, hlen, klen, 0);
++	do_test (3, 3, hlen, klen, 1);
++	do_test (3, 9, hlen, klen, 0);
++	do_test (3, 9, hlen, klen, 1);
++	do_test (3, 15, hlen, klen, 0);
++	do_test (3, 15, hlen, klen, 1);
++
++	do_test (9, 0, hlen, klen, 0);
++	do_test (9, 0, hlen, klen, 1);
++	do_test (9, 3, hlen, klen, 0);
++	do_test (9, 3, hlen, klen, 1);
++	do_test (9, 9, hlen, klen, 0);
++	do_test (9, 9, hlen, klen, 1);
++	do_test (9, 15, hlen, klen, 0);
++	do_test (9, 15, hlen, klen, 1);
++
++	do_test (15, 0, hlen, klen, 0);
++	do_test (15, 0, hlen, klen, 1);
++	do_test (15, 3, hlen, klen, 0);
++	do_test (15, 3, hlen, klen, 1);
++	do_test (15, 9, hlen, klen, 0);
++	do_test (15, 9, hlen, klen, 1);
++	do_test (15, 15, hlen, klen, 0);
++	do_test (15, 15, hlen, klen, 1);
++      }
++
++  do_test (0, 0, page_size - 1, 16, 0);
++  do_test (0, 0, page_size - 1, 16, 1);
++
++  return ret;
++}
++
++#include "../test-skeleton.c"
+Index: glibc-2.12-2-gc4ccff1/string/tester.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/string/tester.c
++++ glibc-2.12-2-gc4ccff1/string/tester.c
+@@ -441,20 +441,21 @@ test_strnlen (void)
+   check (strnlen ("", 10) == 0, 1);		/* Empty. */
+   check (strnlen ("a", 10) == 1, 2);		/* Single char. */
+   check (strnlen ("abcd", 10) == 4, 3);		/* Multiple chars. */
+-  check (strnlen ("foo", (size_t)-1) == 3, 4);	/* limits of n. */
++  check (strnlen ("foo", (size_t) -1) == 3, 4);	/* limits of n. */
++  check (strnlen ("abcd", 0) == 0, 5);		/* Restricted. */
++  check (strnlen ("abcd", 1) == 1, 6);		/* Restricted. */
++  check (strnlen ("abcd", 2) == 2, 7);		/* Restricted. */
++  check (strnlen ("abcd", 3) == 3, 8);		/* Restricted. */
++  check (strnlen ("abcd", 4) == 4, 9);		/* Restricted. */
+ 
+-  {
+-    char buf[4096];
+-    int i;
+-    char *p;
+-    for (i=0; i < 0x100; i++)
+-      {
+-	p = (char *) ((unsigned long int)(buf + 0xff) & ~0xff) + i;
+-	strcpy (p, "OK");
+-	strcpy (p+3, "BAD/WRONG");
+-	check (strnlen (p, 100) == 2, 5+i);
+-      }
+-   }
++  char buf[4096];
++  for (int i = 0; i < 0x100; ++i)
++    {
++      char *p = (char *) ((unsigned long int)(buf + 0xff) & ~0xff) + i;
++      strcpy (p, "OK");
++      strcpy (p + 3, "BAD/WRONG");
++      check (strnlen (p, 100) == 2, 10 + i);
++    }
+ }
+ 
+ static void
+Index: glibc-2.12-2-gc4ccff1/string/tst-strlen.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/string/tst-strlen.c
++++ glibc-2.12-2-gc4ccff1/string/tst-strlen.c
+@@ -31,11 +31,21 @@ main(int argc, char *argv[])
+ 	      buf[words * 4 + 3] = (last & 8) != 0 ? 'e' : '\0';
+ 	      buf[words * 4 + 4] = '\0';
+ 
+-	      if (strlen (buf) != words * 4 + lens[last]
+-		  || strnlen (buf, -1) != words * 4 + lens[last])
++	      if (strlen (buf) != words * 4 + lens[last])
+ 		{
+-		  printf ("failed for base=%Zu, words=%Zu, and last=%Zu\n",
+-			  base, words, last);
++		  printf ("\
++strlen failed for base=%Zu, words=%Zu, and last=%Zu (is %zd, expected %zd)\n",
++			  base, words, last,
++			  strlen (buf), words * 4 + lens[last]);
++		  return 1;
++		}
++
++	      if (strnlen (buf, -1) != words * 4 + lens[last])
++		{
++		  printf ("\
++strnlen failed for base=%Zu, words=%Zu, and last=%Zu (is %zd, expected %zd)\n",
++			  base, words, last,
++			  strnlen (buf, -1), words * 4 + lens[last]);
+ 		  return 1;
+ 		}
+ 	    }
+Index: glibc-2.12-2-gc4ccff1/sysdeps/i386/i686/multiarch/Makefile
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/i386/i686/multiarch/Makefile
++++ glibc-2.12-2-gc4ccff1/sysdeps/i386/i686/multiarch/Makefile
+@@ -9,7 +9,7 @@ sysdep_routines += bzero-sse2 memset-sse
+ 		   memmove-ssse3-rep bcopy-ssse3 bcopy-ssse3-rep \
+ 		   memset-sse2-rep bzero-sse2-rep strcmp-ssse3 \
+ 		   strcmp-sse4 strncmp-c strncmp-ssse3 strncmp-sse4 \
+-		   memcmp-ssse3 memcmp-sse4
++		   memcmp-ssse3 memcmp-sse4 strcasestr-nonascii
+ ifeq (yes,$(config-cflags-sse4))
+ sysdep_routines += strcspn-c strpbrk-c strspn-c strstr-c strcasestr-c
+ CFLAGS-strcspn-c.c += -msse4
+@@ -17,6 +17,7 @@ CFLAGS-strpbrk-c.c += -msse4
+ CFLAGS-strspn-c.c += -msse4
+ CFLAGS-strstr.c += -msse4
+ CFLAGS-strcasestr.c += -msse4
++CFLAGS-strcasestr-nonascii.c += -msse4
+ endif
+ endif
+ 
+Index: glibc-2.12-2-gc4ccff1/sysdeps/i386/i686/multiarch/strcasestr-nonascii.c
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/sysdeps/i386/i686/multiarch/strcasestr-nonascii.c
+@@ -0,0 +1,2 @@
++#include <nmmintrin.h>
++#include <sysdeps/x86_64/multiarch/strcasestr-nonascii.c>
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/Makefile
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/Makefile
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/Makefile
+@@ -12,7 +12,8 @@ sysdep_routines += _mcount
+ endif
+ 
+ ifeq ($(subdir),string)
+-sysdep_routines += cacheinfo
++sysdep_routines += cacheinfo strcasecmp_l-nonascii strncase_l-nonascii
++gen-as-const-headers += locale-defines.sym
+ endif
+ 
+ ifeq ($(subdir),elf)
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/locale-defines.sym
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/locale-defines.sym
+@@ -0,0 +1,11 @@
++#include <locale/localeinfo.h>
++#include <langinfo.h>
++#include <stddef.h>
++
++--
++
++LOCALE_T___LOCALES		offsetof (struct __locale_struct, __locales)
++LC_CTYPE
++_NL_CTYPE_NONASCII_CASE
++LOCALE_DATA_VALUES		offsetof (struct __locale_data, values)
++SIZEOF_VALUES			sizeof (((struct __locale_data *) 0)->values[0])
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/Makefile
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/multiarch/Makefile
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/Makefile
+@@ -5,7 +5,9 @@ endif
+ 
+ ifeq ($(subdir),string)
+ sysdep_routines += stpncpy-c strncpy-c strcmp-ssse3 strncmp-ssse3 \
+-		   strend-sse4 memcmp-sse4
++		   strend-sse4 memcmp-sse4 \
++		   strcasestr-nonascii strcasecmp_l-ssse3 \
++		   strncase_l-ssse3
+ ifeq (yes,$(config-cflags-sse4))
+ sysdep_routines += strcspn-c strpbrk-c strspn-c strstr-c strcasestr-c
+ CFLAGS-strcspn-c.c += -msse4
+@@ -13,5 +15,6 @@ CFLAGS-strpbrk-c.c += -msse4
+ CFLAGS-strspn-c.c += -msse4
+ CFLAGS-strstr.c += -msse4
+ CFLAGS-strcasestr.c += -msse4
++CFLAGS-strcasestr-nonascii.c += -msse4
+ endif
+ endif
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strcasecmp_l-ssse3.S
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strcasecmp_l-ssse3.S
+@@ -0,0 +1,6 @@
++#define USE_SSSE3 1
++#define USE_AS_STRCASECMP_L
++#define NO_NOLOCALE_ALIAS
++#define STRCMP __strcasecmp_l_ssse3
++#define __strcasecmp __strcasecmp_ssse3
++#include "../strcmp.S"
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strcasecmp_l.S
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strcasecmp_l.S
+@@ -0,0 +1,6 @@
++#define STRCMP __strcasecmp_l
++#define USE_AS_STRCASECMP_L
++#include "strcmp.S"
++
++weak_alias (__strcasecmp_l, strcasecmp_l)
++libc_hidden_def (strcasecmp_l)
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strcasestr-nonascii.c
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strcasestr-nonascii.c
+@@ -0,0 +1,50 @@
++/* strstr with SSE4.2 intrinsics
++   Copyright (C) 2010 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library 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
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++# include <ctype.h>
++
++
++/* Similar to __m128i_strloadu.  Convert to lower case for none-POSIX/C
++   locale.  */
++static inline __m128i
++__m128i_strloadu_tolower (const unsigned char *p)
++{
++  union
++    {
++      char b[16];
++      __m128i x;
++    } u;
++
++  for (int i = 0; i < 16; ++i)
++    if (p[i] == 0)
++      {
++	u.b[i] = 0;
++	break;
++      }
++    else
++      u.b[i] = tolower (p[i]);
++
++  return u.x;
++}
++
++
++#define STRCASESTR_NONASCII
++#define USE_AS_STRCASESTR
++#define STRSTR_SSE42 __strcasestr_sse42_nonascii
++#include "strstr.c"
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strcasestr.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/multiarch/strcasestr.c
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strcasestr.c
+@@ -1,3 +1,7 @@
++extern char *__strcasestr_sse42_nonascii (const unsigned char *s1,
++					  const unsigned char *s2)
++  attribute_hidden;
++
+ #define USE_AS_STRCASESTR
+ #define STRSTR_SSE42 __strcasestr_sse42
+ #include "strstr.c"
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strcmp.S
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/multiarch/strcmp.S
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strcmp.S
+@@ -24,7 +24,7 @@
+ #ifdef USE_AS_STRNCMP
+ /* Since the counter, %r11, is unsigned, we branch to strcmp_exitz
+    if the new counter > the old one or is 0.  */
+-#define UPDATE_STRNCMP_COUNTER				\
++# define UPDATE_STRNCMP_COUNTER				\
+ 	/* calculate left number to compare */		\
+ 	lea	-16(%rcx, %r11), %r9;			\
+ 	cmp	%r9, %r11;				\
+@@ -33,23 +33,50 @@
+ 	je	LABEL(strcmp_exitz_sse4_2);		\
+ 	mov	%r9, %r11
+ 
+-#define STRCMP_SSE42	__strncmp_sse42
+-#define STRCMP_SSSE3	__strncmp_ssse3
+-#define STRCMP_SSE2	__strncmp_sse2
+-#define __GI_STRCMP	__GI_strncmp
++# define STRCMP_SSE42	__strncmp_sse42
++# define STRCMP_SSSE3	__strncmp_ssse3
++# define STRCMP_SSE2	__strncmp_sse2
++# define __GI_STRCMP	__GI_strncmp
++#elif defined USE_AS_STRCASECMP_L
++# include "locale-defines.h"
++
++# define UPDATE_STRNCMP_COUNTER
++
++# define STRCMP_SSE42	__strcasecmp_l_sse42
++# define STRCMP_SSSE3	__strcasecmp_l_ssse3
++# define STRCMP_SSE2	__strcasecmp_l_sse2
++# define __GI_STRCMP	__GI___strcasecmp_l
++#elif defined USE_AS_STRNCASECMP_L
++# include "locale-defines.h"
++
++/* Since the counter, %r11, is unsigned, we branch to strcmp_exitz
++   if the new counter > the old one or is 0.  */
++# define UPDATE_STRNCMP_COUNTER				\
++	/* calculate left number to compare */		\
++	lea	-16(%rcx, %r11), %r9;			\
++	cmp	%r9, %r11;				\
++	jb	LABEL(strcmp_exitz_sse4_2);		\
++	test	%r9, %r9;				\
++	je	LABEL(strcmp_exitz_sse4_2);		\
++	mov	%r9, %r11
++
++# define STRCMP_SSE42	__strncasecmp_l_sse42
++# define STRCMP_SSSE3	__strncasecmp_l_ssse3
++# define STRCMP_SSE2	__strncasecmp_l_sse2
++# define __GI_STRCMP	__GI___strncasecmp_l
+ #else
+-#define UPDATE_STRNCMP_COUNTER
+-#ifndef STRCMP
+-#define STRCMP		strcmp
+-#define STRCMP_SSE42	__strcmp_sse42
+-#define STRCMP_SSSE3	__strcmp_ssse3
+-#define STRCMP_SSE2	__strcmp_sse2
+-#define __GI_STRCMP	__GI_strcmp
+-#endif
++# define UPDATE_STRNCMP_COUNTER
++# ifndef STRCMP
++#  define STRCMP	strcmp
++#  define STRCMP_SSE42	__strcmp_sse42
++#  define STRCMP_SSSE3	__strcmp_ssse3
++#  define STRCMP_SSE2	__strcmp_sse2
++#  define __GI_STRCMP	__GI_strcmp
++# endif
+ #endif
+ 
+ #ifndef LABEL
+-#define LABEL(l) L(l)
++# define LABEL(l) L(l)
+ #endif
+ 
+ /* Define multiple versions only for the definition in libc.  Don't
+@@ -73,6 +100,43 @@ ENTRY(STRCMP)
+ 2:	ret
+ END(STRCMP)
+ 
++# ifdef USE_AS_STRCASECMP_L
++ENTRY(__strcasecmp)
++	.type	__strcasecmp, @gnu_indirect_function
++	cmpl	$0, __cpu_features+KIND_OFFSET(%rip)
++	jne	1f
++	call	__init_cpu_features
++1:
++	leaq	__strcasecmp_sse42(%rip), %rax
++	testl	$bit_SSE4_2, __cpu_features+CPUID_OFFSET+index_SSE4_2(%rip)
++	jnz	2f
++	leaq	__strcasecmp_ssse3(%rip), %rax
++	testl	$bit_SSSE3, __cpu_features+CPUID_OFFSET+index_SSSE3(%rip)
++	jnz	2f
++	leaq	__strcasecmp_sse2(%rip), %rax
++2:	ret
++END(__strcasecmp)
++weak_alias (__strcasecmp, strcasecmp)
++# endif
++# ifdef USE_AS_STRNCASECMP_L
++ENTRY(__strncasecmp)
++	.type	__strncasecmp, @gnu_indirect_function
++	cmpl	$0, __cpu_features+KIND_OFFSET(%rip)
++	jne	1f
++	call	__init_cpu_features
++1:
++	leaq	__strncasecmp_sse42(%rip), %rax
++	testl	$bit_SSE4_2, __cpu_features+CPUID_OFFSET+index_SSE4_2(%rip)
++	jnz	2f
++	leaq	__strncasecmp_ssse3(%rip), %rax
++	testl	$bit_SSSE3, __cpu_features+CPUID_OFFSET+index_SSSE3(%rip)
++	jnz	2f
++	leaq	__strncasecmp_sse2(%rip), %rax
++2:	ret
++END(__strncasecmp)
++weak_alias (__strncasecmp, strncasecmp)
++# endif
++
+ /* We use 0x1a:
+ 	_SIDD_SBYTE_OPS
+ 	| _SIDD_CMP_EQUAL_EACH
+@@ -101,8 +165,31 @@ END(STRCMP)
+ 
+ 	/* Put all SSE 4.2 functions together.  */
+ 	.section .text.sse4.2,"ax",@progbits
+-	.align 	16
++	.align	16
+ 	.type	STRCMP_SSE42, @function
++# ifdef USE_AS_STRCASECMP_L
++ENTRY (__strcasecmp_sse42)
++	movq	__libc_tsd_LOCALE@gottpoff(%rip),%rax
++	movq	%fs:(%rax),%rdx
++
++	// XXX 5 byte should be before the function
++	/* 5-byte NOP.  */
++	.byte	0x0f,0x1f,0x44,0x00,0x00
++END (__strcasecmp_sse42)
++	/* FALLTHROUGH to strcasecmp_l.  */
++# endif
++# ifdef USE_AS_STRNCASECMP_L
++ENTRY (__strncasecmp_sse42)
++	movq	__libc_tsd_LOCALE@gottpoff(%rip),%rax
++	movq	%fs:(%rax),%rcx
++
++	// XXX 5 byte should be before the function
++	/* 5-byte NOP.  */
++	.byte	0x0f,0x1f,0x44,0x00,0x00
++END (__strncasecmp_sse42)
++	/* FALLTHROUGH to strncasecmp_l.  */
++# endif
++
+ STRCMP_SSE42:
+ 	cfi_startproc
+ 	CALL_MCOUNT
+@@ -110,24 +197,87 @@ STRCMP_SSE42:
+ /*
+  * This implementation uses SSE to compare up to 16 bytes at a time.
+  */
+-#ifdef USE_AS_STRNCMP
++# ifdef USE_AS_STRCASECMP_L
++	/* We have to fall back on the C implementation for locales
++	   with encodings not matching ASCII for single bytes.  */
++#  if LOCALE_T___LOCALES != 0 || LC_CTYPE != 0
++	movq	LOCALE_T___LOCALES+LC_CTYPE*8(%rdx), %rax
++#  else
++	movq	(%rdx), %rax
++#  endif
++	testl	$0, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%rax)
++	jne	__strcasecmp_l_nonascii
++# endif
++# ifdef USE_AS_STRNCASECMP_L
++	/* We have to fall back on the C implementation for locales
++	   with encodings not matching ASCII for single bytes.  */
++#  if LOCALE_T___LOCALES != 0 || LC_CTYPE != 0
++	movq	LOCALE_T___LOCALES+LC_CTYPE*8(%rcx), %rax
++#  else
++	movq	(%rcx), %rax
++#  endif
++	testl	$0, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%rax)
++	jne	__strncasecmp_l_nonascii
++# endif
++
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	test	%rdx, %rdx
+ 	je	LABEL(strcmp_exitz_sse4_2)
+ 	cmp	$1, %rdx
+ 	je	LABEL(Byte0_sse4_2)
+ 	mov	%rdx, %r11
+-#endif
++# endif
+ 	mov	%esi, %ecx
+ 	mov	%edi, %eax
+ /* Use 64bit AND here to avoid long NOP padding.  */
+ 	and	$0x3f, %rcx		/* rsi alignment in cache line */
+ 	and	$0x3f, %rax		/* rdi alignment in cache line */
++# if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L
++	.section .rodata.cst16,"aM",@progbits,16
++	.align 16
++.Lbelowupper_sse4:
++	.quad	0x4040404040404040
++	.quad	0x4040404040404040
++.Ltopupper_sse4:
++	.quad	0x5b5b5b5b5b5b5b5b
++	.quad	0x5b5b5b5b5b5b5b5b
++.Ltouppermask_sse4:
++	.quad	0x2020202020202020
++	.quad	0x2020202020202020
++	.previous
++	movdqa	.Lbelowupper_sse4(%rip), %xmm4
++#  define UCLOW_reg %xmm4
++	movdqa	.Ltopupper_sse4(%rip), %xmm5
++#  define UCHIGH_reg %xmm5
++	movdqa	.Ltouppermask_sse4(%rip), %xmm6
++#  define LCQWORD_reg %xmm6
++# endif
+ 	cmp	$0x30, %ecx
+ 	ja	LABEL(crosscache_sse4_2)/* rsi: 16-byte load will cross cache line */
+ 	cmp	$0x30, %eax
+ 	ja	LABEL(crosscache_sse4_2)/* rdi: 16-byte load will cross cache line */
+ 	movdqu	(%rdi), %xmm1
+ 	movdqu	(%rsi), %xmm2
++# if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L
++#  define TOLOWER(reg1, reg2) \
++	movdqa	reg1, %xmm7;					\
++	movdqa	UCHIGH_reg, %xmm8;				\
++	movdqa	reg2, %xmm9;					\
++	movdqa	UCHIGH_reg, %xmm10;				\
++	pcmpgtb	UCLOW_reg, %xmm7;				\
++	pcmpgtb	reg1, %xmm8;					\
++	pcmpgtb	UCLOW_reg, %xmm9;				\
++	pcmpgtb	reg2, %xmm10;					\
++	pand	%xmm8, %xmm7;					\
++	pand	%xmm10, %xmm9;					\
++	pand	LCQWORD_reg, %xmm7;				\
++	pand	LCQWORD_reg, %xmm9;				\
++	por	%xmm7, reg1;					\
++	por	%xmm9, reg2
++	TOLOWER (%xmm1, %xmm2)
++# else
++#  define TOLOWER(reg1, reg2)
++# endif
+ 	pxor	%xmm0, %xmm0		/* clear %xmm0 for null char checks */
+ 	pcmpeqb	%xmm1, %xmm0		/* Any null chars? */
+ 	pcmpeqb	%xmm2, %xmm1		/* compare first 16 bytes for equality */
+@@ -135,10 +285,10 @@ STRCMP_SSE42:
+ 	pmovmskb %xmm1, %edx
+ 	sub	$0xffff, %edx		/* if first 16 bytes are same, edx == 0xffff */
+ 	jnz	LABEL(less16bytes_sse4_2)/* If not, find different value or null char */
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)/* finish comparision */
+-#endif
++# endif
+ 	add	$16, %rsi		/* prepare to search next 16 bytes */
+ 	add	$16, %rdi		/* prepare to search next 16 bytes */
+ 
+@@ -180,7 +330,13 @@ LABEL(ashr_0_sse4_2):
+ 	movdqa	(%rsi), %xmm1
+ 	pxor	%xmm0, %xmm0			/* clear %xmm0 for null char check */
+ 	pcmpeqb	%xmm1, %xmm0			/* Any null chars? */
++# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
+ 	pcmpeqb	(%rdi), %xmm1			/* compare 16 bytes for equality */
++# else
++	movdqa	(%rdi), %xmm2
++	TOLOWER (%xmm1, %xmm2)
++	pcmpeqb	%xmm2, %xmm1			/* compare 16 bytes for equality */
++# endif
+ 	psubb	%xmm0, %xmm1			/* packed sub of comparison results*/
+ 	pmovmskb %xmm1, %r9d
+ 	shr	%cl, %edx			/* adjust 0xffff for offset */
+@@ -204,44 +360,60 @@ LABEL(ashr_0_sse4_2):
+ 	.p2align 4
+ LABEL(ashr_0_use_sse4_2):
+ 	movdqa	(%rdi,%rdx), %xmm0
++# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
+ 	pcmpistri      $0x1a,(%rsi,%rdx), %xmm0
++# else
++	movdqa	(%rsi,%rdx), %xmm1
++	TOLOWER (%xmm0, %xmm1)
++	pcmpistri $0x1a, %xmm1, %xmm0
++# endif
+ 	lea	16(%rdx), %rdx
+ 	jbe	LABEL(ashr_0_use_sse4_2_exit)
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)
+-#endif
++# endif
+ 
+ 	movdqa	(%rdi,%rdx), %xmm0
++# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
+ 	pcmpistri      $0x1a,(%rsi,%rdx), %xmm0
++# else
++	movdqa	(%rsi,%rdx), %xmm1
++	TOLOWER (%xmm0, %xmm1)
++	pcmpistri $0x1a, %xmm1, %xmm0
++# endif
+ 	lea	16(%rdx), %rdx
+ 	jbe	LABEL(ashr_0_use_sse4_2_exit)
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)
+-#endif
++# endif
+ 	jmp	LABEL(ashr_0_use_sse4_2)
+ 
+ 
+ 	.p2align 4
+ LABEL(ashr_0_use_sse4_2_exit):
+ 	jnc	LABEL(strcmp_exitz_sse4_2)
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	%rcx, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)
+-#endif
++# endif
+ 	lea	-16(%rdx, %rcx), %rcx
+ 	movzbl	(%rdi, %rcx), %eax
+ 	movzbl	(%rsi, %rcx), %edx
++# if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L
++	leaq	_nl_C_LC_CTYPE_tolower+128*4(%rip), %rcx
++	movl	(%rcx,%rax,4), %eax
++	movl	(%rcx,%rdx,4), %edx
++# endif
+ 	sub	%edx, %eax
+ 	ret
+ 
+ 
+ 
+-
+ /*
+  * The following cases will be handled by ashr_1
+- * rcx(offset of rsi)  rax(offset of rdi)   relative offset   	corresponding case
++ * rcx(offset of rsi)  rax(offset of rdi)   relative offset	corresponding case
+  *        n(15)            n -15            0(15 +(n-15) - n)         ashr_1
+  */
+ 	.p2align 4
+@@ -251,6 +423,7 @@ LABEL(ashr_1_sse4_2):
+ 	movdqa	(%rsi), %xmm1
+ 	pcmpeqb	%xmm1, %xmm0		/* Any null chars? */
+ 	pslldq	$15, %xmm2		/* shift first string to align with second */
++	TOLOWER (%xmm1, %xmm2)
+ 	pcmpeqb	%xmm1, %xmm2		/* compare 16 bytes for equality */
+ 	psubb	%xmm0, %xmm2		/* packed sub of comparison results*/
+ 	pmovmskb %xmm2, %r9d
+@@ -281,12 +454,18 @@ LABEL(loop_ashr_1_use_sse4_2):
+ 
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $1, -16(%rdi, %rdx), %xmm0
++# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
+ 	pcmpistri	$0x1a,(%rsi,%rdx), %xmm0
++# else
++	movdqa	(%rsi,%rdx), %xmm1
++	TOLOWER (%xmm0, %xmm1)
++	pcmpistri $0x1a, %xmm1, %xmm0
++# endif
+ 	jbe	LABEL(use_sse4_2_exit)
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)
+-#endif
++# endif
+ 
+ 	add	$16, %rdx
+ 	add	$16, %r10
+@@ -294,12 +473,18 @@ LABEL(loop_ashr_1_use_sse4_2):
+ 
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $1, -16(%rdi, %rdx), %xmm0
++# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
+ 	pcmpistri	$0x1a,(%rsi,%rdx), %xmm0
++# else
++	movdqa	(%rsi,%rdx), %xmm1
++	TOLOWER (%xmm0, %xmm1)
++	pcmpistri $0x1a, %xmm1, %xmm0
++# endif
+ 	jbe	LABEL(use_sse4_2_exit)
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)
+-#endif
++# endif
+ 	add	$16, %rdx
+ 	jmp	LABEL(loop_ashr_1_use_sse4_2)
+ 
+@@ -309,10 +494,10 @@ LABEL(nibble_ashr_1_use_sse4_2):
+ 	movdqa	-16(%rdi, %rdx), %xmm0
+ 	psrldq	$1, %xmm0
+ 	pcmpistri      $0x3a,%xmm0, %xmm0
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	cmp	%r11, %rcx
+ 	jae	LABEL(nibble_ashr_use_sse4_2_exit)
+-#endif
++# endif
+ 	cmp	$14, %ecx
+ 	ja	LABEL(loop_ashr_1_use_sse4_2)
+ 
+@@ -320,7 +505,7 @@ LABEL(nibble_ashr_1_use_sse4_2):
+ 
+ /*
+  * The following cases will be handled by ashr_2
+- * rcx(offset of rsi)  rax(offset of rdi)   relative offset   	corresponding case
++ * rcx(offset of rsi)  rax(offset of rdi)   relative offset	corresponding case
+  *        n(14~15)            n -14         1(15 +(n-14) - n)         ashr_2
+  */
+ 	.p2align 4
+@@ -330,6 +515,7 @@ LABEL(ashr_2_sse4_2):
+ 	movdqa	(%rsi), %xmm1
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pslldq	$14, %xmm2
++	TOLOWER (%xmm1, %xmm2)
+ 	pcmpeqb	%xmm1, %xmm2
+ 	psubb	%xmm0, %xmm2
+ 	pmovmskb %xmm2, %r9d
+@@ -360,12 +546,18 @@ LABEL(loop_ashr_2_use_sse4_2):
+ 
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $2, -16(%rdi, %rdx), %xmm0
++# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
+ 	pcmpistri	$0x1a,(%rsi,%rdx), %xmm0
++# else
++	movdqa	(%rsi,%rdx), %xmm1
++	TOLOWER (%xmm0, %xmm1)
++	pcmpistri $0x1a, %xmm1, %xmm0
++# endif
+ 	jbe	LABEL(use_sse4_2_exit)
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)
+-#endif
++# endif
+ 
+ 	add	$16, %rdx
+ 	add	$16, %r10
+@@ -373,12 +565,18 @@ LABEL(loop_ashr_2_use_sse4_2):
+ 
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $2, -16(%rdi, %rdx), %xmm0
++# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
+ 	pcmpistri	$0x1a,(%rsi,%rdx), %xmm0
++# else
++	movdqa	(%rsi,%rdx), %xmm1
++	TOLOWER (%xmm0, %xmm1)
++	pcmpistri $0x1a, %xmm1, %xmm0
++# endif
+ 	jbe	LABEL(use_sse4_2_exit)
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)
+-#endif
++# endif
+ 	add	$16, %rdx
+ 	jmp	LABEL(loop_ashr_2_use_sse4_2)
+ 
+@@ -388,10 +586,10 @@ LABEL(nibble_ashr_2_use_sse4_2):
+ 	movdqa	-16(%rdi, %rdx), %xmm0
+ 	psrldq	$2, %xmm0
+ 	pcmpistri      $0x3a,%xmm0, %xmm0
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	cmp	%r11, %rcx
+ 	jae	LABEL(nibble_ashr_use_sse4_2_exit)
+-#endif
++# endif
+ 	cmp	$13, %ecx
+ 	ja	LABEL(loop_ashr_2_use_sse4_2)
+ 
+@@ -409,6 +607,7 @@ LABEL(ashr_3_sse4_2):
+ 	movdqa	(%rsi), %xmm1
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pslldq	$13, %xmm2
++	TOLOWER (%xmm1, %xmm2)
+ 	pcmpeqb	%xmm1, %xmm2
+ 	psubb	%xmm0, %xmm2
+ 	pmovmskb %xmm2, %r9d
+@@ -439,12 +638,18 @@ LABEL(loop_ashr_3_use_sse4_2):
+ 
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $3, -16(%rdi, %rdx), %xmm0
++# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
+ 	pcmpistri	$0x1a,(%rsi,%rdx), %xmm0
++# else
++	movdqa	(%rsi,%rdx), %xmm1
++	TOLOWER (%xmm0, %xmm1)
++	pcmpistri $0x1a, %xmm1, %xmm0
++# endif
+ 	jbe	LABEL(use_sse4_2_exit)
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)
+-#endif
++# endif
+ 
+ 	add	$16, %rdx
+ 	add	$16, %r10
+@@ -452,12 +657,18 @@ LABEL(loop_ashr_3_use_sse4_2):
+ 
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $3, -16(%rdi, %rdx), %xmm0
++# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
+ 	pcmpistri	$0x1a,(%rsi,%rdx), %xmm0
++# else
++	movdqa	(%rsi,%rdx), %xmm1
++	TOLOWER (%xmm0, %xmm1)
++	pcmpistri $0x1a, %xmm1, %xmm0
++# endif
+ 	jbe	LABEL(use_sse4_2_exit)
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)
+-#endif
++# endif
+ 	add	$16, %rdx
+ 	jmp	LABEL(loop_ashr_3_use_sse4_2)
+ 
+@@ -467,10 +678,10 @@ LABEL(nibble_ashr_3_use_sse4_2):
+ 	movdqa	-16(%rdi, %rdx), %xmm0
+ 	psrldq	$3, %xmm0
+ 	pcmpistri      $0x3a,%xmm0, %xmm0
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	cmp	%r11, %rcx
+ 	jae	LABEL(nibble_ashr_use_sse4_2_exit)
+-#endif
++# endif
+ 	cmp	$12, %ecx
+ 	ja	LABEL(loop_ashr_3_use_sse4_2)
+ 
+@@ -488,6 +699,7 @@ LABEL(ashr_4_sse4_2):
+ 	movdqa	(%rsi), %xmm1
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pslldq	$12, %xmm2
++	TOLOWER (%xmm1, %xmm2)
+ 	pcmpeqb	%xmm1, %xmm2
+ 	psubb	%xmm0, %xmm2
+ 	pmovmskb %xmm2, %r9d
+@@ -519,12 +731,18 @@ LABEL(loop_ashr_4_use_sse4_2):
+ 
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $4, -16(%rdi, %rdx), %xmm0
++# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
+ 	pcmpistri	$0x1a,(%rsi,%rdx), %xmm0
++# else
++	movdqa	(%rsi,%rdx), %xmm1
++	TOLOWER (%xmm0, %xmm1)
++	pcmpistri $0x1a, %xmm1, %xmm0
++# endif
+ 	jbe	LABEL(use_sse4_2_exit)
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)
+-#endif
++# endif
+ 
+ 	add	$16, %rdx
+ 	add	$16, %r10
+@@ -532,12 +750,18 @@ LABEL(loop_ashr_4_use_sse4_2):
+ 
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $4, -16(%rdi, %rdx), %xmm0
++# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
+ 	pcmpistri	$0x1a,(%rsi,%rdx), %xmm0
++# else
++	movdqa	(%rsi,%rdx), %xmm1
++	TOLOWER (%xmm0, %xmm1)
++	pcmpistri $0x1a, %xmm1, %xmm0
++# endif
+ 	jbe	LABEL(use_sse4_2_exit)
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)
+-#endif
++# endif
+ 	add	$16, %rdx
+ 	jmp	LABEL(loop_ashr_4_use_sse4_2)
+ 
+@@ -547,10 +771,10 @@ LABEL(nibble_ashr_4_use_sse4_2):
+ 	movdqa	-16(%rdi, %rdx), %xmm0
+ 	psrldq	$4, %xmm0
+ 	pcmpistri      $0x3a,%xmm0, %xmm0
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	cmp	%r11, %rcx
+ 	jae	LABEL(nibble_ashr_use_sse4_2_exit)
+-#endif
++# endif
+ 	cmp	$11, %ecx
+ 	ja	LABEL(loop_ashr_4_use_sse4_2)
+ 
+@@ -559,7 +783,7 @@ LABEL(nibble_ashr_4_use_sse4_2):
+ /*
+  * The following cases will be handled by ashr_5
+  *  rcx(offset of rsi)  rax(offset of rdi)        relative offset      corresponding case
+- *        n(11~15)          n - 11      	  4(15 +(n-11) - n)         ashr_5
++ *        n(11~15)          n - 11		  4(15 +(n-11) - n)         ashr_5
+  */
+ 	.p2align 4
+ LABEL(ashr_5_sse4_2):
+@@ -568,6 +792,7 @@ LABEL(ashr_5_sse4_2):
+ 	movdqa	(%rsi), %xmm1
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pslldq	$11, %xmm2
++	TOLOWER (%xmm1, %xmm2)
+ 	pcmpeqb	%xmm1, %xmm2
+ 	psubb	%xmm0, %xmm2
+ 	pmovmskb %xmm2, %r9d
+@@ -599,12 +824,18 @@ LABEL(loop_ashr_5_use_sse4_2):
+ 
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $5, -16(%rdi, %rdx), %xmm0
++# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
+ 	pcmpistri	$0x1a,(%rsi,%rdx), %xmm0
++# else
++	movdqa	(%rsi,%rdx), %xmm1
++	TOLOWER (%xmm0, %xmm1)
++	pcmpistri $0x1a, %xmm1, %xmm0
++# endif
+ 	jbe	LABEL(use_sse4_2_exit)
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)
+-#endif
++# endif
+ 
+ 	add	$16, %rdx
+ 	add	$16, %r10
+@@ -613,12 +844,18 @@ LABEL(loop_ashr_5_use_sse4_2):
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 
+ 	palignr $5, -16(%rdi, %rdx), %xmm0
++# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
+ 	pcmpistri	$0x1a,(%rsi,%rdx), %xmm0
++# else
++	movdqa	(%rsi,%rdx), %xmm1
++	TOLOWER (%xmm0, %xmm1)
++	pcmpistri $0x1a, %xmm1, %xmm0
++# endif
+ 	jbe	LABEL(use_sse4_2_exit)
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)
+-#endif
++# endif
+ 	add	$16, %rdx
+ 	jmp	LABEL(loop_ashr_5_use_sse4_2)
+ 
+@@ -628,10 +865,10 @@ LABEL(nibble_ashr_5_use_sse4_2):
+ 	movdqa	-16(%rdi, %rdx), %xmm0
+ 	psrldq	$5, %xmm0
+ 	pcmpistri      $0x3a,%xmm0, %xmm0
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	cmp	%r11, %rcx
+ 	jae	LABEL(nibble_ashr_use_sse4_2_exit)
+-#endif
++# endif
+ 	cmp	$10, %ecx
+ 	ja	LABEL(loop_ashr_5_use_sse4_2)
+ 
+@@ -640,7 +877,7 @@ LABEL(nibble_ashr_5_use_sse4_2):
+ /*
+  * The following cases will be handled by ashr_6
+  *  rcx(offset of rsi)  rax(offset of rdi)        relative offset      corresponding case
+- *        n(10~15)          n - 10      	  5(15 +(n-10) - n)         ashr_6
++ *        n(10~15)          n - 10		  5(15 +(n-10) - n)         ashr_6
+  */
+ 	.p2align 4
+ LABEL(ashr_6_sse4_2):
+@@ -649,6 +886,7 @@ LABEL(ashr_6_sse4_2):
+ 	movdqa	(%rsi), %xmm1
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pslldq	$10, %xmm2
++	TOLOWER (%xmm1, %xmm2)
+ 	pcmpeqb	%xmm1, %xmm2
+ 	psubb	%xmm0, %xmm2
+ 	pmovmskb %xmm2, %r9d
+@@ -680,12 +918,18 @@ LABEL(loop_ashr_6_use_sse4_2):
+ 
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $6, -16(%rdi, %rdx), %xmm0
+-	pcmpistri	$0x1a,(%rsi,%rdx), %xmm0
++# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
++	pcmpistri $0x1a,(%rsi,%rdx), %xmm0
++# else
++	movdqa	(%rsi,%rdx), %xmm1
++	TOLOWER (%xmm0, %xmm1)
++	pcmpistri $0x1a, %xmm1, %xmm0
++# endif
+ 	jbe	LABEL(use_sse4_2_exit)
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)
+-#endif
++# endif
+ 
+ 	add	$16, %rdx
+ 	add	$16, %r10
+@@ -693,12 +937,18 @@ LABEL(loop_ashr_6_use_sse4_2):
+ 
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $6, -16(%rdi, %rdx), %xmm0
+-	pcmpistri	$0x1a,(%rsi,%rdx), %xmm0
++# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
++	pcmpistri $0x1a,(%rsi,%rdx), %xmm0
++# else
++	movdqa	(%rsi,%rdx), %xmm1
++	TOLOWER (%xmm0, %xmm1)
++	pcmpistri $0x1a, %xmm1, %xmm0
++# endif
+ 	jbe	LABEL(use_sse4_2_exit)
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)
+-#endif
++# endif
+ 	add	$16, %rdx
+ 	jmp	LABEL(loop_ashr_6_use_sse4_2)
+ 
+@@ -708,10 +958,10 @@ LABEL(nibble_ashr_6_use_sse4_2):
+ 	movdqa	-16(%rdi, %rdx), %xmm0
+ 	psrldq	$6, %xmm0
+ 	pcmpistri      $0x3a,%xmm0, %xmm0
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	cmp	%r11, %rcx
+ 	jae	LABEL(nibble_ashr_use_sse4_2_exit)
+-#endif
++# endif
+ 	cmp	$9, %ecx
+ 	ja	LABEL(loop_ashr_6_use_sse4_2)
+ 
+@@ -720,7 +970,7 @@ LABEL(nibble_ashr_6_use_sse4_2):
+ /*
+  * The following cases will be handled by ashr_7
+  *  rcx(offset of rsi)  rax(offset of rdi)        relative offset      corresponding case
+- *        n(9~15)          n - 9      	        6(15 +(n - 9) - n)         ashr_7
++ *        n(9~15)          n - 9		  6(15 +(n - 9) - n)         ashr_7
+  */
+ 	.p2align 4
+ LABEL(ashr_7_sse4_2):
+@@ -729,6 +979,7 @@ LABEL(ashr_7_sse4_2):
+ 	movdqa	(%rsi), %xmm1
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pslldq	$9, %xmm2
++	TOLOWER (%xmm1, %xmm2)
+ 	pcmpeqb	%xmm1, %xmm2
+ 	psubb	%xmm0, %xmm2
+ 	pmovmskb %xmm2, %r9d
+@@ -760,12 +1011,18 @@ LABEL(loop_ashr_7_use_sse4_2):
+ 
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $7, -16(%rdi, %rdx), %xmm0
++# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
+ 	pcmpistri	$0x1a,(%rsi,%rdx), %xmm0
++# else
++	movdqa	(%rsi,%rdx), %xmm1
++	TOLOWER (%xmm0, %xmm1)
++	pcmpistri $0x1a, %xmm1, %xmm0
++# endif
+ 	jbe	LABEL(use_sse4_2_exit)
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)
+-#endif
++# endif
+ 
+ 	add	$16, %rdx
+ 	add	$16, %r10
+@@ -773,12 +1030,18 @@ LABEL(loop_ashr_7_use_sse4_2):
+ 
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $7, -16(%rdi, %rdx), %xmm0
++# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
+ 	pcmpistri	$0x1a,(%rsi,%rdx), %xmm0
++# else
++	movdqa	(%rsi,%rdx), %xmm1
++	TOLOWER (%xmm0, %xmm1)
++	pcmpistri $0x1a, %xmm1, %xmm0
++# endif
+ 	jbe	LABEL(use_sse4_2_exit)
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)
+-#endif
++# endif
+ 	add	$16, %rdx
+ 	jmp	LABEL(loop_ashr_7_use_sse4_2)
+ 
+@@ -788,10 +1051,10 @@ LABEL(nibble_ashr_7_use_sse4_2):
+ 	movdqa	-16(%rdi, %rdx), %xmm0
+ 	psrldq	$7, %xmm0
+ 	pcmpistri      $0x3a,%xmm0, %xmm0
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	cmp	%r11, %rcx
+ 	jae	LABEL(nibble_ashr_use_sse4_2_exit)
+-#endif
++# endif
+ 	cmp	$8, %ecx
+ 	ja	LABEL(loop_ashr_7_use_sse4_2)
+ 
+@@ -800,7 +1063,7 @@ LABEL(nibble_ashr_7_use_sse4_2):
+ /*
+  *  The following cases will be handled by ashr_8
+  *  rcx(offset of rsi)  rax(offset of rdi)        relative offset	 corresponding case
+- *        n(8~15)          n - 8      	        7(15 +(n - 8) - n)         ashr_8
++ *        n(8~15)          n - 8		  7(15 +(n - 8) - n)         ashr_8
+  */
+ 	.p2align 4
+ LABEL(ashr_8_sse4_2):
+@@ -809,6 +1072,7 @@ LABEL(ashr_8_sse4_2):
+ 	movdqa	(%rsi), %xmm1
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pslldq	$8, %xmm2
++	TOLOWER (%xmm1, %xmm2)
+ 	pcmpeqb	%xmm1, %xmm2
+ 	psubb	%xmm0, %xmm2
+ 	pmovmskb %xmm2, %r9d
+@@ -840,12 +1104,18 @@ LABEL(loop_ashr_8_use_sse4_2):
+ 
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $8, -16(%rdi, %rdx), %xmm0
+-	pcmpistri	$0x1a,(%rsi,%rdx), %xmm0
++# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
++	pcmpistri $0x1a, (%rsi,%rdx), %xmm0
++# else
++	movdqa	(%rsi,%rdx), %xmm1
++	TOLOWER (%xmm0, %xmm1)
++	pcmpistri $0x1a, %xmm1, %xmm0
++# endif
+ 	jbe	LABEL(use_sse4_2_exit)
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)
+-#endif
++# endif
+ 
+ 	add	$16, %rdx
+ 	add	$16, %r10
+@@ -853,12 +1123,18 @@ LABEL(loop_ashr_8_use_sse4_2):
+ 
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $8, -16(%rdi, %rdx), %xmm0
+-	pcmpistri	$0x1a,(%rsi,%rdx), %xmm0
++# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
++	pcmpistri $0x1a, (%rsi,%rdx), %xmm0
++# else
++	movdqa	(%rsi,%rdx), %xmm1
++	TOLOWER (%xmm0, %xmm1)
++	pcmpistri $0x1a, %xmm1, %xmm0
++# endif
+ 	jbe	LABEL(use_sse4_2_exit)
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)
+-#endif
++# endif
+ 	add	$16, %rdx
+ 	jmp	LABEL(loop_ashr_8_use_sse4_2)
+ 
+@@ -868,10 +1144,10 @@ LABEL(nibble_ashr_8_use_sse4_2):
+ 	movdqa	-16(%rdi, %rdx), %xmm0
+ 	psrldq	$8, %xmm0
+ 	pcmpistri      $0x3a,%xmm0, %xmm0
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	cmp	%r11, %rcx
+ 	jae	LABEL(nibble_ashr_use_sse4_2_exit)
+-#endif
++# endif
+ 	cmp	$7, %ecx
+ 	ja	LABEL(loop_ashr_8_use_sse4_2)
+ 
+@@ -880,7 +1156,7 @@ LABEL(nibble_ashr_8_use_sse4_2):
+ /*
+  *  The following cases will be handled by ashr_9
+  *  rcx(offset of rsi)  rax(offset of rdi)        relative offset	 corresponding case
+- *        n(7~15)          n - 7      	        8(15 +(n - 7) - n)         ashr_9
++ *        n(7~15)          n - 7		  8(15 +(n - 7) - n)         ashr_9
+  */
+ 	.p2align 4
+ LABEL(ashr_9_sse4_2):
+@@ -889,6 +1165,7 @@ LABEL(ashr_9_sse4_2):
+ 	movdqa	(%rsi), %xmm1
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pslldq	$7, %xmm2
++	TOLOWER (%xmm1, %xmm2)
+ 	pcmpeqb	%xmm1, %xmm2
+ 	psubb	%xmm0, %xmm2
+ 	pmovmskb %xmm2, %r9d
+@@ -921,12 +1198,18 @@ LABEL(loop_ashr_9_use_sse4_2):
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 
+ 	palignr $9, -16(%rdi, %rdx), %xmm0
+-	pcmpistri	$0x1a,(%rsi,%rdx), %xmm0
++# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
++	pcmpistri $0x1a, (%rsi,%rdx), %xmm0
++# else
++	movdqa	(%rsi,%rdx), %xmm1
++	TOLOWER (%xmm0, %xmm1)
++	pcmpistri $0x1a, %xmm1, %xmm0
++# endif
+ 	jbe	LABEL(use_sse4_2_exit)
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)
+-#endif
++# endif
+ 
+ 	add	$16, %rdx
+ 	add	$16, %r10
+@@ -934,12 +1217,18 @@ LABEL(loop_ashr_9_use_sse4_2):
+ 
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $9, -16(%rdi, %rdx), %xmm0
+-	pcmpistri	$0x1a,(%rsi,%rdx), %xmm0
++# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
++	pcmpistri $0x1a, (%rsi,%rdx), %xmm0
++# else
++	movdqa	(%rsi,%rdx), %xmm1
++	TOLOWER (%xmm0, %xmm1)
++	pcmpistri $0x1a, %xmm1, %xmm0
++# endif
+ 	jbe	LABEL(use_sse4_2_exit)
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)
+-#endif
++# endif
+ 	add	$16, %rdx
+ 	jmp	LABEL(loop_ashr_9_use_sse4_2)
+ 
+@@ -949,10 +1238,10 @@ LABEL(nibble_ashr_9_use_sse4_2):
+ 	movdqa	-16(%rdi, %rdx), %xmm0
+ 	psrldq	$9, %xmm0
+ 	pcmpistri      $0x3a,%xmm0, %xmm0
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	cmp	%r11, %rcx
+ 	jae	LABEL(nibble_ashr_use_sse4_2_exit)
+-#endif
++# endif
+ 	cmp	$6, %ecx
+ 	ja	LABEL(loop_ashr_9_use_sse4_2)
+ 
+@@ -961,7 +1250,7 @@ LABEL(nibble_ashr_9_use_sse4_2):
+ /*
+  *  The following cases will be handled by ashr_10
+  *  rcx(offset of rsi)  rax(offset of rdi)        relative offset	 corresponding case
+- *        n(6~15)          n - 6      	        9(15 +(n - 6) - n)         ashr_10
++ *        n(6~15)          n - 6		  9(15 +(n - 6) - n)         ashr_10
+  */
+ 	.p2align 4
+ LABEL(ashr_10_sse4_2):
+@@ -970,6 +1259,7 @@ LABEL(ashr_10_sse4_2):
+ 	movdqa	(%rsi), %xmm1
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pslldq	$6, %xmm2
++	TOLOWER (%xmm1, %xmm2)
+ 	pcmpeqb	%xmm1, %xmm2
+ 	psubb	%xmm0, %xmm2
+ 	pmovmskb %xmm2, %r9d
+@@ -1001,12 +1291,18 @@ LABEL(loop_ashr_10_use_sse4_2):
+ 
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $10, -16(%rdi, %rdx), %xmm0
+-	pcmpistri	$0x1a,(%rsi,%rdx), %xmm0
++# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
++	pcmpistri $0x1a, (%rsi,%rdx), %xmm0
++# else
++	movdqa	(%rsi,%rdx), %xmm1
++	TOLOWER (%xmm0, %xmm1)
++	pcmpistri $0x1a, %xmm1, %xmm0
++# endif
+ 	jbe	LABEL(use_sse4_2_exit)
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)
+-#endif
++# endif
+ 
+ 	add	$16, %rdx
+ 	add	$16, %r10
+@@ -1014,12 +1310,18 @@ LABEL(loop_ashr_10_use_sse4_2):
+ 
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $10, -16(%rdi, %rdx), %xmm0
+-	pcmpistri	$0x1a,(%rsi,%rdx), %xmm0
++# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
++	pcmpistri $0x1a, (%rsi,%rdx), %xmm0
++# else
++	movdqa	(%rsi,%rdx), %xmm1
++	TOLOWER (%xmm0, %xmm1)
++	pcmpistri $0x1a, %xmm1, %xmm0
++# endif
+ 	jbe	LABEL(use_sse4_2_exit)
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)
+-#endif
++# endif
+ 	add	$16, %rdx
+ 	jmp	LABEL(loop_ashr_10_use_sse4_2)
+ 
+@@ -1029,10 +1331,10 @@ LABEL(nibble_ashr_10_use_sse4_2):
+ 	movdqa	-16(%rdi, %rdx), %xmm0
+ 	psrldq	$10, %xmm0
+ 	pcmpistri      $0x3a,%xmm0, %xmm0
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	cmp	%r11, %rcx
+ 	jae	LABEL(nibble_ashr_use_sse4_2_exit)
+-#endif
++# endif
+ 	cmp	$5, %ecx
+ 	ja	LABEL(loop_ashr_10_use_sse4_2)
+ 
+@@ -1041,7 +1343,7 @@ LABEL(nibble_ashr_10_use_sse4_2):
+ /*
+  *  The following cases will be handled by ashr_11
+  *  rcx(offset of rsi)  rax(offset of rdi)        relative offset	 corresponding case
+- *        n(5~15)          n - 5      	        10(15 +(n - 5) - n)         ashr_11
++ *        n(5~15)          n - 5		  10(15 +(n - 5) - n)         ashr_11
+  */
+ 	.p2align 4
+ LABEL(ashr_11_sse4_2):
+@@ -1050,6 +1352,7 @@ LABEL(ashr_11_sse4_2):
+ 	movdqa	(%rsi), %xmm1
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pslldq	$5, %xmm2
++	TOLOWER (%xmm1, %xmm2)
+ 	pcmpeqb	%xmm1, %xmm2
+ 	psubb	%xmm0, %xmm2
+ 	pmovmskb %xmm2, %r9d
+@@ -1081,12 +1384,18 @@ LABEL(loop_ashr_11_use_sse4_2):
+ 
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $11, -16(%rdi, %rdx), %xmm0
+-	pcmpistri	$0x1a,(%rsi,%rdx), %xmm0
++# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
++	pcmpistri $0x1a, (%rsi,%rdx), %xmm0
++# else
++	movdqa	(%rsi,%rdx), %xmm1
++	TOLOWER (%xmm0, %xmm1)
++	pcmpistri $0x1a, %xmm1, %xmm0
++# endif
+ 	jbe	LABEL(use_sse4_2_exit)
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)
+-#endif
++# endif
+ 
+ 	add	$16, %rdx
+ 	add	$16, %r10
+@@ -1094,12 +1403,18 @@ LABEL(loop_ashr_11_use_sse4_2):
+ 
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $11, -16(%rdi, %rdx), %xmm0
+-	pcmpistri	$0x1a,(%rsi,%rdx), %xmm0
++# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
++	pcmpistri $0x1a, (%rsi,%rdx), %xmm0
++# else
++	movdqa	(%rsi,%rdx), %xmm1
++	TOLOWER (%xmm0, %xmm1)
++	pcmpistri $0x1a, %xmm1, %xmm0
++# endif
+ 	jbe	LABEL(use_sse4_2_exit)
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)
+-#endif
++# endif
+ 	add	$16, %rdx
+ 	jmp	LABEL(loop_ashr_11_use_sse4_2)
+ 
+@@ -1109,10 +1424,10 @@ LABEL(nibble_ashr_11_use_sse4_2):
+ 	movdqa	-16(%rdi, %rdx), %xmm0
+ 	psrldq	$11, %xmm0
+ 	pcmpistri      $0x3a,%xmm0, %xmm0
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	cmp	%r11, %rcx
+ 	jae	LABEL(nibble_ashr_use_sse4_2_exit)
+-#endif
++# endif
+ 	cmp	$4, %ecx
+ 	ja	LABEL(loop_ashr_11_use_sse4_2)
+ 
+@@ -1121,7 +1436,7 @@ LABEL(nibble_ashr_11_use_sse4_2):
+ /*
+  *  The following cases will be handled by ashr_12
+  *  rcx(offset of rsi)  rax(offset of rdi)        relative offset	 corresponding case
+- *        n(4~15)          n - 4      	        11(15 +(n - 4) - n)         ashr_12
++ *        n(4~15)          n - 4		  11(15 +(n - 4) - n)         ashr_12
+  */
+ 	.p2align 4
+ LABEL(ashr_12_sse4_2):
+@@ -1130,6 +1445,7 @@ LABEL(ashr_12_sse4_2):
+ 	movdqa	(%rsi), %xmm1
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pslldq	$4, %xmm2
++	TOLOWER (%xmm1, %xmm2)
+ 	pcmpeqb	%xmm1, %xmm2
+ 	psubb	%xmm0, %xmm2
+ 	pmovmskb %xmm2, %r9d
+@@ -1161,12 +1477,18 @@ LABEL(loop_ashr_12_use_sse4_2):
+ 
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $12, -16(%rdi, %rdx), %xmm0
+-	pcmpistri	$0x1a,(%rsi,%rdx), %xmm0
++# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
++	pcmpistri $0x1a, (%rsi,%rdx), %xmm0
++# else
++	movdqa	(%rsi,%rdx), %xmm1
++	TOLOWER (%xmm0, %xmm1)
++	pcmpistri $0x1a, %xmm1, %xmm0
++# endif
+ 	jbe	LABEL(use_sse4_2_exit)
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)
+-#endif
++# endif
+ 
+ 	add	$16, %rdx
+ 	add	$16, %r10
+@@ -1174,12 +1496,18 @@ LABEL(loop_ashr_12_use_sse4_2):
+ 
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $12, -16(%rdi, %rdx), %xmm0
+-	pcmpistri	$0x1a,(%rsi,%rdx), %xmm0
++# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
++	pcmpistri $0x1a, (%rsi,%rdx), %xmm0
++# else
++	movdqa	(%rsi,%rdx), %xmm1
++	TOLOWER (%xmm0, %xmm1)
++	pcmpistri $0x1a, %xmm1, %xmm0
++# endif
+ 	jbe	LABEL(use_sse4_2_exit)
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)
+-#endif
++# endif
+ 	add	$16, %rdx
+ 	jmp	LABEL(loop_ashr_12_use_sse4_2)
+ 
+@@ -1189,10 +1517,10 @@ LABEL(nibble_ashr_12_use_sse4_2):
+ 	movdqa	-16(%rdi, %rdx), %xmm0
+ 	psrldq	$12, %xmm0
+ 	pcmpistri      $0x3a,%xmm0, %xmm0
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	cmp	%r11, %rcx
+ 	jae	LABEL(nibble_ashr_use_sse4_2_exit)
+-#endif
++# endif
+ 	cmp	$3, %ecx
+ 	ja	LABEL(loop_ashr_12_use_sse4_2)
+ 
+@@ -1201,7 +1529,7 @@ LABEL(nibble_ashr_12_use_sse4_2):
+ /*
+  *  The following cases will be handled by ashr_13
+  *  rcx(offset of rsi)  rax(offset of rdi)        relative offset	 corresponding case
+- *        n(3~15)          n - 3      	        12(15 +(n - 3) - n)         ashr_13
++ *        n(3~15)          n - 3		  12(15 +(n - 3) - n)         ashr_13
+  */
+ 	.p2align 4
+ LABEL(ashr_13_sse4_2):
+@@ -1210,6 +1538,7 @@ LABEL(ashr_13_sse4_2):
+ 	movdqa	(%rsi), %xmm1
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pslldq	$3, %xmm2
++	TOLOWER (%xmm1, %xmm2)
+ 	pcmpeqb	%xmm1, %xmm2
+ 	psubb	%xmm0, %xmm2
+ 	pmovmskb %xmm2, %r9d
+@@ -1242,12 +1571,18 @@ LABEL(loop_ashr_13_use_sse4_2):
+ 
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $13, -16(%rdi, %rdx), %xmm0
+-	pcmpistri	$0x1a,(%rsi,%rdx), %xmm0
++# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
++	pcmpistri $0x1a, (%rsi,%rdx), %xmm0
++# else
++	movdqa	(%rsi,%rdx), %xmm1
++	TOLOWER (%xmm0, %xmm1)
++	pcmpistri $0x1a, %xmm1, %xmm0
++# endif
+ 	jbe	LABEL(use_sse4_2_exit)
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)
+-#endif
++# endif
+ 
+ 	add	$16, %rdx
+ 	add	$16, %r10
+@@ -1255,12 +1590,18 @@ LABEL(loop_ashr_13_use_sse4_2):
+ 
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $13, -16(%rdi, %rdx), %xmm0
+-	pcmpistri	$0x1a,(%rsi,%rdx), %xmm0
++# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
++	pcmpistri $0x1a, (%rsi,%rdx), %xmm0
++# else
++	movdqa	(%rsi,%rdx), %xmm1
++	TOLOWER (%xmm0, %xmm1)
++	pcmpistri $0x1a, %xmm1, %xmm0
++# endif
+ 	jbe	LABEL(use_sse4_2_exit)
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)
+-#endif
++# endif
+ 	add	$16, %rdx
+ 	jmp	LABEL(loop_ashr_13_use_sse4_2)
+ 
+@@ -1270,10 +1611,10 @@ LABEL(nibble_ashr_13_use_sse4_2):
+ 	movdqa	-16(%rdi, %rdx), %xmm0
+ 	psrldq	$13, %xmm0
+ 	pcmpistri      $0x3a,%xmm0, %xmm0
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	cmp	%r11, %rcx
+ 	jae	LABEL(nibble_ashr_use_sse4_2_exit)
+-#endif
++# endif
+ 	cmp	$2, %ecx
+ 	ja	LABEL(loop_ashr_13_use_sse4_2)
+ 
+@@ -1282,7 +1623,7 @@ LABEL(nibble_ashr_13_use_sse4_2):
+ /*
+  *  The following cases will be handled by ashr_14
+  *  rcx(offset of rsi)  rax(offset of rdi)        relative offset	 corresponding case
+- *        n(2~15)          n - 2      	        13(15 +(n - 2) - n)         ashr_14
++ *        n(2~15)          n - 2		  13(15 +(n - 2) - n)         ashr_14
+  */
+ 	.p2align 4
+ LABEL(ashr_14_sse4_2):
+@@ -1291,6 +1632,7 @@ LABEL(ashr_14_sse4_2):
+ 	movdqa	(%rsi), %xmm1
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pslldq  $2, %xmm2
++	TOLOWER (%xmm1, %xmm2)
+ 	pcmpeqb	%xmm1, %xmm2
+ 	psubb	%xmm0, %xmm2
+ 	pmovmskb %xmm2, %r9d
+@@ -1323,12 +1665,18 @@ LABEL(loop_ashr_14_use_sse4_2):
+ 
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $14, -16(%rdi, %rdx), %xmm0
+-	pcmpistri	$0x1a,(%rsi,%rdx), %xmm0
++# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
++	pcmpistri $0x1a, (%rsi,%rdx), %xmm0
++# else
++	movdqa	(%rsi,%rdx), %xmm1
++	TOLOWER (%xmm0, %xmm1)
++	pcmpistri $0x1a, %xmm1, %xmm0
++# endif
+ 	jbe	LABEL(use_sse4_2_exit)
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)
+-#endif
++# endif
+ 
+ 	add	$16, %rdx
+ 	add	$16, %r10
+@@ -1336,12 +1684,18 @@ LABEL(loop_ashr_14_use_sse4_2):
+ 
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $14, -16(%rdi, %rdx), %xmm0
+-	pcmpistri	$0x1a,(%rsi,%rdx), %xmm0
++# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
++	pcmpistri $0x1a, (%rsi,%rdx), %xmm0
++# else
++	movdqa	(%rsi,%rdx), %xmm1
++	TOLOWER (%xmm0, %xmm1)
++	pcmpistri $0x1a, %xmm1, %xmm0
++# endif
+ 	jbe	LABEL(use_sse4_2_exit)
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)
+-#endif
++# endif
+ 	add	$16, %rdx
+ 	jmp	LABEL(loop_ashr_14_use_sse4_2)
+ 
+@@ -1351,10 +1705,10 @@ LABEL(nibble_ashr_14_use_sse4_2):
+ 	movdqa	-16(%rdi, %rdx), %xmm0
+ 	psrldq	$14, %xmm0
+ 	pcmpistri      $0x3a,%xmm0, %xmm0
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	cmp	%r11, %rcx
+ 	jae	LABEL(nibble_ashr_use_sse4_2_exit)
+-#endif
++# endif
+ 	cmp	$1, %ecx
+ 	ja	LABEL(loop_ashr_14_use_sse4_2)
+ 
+@@ -1363,7 +1717,7 @@ LABEL(nibble_ashr_14_use_sse4_2):
+ /*
+  *  The following cases will be handled by ashr_15
+  *  rcx(offset of rsi)  rax(offset of rdi)        relative offset	 corresponding case
+- *        n(1~15)          n - 1      	        14(15 +(n - 1) - n)         ashr_15
++ *        n(1~15)          n - 1		  14(15 +(n - 1) - n)         ashr_15
+  */
+ 	.p2align 4
+ LABEL(ashr_15_sse4_2):
+@@ -1372,6 +1726,7 @@ LABEL(ashr_15_sse4_2):
+ 	movdqa	(%rsi), %xmm1
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pslldq	$1, %xmm2
++	TOLOWER (%xmm1, %xmm2)
+ 	pcmpeqb	%xmm1, %xmm2
+ 	psubb	%xmm0, %xmm2
+ 	pmovmskb %xmm2, %r9d
+@@ -1406,12 +1761,18 @@ LABEL(loop_ashr_15_use_sse4_2):
+ 
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $15, -16(%rdi, %rdx), %xmm0
+-	pcmpistri      $0x1a,(%rsi,%rdx), %xmm0
++# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
++	pcmpistri $0x1a, (%rsi,%rdx), %xmm0
++# else
++	movdqa	(%rsi,%rdx), %xmm1
++	TOLOWER (%xmm0, %xmm1)
++	pcmpistri $0x1a, %xmm1, %xmm0
++# endif
+ 	jbe	LABEL(use_sse4_2_exit)
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)
+-#endif
++# endif
+ 
+ 	add	$16, %rdx
+ 	add	$16, %r10
+@@ -1419,12 +1780,18 @@ LABEL(loop_ashr_15_use_sse4_2):
+ 
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $15, -16(%rdi, %rdx), %xmm0
+-	pcmpistri      $0x1a,(%rsi,%rdx), %xmm0
++# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
++	pcmpistri $0x1a, (%rsi,%rdx), %xmm0
++# else
++	movdqa	(%rsi,%rdx), %xmm1
++	TOLOWER (%xmm0, %xmm1)
++	pcmpistri $0x1a, %xmm1, %xmm0
++# endif
+ 	jbe	LABEL(use_sse4_2_exit)
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)
+-#endif
++# endif
+ 	add	$16, %rdx
+ 	jmp	LABEL(loop_ashr_15_use_sse4_2)
+ 
+@@ -1434,22 +1801,28 @@ LABEL(nibble_ashr_15_use_sse4_2):
+ 	movdqa	-16(%rdi, %rdx), %xmm0
+ 	psrldq	$15, %xmm0
+ 	pcmpistri      $0x3a,%xmm0, %xmm0
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	cmp	%r11, %rcx
+ 	jae	LABEL(nibble_ashr_use_sse4_2_exit)
+-#endif
++# endif
+ 	cmp	$0, %ecx
+ 	ja	LABEL(loop_ashr_15_use_sse4_2)
+ 
+ LABEL(nibble_ashr_use_sse4_2_exit):
++# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
+ 	pcmpistri      $0x1a,(%rsi,%rdx), %xmm0
++# else
++	movdqa	(%rsi,%rdx), %xmm1
++	TOLOWER (%xmm0, %xmm1)
++	pcmpistri $0x1a, %xmm1, %xmm0
++# endif
+ 	.p2align 4
+ LABEL(use_sse4_2_exit):
+ 	jnc	LABEL(strcmp_exitz_sse4_2)
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	%rcx, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)
+-#endif
++# endif
+ 	add	%rcx, %rdx
+ 	lea	-16(%rdi, %r9), %rdi
+ 	movzbl	(%rdi, %rdx), %eax
+@@ -1458,6 +1831,12 @@ LABEL(use_sse4_2_exit):
+ 	jz	LABEL(use_sse4_2_ret_sse4_2)
+ 	xchg	%eax, %edx
+ LABEL(use_sse4_2_ret_sse4_2):
++# if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L
++	leaq	_nl_C_LC_CTYPE_tolower+128*4(%rip), %rcx
++	movl	(%rcx,%rdx,4), %edx
++	movl	(%rcx,%rax,4), %eax
++# endif
++
+ 	sub	%edx, %eax
+ 	ret
+ 
+@@ -1473,13 +1852,19 @@ LABEL(ret_sse4_2):
+ LABEL(less16bytes_sse4_2):
+ 	bsf	%rdx, %rdx		/* find and store bit index in %rdx */
+ 
+-#ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	%rdx, %r11
+ 	jbe	LABEL(strcmp_exitz_sse4_2)
+-#endif
++# endif
+ 	movzbl	(%rsi, %rdx), %ecx
+ 	movzbl	(%rdi, %rdx), %eax
+ 
++# if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L
++	leaq	_nl_C_LC_CTYPE_tolower+128*4(%rip), %rdx
++	movl	(%rdx,%rcx,4), %ecx
++	movl	(%rdx,%rax,4), %eax
++# endif
++
+ 	sub	%ecx, %eax
+ 	ret
+ 
+@@ -1488,15 +1873,27 @@ LABEL(strcmp_exitz_sse4_2):
+ 	ret
+ 
+ 	.p2align 4
++	// XXX Same as code above
+ LABEL(Byte0_sse4_2):
+ 	movzx	(%rsi), %ecx
+ 	movzx	(%rdi), %eax
+ 
++# if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L
++	leaq	_nl_C_LC_CTYPE_tolower+128*4(%rip), %rdx
++	movl	(%rdx,%rcx,4), %ecx
++	movl	(%rdx,%rax,4), %eax
++# endif
++
+ 	sub	%ecx, %eax
+ 	ret
+ 	cfi_endproc
+ 	.size	STRCMP_SSE42, .-STRCMP_SSE42
+ 
++# undef UCLOW_reg
++# undef UCHIGH_reg
++# undef LCQWORD_reg
++# undef TOLOWER
++
+ 	/* Put all SSE 4.2 functions together.  */
+ 	.section .rodata.sse4.2,"a",@progbits
+ 	.p2align 3
+@@ -1528,6 +1925,27 @@ LABEL(unaligned_table_sse4_2):
+ # undef END
+ # define END(name) \
+ 	cfi_endproc; .size STRCMP_SSE2, .-STRCMP_SSE2
++
++# ifdef USE_AS_STRCASECMP_L
++#  define ENTRY2(name) \
++	.type __strcasecmp_sse2, @function; \
++	.align 16; \
++	__strcasecmp_sse2: cfi_startproc; \
++	CALL_MCOUNT
++#  define END2(name) \
++	cfi_endproc; .size __strcasecmp_sse2, .-__strcasecmp_sse2
++# endif
++
++# ifdef USE_AS_STRNCASECMP_L
++#  define ENTRY2(name) \
++	.type __strncasecmp_sse2, @function; \
++	.align 16; \
++	__strncasecmp_sse2: cfi_startproc; \
++	CALL_MCOUNT
++#  define END2(name) \
++	cfi_endproc; .size __strncasecmp_sse2, .-__strncasecmp_sse2
++# endif
++
+ # undef libc_hidden_builtin_def
+ /* It doesn't make sense to send libc-internal strcmp calls through a PLT.
+    The speedup we get from using SSE4.2 instruction is likely eaten away
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strncase_l-ssse3.S
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strncase_l-ssse3.S
+@@ -0,0 +1,6 @@
++#define USE_SSSE3 1
++#define USE_AS_STRNCASECMP_L
++#define NO_NOLOCALE_ALIAS
++#define STRCMP __strncasecmp_l_ssse3
++#define __strncasecmp __strncasecmp_ssse3
++#include "../strcmp.S"
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strncase_l.S
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strncase_l.S
+@@ -0,0 +1,6 @@
++#define STRCMP __strncasecmp_l
++#define USE_AS_STRNCASECMP_L
++#include "strcmp.S"
++
++weak_alias (__strncasecmp_l, strncasecmp_l)
++libc_hidden_def (strncasecmp_l)
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strstr.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/multiarch/strstr.c
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strstr.c
+@@ -67,10 +67,10 @@
+ 
+    case		ECX	CFlag	ZFlag	SFlag
+     3		 X	  1	  0	  0/1
+-    4a		 0  	  1	  0	  0
+-    4b		 0  	  1	  0	  1
+-    4c		0 < X  	  1	  0	  0/1
+-    5		16 	  0	  1	  0
++    4a		 0	  1	  0	  0
++    4b		 0	  1	  0	  1
++    4c		0 < X	  1	  0	  0/1
++    5		16	  0	  1	  0
+ 
+    3. An initial ordered-comparison fragment match, we fix up to do
+       subsequent string comparison
+@@ -147,8 +147,7 @@ __m128i_shift_right (__m128i value, int 
+    If EOS occurs within less than 16B before 4KB boundary, we don't
+    cross to next page.  */
+ 
+-static __m128i
+-__attribute__ ((section (".text.sse4.2")))
++static inline __m128i
+ __m128i_strloadu (const unsigned char * p)
+ {
+   int offset = ((size_t) p & (16 - 1));
+@@ -164,59 +163,36 @@ __m128i_strloadu (const unsigned char * 
+   return _mm_loadu_si128 ((__m128i *) p);
+ }
+ 
+-#ifdef USE_AS_STRCASESTR
++#if defined USE_AS_STRCASESTR && !defined STRCASESTR_NONASCII
+ 
+ /* Similar to __m128i_strloadu.  Convert to lower case for POSIX/C
+    locale.  */
+-
+-static __m128i
+-__attribute__ ((section (".text.sse4.2")))
+-__m128i_strloadu_tolower_posix (const unsigned char * p)
++static inline __m128i
++__m128i_strloadu_tolower (const unsigned char *p, __m128i rangeuc,
++			  __m128i u2ldelta)
+ {
+   __m128i frag = __m128i_strloadu (p);
+ 
+-  /* Convert frag to lower case for POSIX/C locale.  */
+-  __m128i rangeuc = _mm_set_epi64x (0x0, 0x5a41);
+-  __m128i u2ldelta = _mm_set1_epi64x (0xe0e0e0e0e0e0e0e0);
+-  __m128i mask1 = _mm_cmpistrm (rangeuc, frag, 0x44);
+-  __m128i mask2 = _mm_blendv_epi8 (u2ldelta, frag, mask1);
+-  mask2 = _mm_sub_epi8 (mask2, u2ldelta);
+-  return  _mm_blendv_epi8 (frag, mask2, mask1);
++#define UCLOW 0x4040404040404040ULL
++#define UCHIGH 0x5b5b5b5b5b5b5b5bULL
++#define LCQWORD 0x2020202020202020ULL
++  /* Compare if 'Z' > bytes. Inverted way to get a mask for byte <= 'Z'.  */
++  __m128i r2 = _mm_cmpgt_epi8 (_mm_set1_epi64x (UCHIGH), frag);
++  /* Compare if bytes are > 'A' - 1.  */
++  __m128i r1 = _mm_cmpgt_epi8 (frag, _mm_set1_epi64x (UCLOW));
++  /* Mask byte == ff if byte(r2) <= 'Z' and byte(r1) > 'A' - 1.  */
++  __m128i mask = _mm_and_si128 (r2, r1);
++  /* Apply lowercase bit 6 mask for above mask bytes == ff.  */
++  return _mm_or_si128 (frag, _mm_and_si128 (mask, _mm_set1_epi64x (LCQWORD)));
+ }
+ 
+-/* Similar to __m128i_strloadu.  Convert to lower case for none-POSIX/C
+-   locale.  */
+-
+-static __m128i
+-__attribute__ ((section (".text.sse4.2")))
+-__m128i_strloadu_tolower (const unsigned char * p)
+-{
+-  union
+-    {
+-      char b[16];
+-      __m128i x;
+-    } u;
+-
+-  for (int i = 0; i < 16; i++)
+-    if (p[i] == 0)
+-      {
+-	u.b[i] = 0;
+-	break;
+-      }
+-    else
+-      u.b[i] = tolower (p[i]);
+-
+-  return u.x;
+-}
+ #endif
+ 
+ /* Calculate Knuth-Morris-Pratt string searching algorithm (or KMP
+    algorithm) overlap for a fully populated 16B vector.
+    Input parameter: 1st 16Byte loaded from the reference string of a
+ 		    strstr function.
+-   We don't use KMP algorithm if reference string is less than 16B.
+- */
+-
++   We don't use KMP algorithm if reference string is less than 16B.  */
+ static int
+ __inline__ __attribute__ ((__always_inline__,))
+ KMP16Bovrlap (__m128i s2)
+@@ -236,7 +212,7 @@ KMP16Bovrlap (__m128i s2)
+     return 1;
+   else if (!k1)
+     {
+-      /* There are al least two ditinct char in s2.  If byte 0 and 1 are
++      /* There are al least two distinct chars in s2.  If byte 0 and 1 are
+ 	 idential and the distinct value lies farther down, we can deduce
+ 	 the next byte offset to restart full compare is least no earlier
+ 	 than byte 3.  */
+@@ -256,23 +232,30 @@ STRSTR_SSE42 (const unsigned char *s1, c
+ #define p1 s1
+   const unsigned char *p2 = s2;
+ 
+-  if (p2[0] == '\0')
++#ifndef STRCASESTR_NONASCII
++  if (__builtin_expect (p2[0] == '\0', 0))
+     return (char *) p1;
+ 
+-  if (p1[0] == '\0')
++  if (__builtin_expect (p1[0] == '\0', 0))
+     return NULL;
+ 
+   /* Check if p1 length is 1 byte long.  */
+-  if (p1[1] == '\0')
++  if (__builtin_expect (p1[1] == '\0', 0))
+     return p2[1] == '\0' && CMPBYTE (p1[0], p2[0]) ? (char *) p1 : NULL;
++#endif
+ 
+ #ifdef USE_AS_STRCASESTR
+-  __m128i (*strloadu) (const unsigned char *);
+-
+-  if (_NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_NONASCII_CASE) == 0)
+-    strloadu = __m128i_strloadu_tolower_posix;
+-  else
+-    strloadu = __m128i_strloadu_tolower;
++# ifndef STRCASESTR_NONASCII
++  if (__builtin_expect (_NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_NONASCII_CASE)
++			!= 0, 0))
++    return __strcasestr_sse42_nonascii (s1, s2);
++
++  const __m128i rangeuc = _mm_set_epi64x (0x0, 0x5a41);
++  const __m128i u2ldelta = _mm_set1_epi64x (0xe0e0e0e0e0e0e0e0);
++#  define strloadu(p) __m128i_strloadu_tolower (p, rangeuc, u2ldelta)
++# else
++#  define strloadu __m128i_strloadu_tolower
++# endif
+ #else
+ # define strloadu __m128i_strloadu
+ #endif
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strcasecmp.S
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strcasecmp.S
+@@ -0,0 +1 @@
++/* In strcasecmp_l.S.  */
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strcasecmp_l-nonascii.c
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strcasecmp_l-nonascii.c
+@@ -0,0 +1,8 @@
++#include <string.h>
++
++extern int __strcasecmp_l_nonascii (__const char *__s1, __const char *__s2,
++				    __locale_t __loc);
++
++#define __strcasecmp_l __strcasecmp_l_nonascii
++#define USE_IN_EXTENDED_LOCALE_MODEL    1
++#include <string/strcasecmp.c>
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strcasecmp_l.S
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strcasecmp_l.S
+@@ -0,0 +1,6 @@
++#define STRCMP __strcasecmp_l
++#define USE_AS_STRCASECMP_L
++#include "strcmp.S"
++
++weak_alias (__strcasecmp_l, strcasecmp_l)
++libc_hidden_def (strcasecmp_l)
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strcmp.S
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/strcmp.S
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strcmp.S
+@@ -51,6 +51,31 @@
+ 	je	LABEL(strcmp_exitz);			\
+ 	mov	%r9, %r11
+ 
++#elif defined USE_AS_STRCASECMP_L
++# include "locale-defines.h"
++
++/* No support for strcasecmp outside libc so far since it is not needed.  */
++# ifdef NOT_IN_lib
++#  error "strcasecmp_l not implemented so far"
++# endif
++
++# define UPDATE_STRNCMP_COUNTER
++#elif defined USE_AS_STRNCASECMP_L
++# include "locale-defines.h"
++
++/* No support for strncasecmp outside libc so far since it is not needed.  */
++# ifdef NOT_IN_lib
++#  error "strncasecmp_l not implemented so far"
++# endif
++
++# define UPDATE_STRNCMP_COUNTER				\
++	/* calculate left number to compare */		\
++	lea	-16(%rcx, %r11), %r9;			\
++	cmp	%r9, %r11;				\
++	jb	LABEL(strcmp_exitz);			\
++	test	%r9, %r9;				\
++	je	LABEL(strcmp_exitz);			\
++	mov	%r9, %r11
+ #else
+ # define UPDATE_STRNCMP_COUNTER
+ # ifndef STRCMP
+@@ -64,6 +89,46 @@
+ 	.section .text.ssse3,"ax",@progbits
+ #endif
+ 
++#ifdef USE_AS_STRCASECMP_L
++# ifndef ENTRY2
++#  define ENTRY2(name) ENTRY (name)
++#  define END2(name) END (name)
++# endif
++
++ENTRY2 (__strcasecmp)
++	movq	__libc_tsd_LOCALE@gottpoff(%rip),%rax
++	movq	%fs:(%rax),%rdx
++
++	// XXX 5 byte should be before the function
++	/* 5-byte NOP.  */
++	.byte	0x0f,0x1f,0x44,0x00,0x00
++END2 (__strcasecmp)
++# ifndef NO_NOLOCALE_ALIAS
++weak_alias (__strcasecmp, strcasecmp)
++libc_hidden_def (__strcasecmp)
++# endif
++	/* FALLTHROUGH to strcasecmp_l.  */
++#elif defined USE_AS_STRNCASECMP_L
++# ifndef ENTRY2
++#  define ENTRY2(name) ENTRY (name)
++#  define END2(name) END (name)
++# endif
++
++ENTRY2 (__strncasecmp)
++	movq	__libc_tsd_LOCALE@gottpoff(%rip),%rax
++	movq	%fs:(%rax),%rcx
++
++	// XXX 5 byte should be before the function
++	/* 5-byte NOP.  */
++	.byte	0x0f,0x1f,0x44,0x00,0x00
++END2 (__strncasecmp)
++# ifndef NO_NOLOCALE_ALIAS
++weak_alias (__strncasecmp, strncasecmp)
++libc_hidden_def (__strncasecmp)
++# endif
++	/* FALLTHROUGH to strncasecmp_l.  */
++#endif
++
+ ENTRY (BP_SYM (STRCMP))
+ #ifdef NOT_IN_libc
+ /* Simple version since we can't use SSE registers in ld.so.  */
+@@ -84,10 +149,32 @@ L(neq):	movl	$1, %eax
+ 	ret
+ END (BP_SYM (STRCMP))
+ #else	/* NOT_IN_libc */
++# ifdef USE_AS_STRCASECMP_L
++	/* We have to fall back on the C implementation for locales
++	   with encodings not matching ASCII for single bytes.  */
++#  if LOCALE_T___LOCALES != 0 || LC_CTYPE != 0
++	movq	LOCALE_T___LOCALES+LC_CTYPE*8(%rdx), %rax
++#  else
++	movq	(%rdx), %rax
++#  endif
++	testl	$0, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%rax)
++	jne	__strcasecmp_l_nonascii
++# elif defined USE_AS_STRNCASECMP_L
++	/* We have to fall back on the C implementation for locales
++	   with encodings not matching ASCII for single bytes.  */
++#  if LOCALE_T___LOCALES != 0 || LC_CTYPE != 0
++	movq	LOCALE_T___LOCALES+LC_CTYPE*8(%rcx), %rax
++#  else
++	movq	(%rcx), %rax
++#  endif
++	testl	$0, LOCALE_DATA_VALUES+_NL_CTYPE_NONASCII_CASE*SIZEOF_VALUES(%rax)
++	jne	__strncasecmp_l_nonascii
++# endif
++
+ /*
+  * This implementation uses SSE to compare up to 16 bytes at a time.
+  */
+-# ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	test	%rdx, %rdx
+ 	je	LABEL(strcmp_exitz)
+ 	cmp	$1, %rdx
+@@ -99,6 +186,26 @@ END (BP_SYM (STRCMP))
+ /* Use 64bit AND here to avoid long NOP padding.  */
+ 	and	$0x3f, %rcx		/* rsi alignment in cache line */
+ 	and	$0x3f, %rax		/* rdi alignment in cache line */
++# if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L
++	.section .rodata.cst16,"aM",@progbits,16
++	.align 16
++.Lbelowupper:
++	.quad	0x4040404040404040
++	.quad	0x4040404040404040
++.Ltopupper:
++	.quad	0x5b5b5b5b5b5b5b5b
++	.quad	0x5b5b5b5b5b5b5b5b
++.Ltouppermask:
++	.quad	0x2020202020202020
++	.quad	0x2020202020202020
++	.previous
++	movdqa	.Lbelowupper(%rip), %xmm5
++#  define UCLOW_reg %xmm5
++	movdqa	.Ltopupper(%rip), %xmm6
++#  define UCHIGH_reg %xmm6
++	movdqa	.Ltouppermask(%rip), %xmm7
++#  define LCQWORD_reg %xmm7
++# endif
+ 	cmp	$0x30, %ecx
+ 	ja	LABEL(crosscache)	/* rsi: 16-byte load will cross cache line */
+ 	cmp	$0x30, %eax
+@@ -107,6 +214,26 @@ END (BP_SYM (STRCMP))
+ 	movlpd	(%rsi), %xmm2
+ 	movhpd	8(%rdi), %xmm1
+ 	movhpd	8(%rsi), %xmm2
++# if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L
++#  define TOLOWER(reg1, reg2) \
++	movdqa	reg1, %xmm8;					\
++	movdqa	UCHIGH_reg, %xmm9;				\
++	movdqa	reg2, %xmm10;					\
++	movdqa	UCHIGH_reg, %xmm11;				\
++	pcmpgtb	UCLOW_reg, %xmm8;				\
++	pcmpgtb	reg1, %xmm9;					\
++	pcmpgtb	UCLOW_reg, %xmm10;				\
++	pcmpgtb	reg2, %xmm11;					\
++	pand	%xmm9, %xmm8;					\
++	pand	%xmm11, %xmm10;					\
++	pand	LCQWORD_reg, %xmm8;				\
++	pand	LCQWORD_reg, %xmm10;				\
++	por	%xmm8, reg1;					\
++	por	%xmm10, reg2
++	TOLOWER (%xmm1, %xmm2)
++# else
++#  define TOLOWER(reg1, reg2)
++# endif
+ 	pxor	%xmm0, %xmm0		/* clear %xmm0 for null char checks */
+ 	pcmpeqb	%xmm1, %xmm0		/* Any null chars? */
+ 	pcmpeqb	%xmm2, %xmm1		/* compare first 16 bytes for equality */
+@@ -114,7 +241,7 @@ END (BP_SYM (STRCMP))
+ 	pmovmskb %xmm1, %edx
+ 	sub	$0xffff, %edx		/* if first 16 bytes are same, edx == 0xffff */
+ 	jnz	LABEL(less16bytes)	/* If not, find different value or null char */
+-# ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz)	/* finish comparision */
+ # endif
+@@ -159,7 +286,13 @@ LABEL(ashr_0):
+ 	movdqa	(%rsi), %xmm1
+ 	pxor	%xmm0, %xmm0			/* clear %xmm0 for null char check */
+ 	pcmpeqb	%xmm1, %xmm0			/* Any null chars? */
++# if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
+ 	pcmpeqb	(%rdi), %xmm1			/* compare 16 bytes for equality */
++# else
++	movdqa	(%rdi), %xmm2
++	TOLOWER (%xmm1, %xmm2)
++	pcmpeqb	%xmm2, %xmm1			/* compare 16 bytes for equality */
++# endif
+ 	psubb	%xmm0, %xmm1			/* packed sub of comparison results*/
+ 	pmovmskb %xmm1, %r9d
+ 	shr	%cl, %edx			/* adjust 0xffff for offset */
+@@ -183,6 +316,7 @@ LABEL(ashr_0):
+ LABEL(loop_ashr_0):
+ 	movdqa	(%rsi, %rcx), %xmm1
+ 	movdqa	(%rdi, %rcx), %xmm2
++	TOLOWER (%xmm1, %xmm2)
+ 
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pcmpeqb	%xmm2, %xmm1
+@@ -191,13 +325,14 @@ LABEL(loop_ashr_0):
+ 	sub	$0xffff, %edx
+ 	jnz	LABEL(exit)		/* mismatch or null char seen */
+ 
+-# ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz)
+ # endif
+ 	add	$16, %rcx
+ 	movdqa	(%rsi, %rcx), %xmm1
+ 	movdqa	(%rdi, %rcx), %xmm2
++	TOLOWER (%xmm1, %xmm2)
+ 
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pcmpeqb	%xmm2, %xmm1
+@@ -205,7 +340,7 @@ LABEL(loop_ashr_0):
+ 	pmovmskb %xmm1, %edx
+ 	sub	$0xffff, %edx
+ 	jnz	LABEL(exit)
+-# ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz)
+ # endif
+@@ -214,7 +349,7 @@ LABEL(loop_ashr_0):
+ 
+ /*
+  * The following cases will be handled by ashr_1
+- * rcx(offset of rsi)  rax(offset of rdi)   relative offset   	corresponding case
++ * rcx(offset of rsi)  rax(offset of rdi)   relative offset	corresponding case
+  *        n(15)            n -15            0(15 +(n-15) - n)         ashr_1
+  */
+ 	.p2align 4
+@@ -224,6 +359,7 @@ LABEL(ashr_1):
+ 	movdqa	(%rsi), %xmm1
+ 	pcmpeqb	%xmm1, %xmm0		/* Any null chars? */
+ 	pslldq	$15, %xmm2		/* shift first string to align with second */
++	TOLOWER (%xmm1, %xmm2)
+ 	pcmpeqb	%xmm1, %xmm2		/* compare 16 bytes for equality */
+ 	psubb	%xmm0, %xmm2		/* packed sub of comparison results*/
+ 	pmovmskb %xmm2, %r9d
+@@ -263,6 +399,7 @@ LABEL(gobble_ashr_1):
+ # else
+ 	palignr	$1, %xmm3, %xmm2	/* merge into one 16byte value */
+ # endif
++	TOLOWER (%xmm1, %xmm2)
+ 
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pcmpeqb	%xmm2, %xmm1
+@@ -271,7 +408,7 @@ LABEL(gobble_ashr_1):
+ 	sub	$0xffff, %edx
+ 	jnz	LABEL(exit)
+ 
+-# ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz)
+ # endif
+@@ -292,6 +429,7 @@ LABEL(gobble_ashr_1):
+ # else
+ 	palignr	$1, %xmm3, %xmm2	/* merge into one 16byte value */
+ # endif
++	TOLOWER (%xmm1, %xmm2)
+ 
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pcmpeqb	%xmm2, %xmm1
+@@ -300,7 +438,7 @@ LABEL(gobble_ashr_1):
+ 	sub	$0xffff, %edx
+ 	jnz	LABEL(exit)
+ 
+-# ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz)
+ # endif
+@@ -319,8 +457,8 @@ LABEL(nibble_ashr_1):
+ 	test	$0xfffe, %edx
+ 	jnz	LABEL(ashr_1_exittail)	/* find null char*/
+ 
+-# ifdef USE_AS_STRNCMP
+-	cmp	$14, %r11
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
++	cmp	$15, %r11
+ 	jbe	LABEL(ashr_1_exittail)
+ # endif
+ 
+@@ -351,6 +489,7 @@ LABEL(ashr_2):
+ 	movdqa	(%rsi), %xmm1
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pslldq	$14, %xmm2
++	TOLOWER (%xmm1, %xmm2)
+ 	pcmpeqb	%xmm1, %xmm2
+ 	psubb	%xmm0, %xmm2
+ 	pmovmskb %xmm2, %r9d
+@@ -390,6 +529,7 @@ LABEL(gobble_ashr_2):
+ # else
+ 	palignr	$2, %xmm3, %xmm2	/* merge into one 16byte value */
+ # endif
++	TOLOWER (%xmm1, %xmm2)
+ 
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pcmpeqb	%xmm2, %xmm1
+@@ -398,7 +538,7 @@ LABEL(gobble_ashr_2):
+ 	sub	$0xffff, %edx
+ 	jnz	LABEL(exit)
+ 
+-# ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz)
+ # endif
+@@ -420,6 +560,7 @@ LABEL(gobble_ashr_2):
+ # else
+ 	palignr	$2, %xmm3, %xmm2	/* merge into one 16byte value */
+ # endif
++	TOLOWER (%xmm1, %xmm2)
+ 
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pcmpeqb	%xmm2, %xmm1
+@@ -428,7 +569,7 @@ LABEL(gobble_ashr_2):
+ 	sub	$0xffff, %edx
+ 	jnz	LABEL(exit)
+ 
+-# ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz)
+ # endif
+@@ -444,8 +585,8 @@ LABEL(nibble_ashr_2):
+ 	test	$0xfffc, %edx
+ 	jnz	LABEL(ashr_2_exittail)
+ 
+-# ifdef USE_AS_STRNCMP
+-	cmp	$13, %r11
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
++	cmp	$14, %r11
+ 	jbe	LABEL(ashr_2_exittail)
+ # endif
+ 
+@@ -472,6 +613,7 @@ LABEL(ashr_3):
+ 	movdqa	(%rsi), %xmm1
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pslldq	$13, %xmm2
++	TOLOWER (%xmm1, %xmm2)
+ 	pcmpeqb	%xmm1, %xmm2
+ 	psubb	%xmm0, %xmm2
+ 	pmovmskb %xmm2, %r9d
+@@ -512,6 +654,7 @@ LABEL(gobble_ashr_3):
+ # else
+ 	palignr	$3, %xmm3, %xmm2	/* merge into one 16byte value */
+ # endif
++	TOLOWER (%xmm1, %xmm2)
+ 
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pcmpeqb	%xmm2, %xmm1
+@@ -520,7 +663,7 @@ LABEL(gobble_ashr_3):
+ 	sub	$0xffff, %edx
+ 	jnz	LABEL(exit)
+ 
+-# ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz)
+ # endif
+@@ -542,6 +685,7 @@ LABEL(gobble_ashr_3):
+ # else
+ 	palignr	$3, %xmm3, %xmm2	/* merge into one 16byte value */
+ # endif
++	TOLOWER (%xmm1, %xmm2)
+ 
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pcmpeqb	%xmm2, %xmm1
+@@ -550,7 +694,7 @@ LABEL(gobble_ashr_3):
+ 	sub	$0xffff, %edx
+ 	jnz	LABEL(exit)
+ 
+-# ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz)
+ # endif
+@@ -566,8 +710,8 @@ LABEL(nibble_ashr_3):
+ 	test	$0xfff8, %edx
+ 	jnz	LABEL(ashr_3_exittail)
+ 
+-# ifdef USE_AS_STRNCMP
+-	cmp	$12, %r11
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
++	cmp	$13, %r11
+ 	jbe	LABEL(ashr_3_exittail)
+ # endif
+ 
+@@ -594,6 +738,7 @@ LABEL(ashr_4):
+ 	movdqa	(%rsi), %xmm1
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pslldq	$12, %xmm2
++	TOLOWER (%xmm1, %xmm2)
+ 	pcmpeqb	%xmm1, %xmm2
+ 	psubb	%xmm0, %xmm2
+ 	pmovmskb %xmm2, %r9d
+@@ -634,6 +779,7 @@ LABEL(gobble_ashr_4):
+ # else
+ 	palignr	$4, %xmm3, %xmm2	/* merge into one 16byte value */
+ # endif
++	TOLOWER (%xmm1, %xmm2)
+ 
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pcmpeqb	%xmm2, %xmm1
+@@ -642,7 +788,7 @@ LABEL(gobble_ashr_4):
+ 	sub	$0xffff, %edx
+ 	jnz	LABEL(exit)
+ 
+-# ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz)
+ # endif
+@@ -664,6 +810,7 @@ LABEL(gobble_ashr_4):
+ # else
+ 	palignr	$4, %xmm3, %xmm2	/* merge into one 16byte value */
+ # endif
++	TOLOWER (%xmm1, %xmm2)
+ 
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pcmpeqb	%xmm2, %xmm1
+@@ -672,7 +819,7 @@ LABEL(gobble_ashr_4):
+ 	sub	$0xffff, %edx
+ 	jnz	LABEL(exit)
+ 
+-# ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz)
+ # endif
+@@ -688,8 +835,8 @@ LABEL(nibble_ashr_4):
+ 	test	$0xfff0, %edx
+ 	jnz	LABEL(ashr_4_exittail)
+ 
+-# ifdef USE_AS_STRNCMP
+-	cmp	$11, %r11
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
++	cmp	$12, %r11
+ 	jbe	LABEL(ashr_4_exittail)
+ # endif
+ 
+@@ -716,6 +863,7 @@ LABEL(ashr_5):
+ 	movdqa	(%rsi), %xmm1
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pslldq	$11, %xmm2
++	TOLOWER (%xmm1, %xmm2)
+ 	pcmpeqb	%xmm1, %xmm2
+ 	psubb	%xmm0, %xmm2
+ 	pmovmskb %xmm2, %r9d
+@@ -756,6 +904,7 @@ LABEL(gobble_ashr_5):
+ # else
+ 	palignr	$5, %xmm3, %xmm2	/* merge into one 16byte value */
+ # endif
++	TOLOWER (%xmm1, %xmm2)
+ 
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pcmpeqb	%xmm2, %xmm1
+@@ -764,7 +913,7 @@ LABEL(gobble_ashr_5):
+ 	sub	$0xffff, %edx
+ 	jnz	LABEL(exit)
+ 
+-# ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz)
+ # endif
+@@ -786,6 +935,7 @@ LABEL(gobble_ashr_5):
+ # else
+ 	palignr	$5, %xmm3, %xmm2	/* merge into one 16byte value */
+ # endif
++	TOLOWER (%xmm1, %xmm2)
+ 
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pcmpeqb	%xmm2, %xmm1
+@@ -794,7 +944,7 @@ LABEL(gobble_ashr_5):
+ 	sub	$0xffff, %edx
+ 	jnz	LABEL(exit)
+ 
+-# ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz)
+ # endif
+@@ -810,8 +960,8 @@ LABEL(nibble_ashr_5):
+ 	test	$0xffe0, %edx
+ 	jnz	LABEL(ashr_5_exittail)
+ 
+-# ifdef USE_AS_STRNCMP
+-	cmp	$10, %r11
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
++	cmp	$11, %r11
+ 	jbe	LABEL(ashr_5_exittail)
+ # endif
+ 
+@@ -838,6 +988,7 @@ LABEL(ashr_6):
+ 	movdqa	(%rsi), %xmm1
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pslldq	$10, %xmm2
++	TOLOWER (%xmm1, %xmm2)
+ 	pcmpeqb	%xmm1, %xmm2
+ 	psubb	%xmm0, %xmm2
+ 	pmovmskb %xmm2, %r9d
+@@ -878,6 +1029,7 @@ LABEL(gobble_ashr_6):
+ # else
+ 	palignr	$6, %xmm3, %xmm2	/* merge into one 16byte value */
+ # endif
++	TOLOWER (%xmm1, %xmm2)
+ 
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pcmpeqb	%xmm2, %xmm1
+@@ -886,7 +1038,7 @@ LABEL(gobble_ashr_6):
+ 	sub	$0xffff, %edx
+ 	jnz	LABEL(exit)
+ 
+-# ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz)
+ # endif
+@@ -908,6 +1060,7 @@ LABEL(gobble_ashr_6):
+ # else
+ 	palignr	$6, %xmm3, %xmm2	/* merge into one 16byte value */
+ # endif
++	TOLOWER (%xmm1, %xmm2)
+ 
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pcmpeqb	%xmm2, %xmm1
+@@ -916,7 +1069,7 @@ LABEL(gobble_ashr_6):
+ 	sub	$0xffff, %edx
+ 	jnz	LABEL(exit)
+ 
+-# ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz)
+ # endif
+@@ -932,8 +1085,8 @@ LABEL(nibble_ashr_6):
+ 	test	$0xffc0, %edx
+ 	jnz	LABEL(ashr_6_exittail)
+ 
+-# ifdef USE_AS_STRNCMP
+-	cmp	$9, %r11
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
++	cmp	$10, %r11
+ 	jbe	LABEL(ashr_6_exittail)
+ # endif
+ 
+@@ -960,6 +1113,7 @@ LABEL(ashr_7):
+ 	movdqa	(%rsi), %xmm1
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pslldq	$9, %xmm2
++	TOLOWER (%xmm1, %xmm2)
+ 	pcmpeqb	%xmm1, %xmm2
+ 	psubb	%xmm0, %xmm2
+ 	pmovmskb %xmm2, %r9d
+@@ -1000,6 +1154,7 @@ LABEL(gobble_ashr_7):
+ # else
+ 	palignr	$7, %xmm3, %xmm2	/* merge into one 16byte value */
+ # endif
++	TOLOWER (%xmm1, %xmm2)
+ 
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pcmpeqb	%xmm2, %xmm1
+@@ -1008,7 +1163,7 @@ LABEL(gobble_ashr_7):
+ 	sub	$0xffff, %edx
+ 	jnz	LABEL(exit)
+ 
+-# ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz)
+ # endif
+@@ -1030,6 +1185,7 @@ LABEL(gobble_ashr_7):
+ # else
+ 	palignr	$7, %xmm3, %xmm2	/* merge into one 16byte value */
+ # endif
++	TOLOWER (%xmm1, %xmm2)
+ 
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pcmpeqb	%xmm2, %xmm1
+@@ -1038,7 +1194,7 @@ LABEL(gobble_ashr_7):
+ 	sub	$0xffff, %edx
+ 	jnz	LABEL(exit)
+ 
+-# ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz)
+ # endif
+@@ -1054,8 +1210,8 @@ LABEL(nibble_ashr_7):
+ 	test	$0xff80, %edx
+ 	jnz	LABEL(ashr_7_exittail)
+ 
+-# ifdef USE_AS_STRNCMP
+-	cmp	$8, %r11
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
++	cmp	$9, %r11
+ 	jbe	LABEL(ashr_7_exittail)
+ # endif
+ 
+@@ -1082,6 +1238,7 @@ LABEL(ashr_8):
+ 	movdqa	(%rsi), %xmm1
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pslldq	$8, %xmm2
++	TOLOWER (%xmm1, %xmm2)
+ 	pcmpeqb	%xmm1, %xmm2
+ 	psubb	%xmm0, %xmm2
+ 	pmovmskb %xmm2, %r9d
+@@ -1122,6 +1279,7 @@ LABEL(gobble_ashr_8):
+ # else
+ 	palignr	$8, %xmm3, %xmm2	/* merge into one 16byte value */
+ # endif
++	TOLOWER (%xmm1, %xmm2)
+ 
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pcmpeqb	%xmm2, %xmm1
+@@ -1130,7 +1288,7 @@ LABEL(gobble_ashr_8):
+ 	sub	$0xffff, %edx
+ 	jnz	LABEL(exit)
+ 
+-# ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz)
+ # endif
+@@ -1152,6 +1310,7 @@ LABEL(gobble_ashr_8):
+ # else
+ 	palignr	$8, %xmm3, %xmm2	/* merge into one 16byte value */
+ # endif
++	TOLOWER (%xmm1, %xmm2)
+ 
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pcmpeqb	%xmm2, %xmm1
+@@ -1160,7 +1319,7 @@ LABEL(gobble_ashr_8):
+ 	sub	$0xffff, %edx
+ 	jnz	LABEL(exit)
+ 
+-# ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz)
+ # endif
+@@ -1176,8 +1335,8 @@ LABEL(nibble_ashr_8):
+ 	test	$0xff00, %edx
+ 	jnz	LABEL(ashr_8_exittail)
+ 
+-# ifdef USE_AS_STRNCMP
+-	cmp	$7, %r11
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
++	cmp	$8, %r11
+ 	jbe	LABEL(ashr_8_exittail)
+ # endif
+ 
+@@ -1204,6 +1363,7 @@ LABEL(ashr_9):
+ 	movdqa	(%rsi), %xmm1
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pslldq	$7, %xmm2
++	TOLOWER (%xmm1, %xmm2)
+ 	pcmpeqb	%xmm1, %xmm2
+ 	psubb	%xmm0, %xmm2
+ 	pmovmskb %xmm2, %r9d
+@@ -1244,6 +1404,7 @@ LABEL(gobble_ashr_9):
+ # else
+ 	palignr	$9, %xmm3, %xmm2	/* merge into one 16byte value */
+ # endif
++	TOLOWER (%xmm1, %xmm2)
+ 
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pcmpeqb	%xmm2, %xmm1
+@@ -1252,7 +1413,7 @@ LABEL(gobble_ashr_9):
+ 	sub	$0xffff, %edx
+ 	jnz	LABEL(exit)
+ 
+-# ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz)
+ # endif
+@@ -1274,6 +1435,7 @@ LABEL(gobble_ashr_9):
+ # else
+ 	palignr	$9, %xmm3, %xmm2	/* merge into one 16byte value */
+ # endif
++	TOLOWER (%xmm1, %xmm2)
+ 
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pcmpeqb	%xmm2, %xmm1
+@@ -1282,7 +1444,7 @@ LABEL(gobble_ashr_9):
+ 	sub	$0xffff, %edx
+ 	jnz	LABEL(exit)
+ 
+-# ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz)
+ # endif
+@@ -1298,8 +1460,8 @@ LABEL(nibble_ashr_9):
+ 	test	$0xfe00, %edx
+ 	jnz	LABEL(ashr_9_exittail)
+ 
+-# ifdef USE_AS_STRNCMP
+-	cmp	$6, %r11
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
++	cmp	$7, %r11
+ 	jbe	LABEL(ashr_9_exittail)
+ # endif
+ 
+@@ -1326,6 +1488,7 @@ LABEL(ashr_10):
+ 	movdqa	(%rsi), %xmm1
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pslldq	$6, %xmm2
++	TOLOWER (%xmm1, %xmm2)
+ 	pcmpeqb	%xmm1, %xmm2
+ 	psubb	%xmm0, %xmm2
+ 	pmovmskb %xmm2, %r9d
+@@ -1366,6 +1529,7 @@ LABEL(gobble_ashr_10):
+ # else
+ 	palignr	$10, %xmm3, %xmm2	/* merge into one 16byte value */
+ # endif
++	TOLOWER (%xmm1, %xmm2)
+ 
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pcmpeqb	%xmm2, %xmm1
+@@ -1374,7 +1538,7 @@ LABEL(gobble_ashr_10):
+ 	sub	$0xffff, %edx
+ 	jnz	LABEL(exit)
+ 
+-# ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz)
+ # endif
+@@ -1396,6 +1560,7 @@ LABEL(gobble_ashr_10):
+ # else
+ 	palignr	$10, %xmm3, %xmm2	/* merge into one 16byte value */
+ # endif
++	TOLOWER (%xmm1, %xmm2)
+ 
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pcmpeqb	%xmm2, %xmm1
+@@ -1404,7 +1569,7 @@ LABEL(gobble_ashr_10):
+ 	sub	$0xffff, %edx
+ 	jnz	LABEL(exit)
+ 
+-# ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz)
+ # endif
+@@ -1420,8 +1585,8 @@ LABEL(nibble_ashr_10):
+ 	test	$0xfc00, %edx
+ 	jnz	LABEL(ashr_10_exittail)
+ 
+-# ifdef USE_AS_STRNCMP
+-	cmp	$5, %r11
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
++	cmp	$6, %r11
+ 	jbe	LABEL(ashr_10_exittail)
+ # endif
+ 
+@@ -1448,6 +1613,7 @@ LABEL(ashr_11):
+ 	movdqa	(%rsi), %xmm1
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pslldq	$5, %xmm2
++	TOLOWER (%xmm1, %xmm2)
+ 	pcmpeqb	%xmm1, %xmm2
+ 	psubb	%xmm0, %xmm2
+ 	pmovmskb %xmm2, %r9d
+@@ -1488,6 +1654,7 @@ LABEL(gobble_ashr_11):
+ # else
+ 	palignr	$11, %xmm3, %xmm2	/* merge into one 16byte value */
+ # endif
++	TOLOWER (%xmm1, %xmm2)
+ 
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pcmpeqb	%xmm2, %xmm1
+@@ -1496,7 +1663,7 @@ LABEL(gobble_ashr_11):
+ 	sub	$0xffff, %edx
+ 	jnz	LABEL(exit)
+ 
+-# ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz)
+ # endif
+@@ -1518,6 +1685,7 @@ LABEL(gobble_ashr_11):
+ # else
+ 	palignr	$11, %xmm3, %xmm2	/* merge into one 16byte value */
+ # endif
++	TOLOWER (%xmm1, %xmm2)
+ 
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pcmpeqb	%xmm2, %xmm1
+@@ -1526,7 +1694,7 @@ LABEL(gobble_ashr_11):
+ 	sub	$0xffff, %edx
+ 	jnz	LABEL(exit)
+ 
+-# ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz)
+ # endif
+@@ -1542,8 +1710,8 @@ LABEL(nibble_ashr_11):
+ 	test	$0xf800, %edx
+ 	jnz	LABEL(ashr_11_exittail)
+ 
+-# ifdef USE_AS_STRNCMP
+-	cmp	$4, %r11
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
++	cmp	$5, %r11
+ 	jbe	LABEL(ashr_11_exittail)
+ # endif
+ 
+@@ -1570,6 +1738,7 @@ LABEL(ashr_12):
+ 	movdqa	(%rsi), %xmm1
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pslldq	$4, %xmm2
++	TOLOWER (%xmm1, %xmm2)
+ 	pcmpeqb	%xmm1, %xmm2
+ 	psubb	%xmm0, %xmm2
+ 	pmovmskb %xmm2, %r9d
+@@ -1610,6 +1779,7 @@ LABEL(gobble_ashr_12):
+ # else
+ 	palignr	$12, %xmm3, %xmm2	/* merge into one 16byte value */
+ # endif
++	TOLOWER (%xmm1, %xmm2)
+ 
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pcmpeqb	%xmm2, %xmm1
+@@ -1618,7 +1788,7 @@ LABEL(gobble_ashr_12):
+ 	sub	$0xffff, %edx
+ 	jnz	LABEL(exit)
+ 
+-# ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz)
+ # endif
+@@ -1640,6 +1810,7 @@ LABEL(gobble_ashr_12):
+ # else
+ 	palignr	$12, %xmm3, %xmm2	/* merge into one 16byte value */
+ # endif
++	TOLOWER (%xmm1, %xmm2)
+ 
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pcmpeqb	%xmm2, %xmm1
+@@ -1648,7 +1819,7 @@ LABEL(gobble_ashr_12):
+ 	sub	$0xffff, %edx
+ 	jnz	LABEL(exit)
+ 
+-# ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz)
+ # endif
+@@ -1664,8 +1835,8 @@ LABEL(nibble_ashr_12):
+ 	test	$0xf000, %edx
+ 	jnz	LABEL(ashr_12_exittail)
+ 
+-# ifdef USE_AS_STRNCMP
+-	cmp	$3, %r11
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
++	cmp	$4, %r11
+ 	jbe	LABEL(ashr_12_exittail)
+ # endif
+ 
+@@ -1692,6 +1863,7 @@ LABEL(ashr_13):
+ 	movdqa	(%rsi), %xmm1
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pslldq	$3, %xmm2
++	TOLOWER (%xmm1, %xmm2)
+ 	pcmpeqb	%xmm1, %xmm2
+ 	psubb	%xmm0, %xmm2
+ 	pmovmskb %xmm2, %r9d
+@@ -1732,6 +1904,7 @@ LABEL(gobble_ashr_13):
+ # else
+ 	palignr	$13, %xmm3, %xmm2	/* merge into one 16byte value */
+ # endif
++	TOLOWER (%xmm1, %xmm2)
+ 
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pcmpeqb	%xmm2, %xmm1
+@@ -1740,7 +1913,7 @@ LABEL(gobble_ashr_13):
+ 	sub	$0xffff, %edx
+ 	jnz	LABEL(exit)
+ 
+-# ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz)
+ # endif
+@@ -1762,6 +1935,7 @@ LABEL(gobble_ashr_13):
+ # else
+ 	palignr	$13, %xmm3, %xmm2	/* merge into one 16byte value */
+ # endif
++	TOLOWER (%xmm1, %xmm2)
+ 
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pcmpeqb	%xmm2, %xmm1
+@@ -1770,7 +1944,7 @@ LABEL(gobble_ashr_13):
+ 	sub	$0xffff, %edx
+ 	jnz	LABEL(exit)
+ 
+-# ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz)
+ # endif
+@@ -1786,8 +1960,8 @@ LABEL(nibble_ashr_13):
+ 	test	$0xe000, %edx
+ 	jnz	LABEL(ashr_13_exittail)
+ 
+-# ifdef USE_AS_STRNCMP
+-	cmp	$2, %r11
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
++	cmp	$3, %r11
+ 	jbe	LABEL(ashr_13_exittail)
+ # endif
+ 
+@@ -1814,6 +1988,7 @@ LABEL(ashr_14):
+ 	movdqa	(%rsi), %xmm1
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pslldq  $2, %xmm2
++	TOLOWER (%xmm1, %xmm2)
+ 	pcmpeqb	%xmm1, %xmm2
+ 	psubb	%xmm0, %xmm2
+ 	pmovmskb %xmm2, %r9d
+@@ -1854,6 +2029,7 @@ LABEL(gobble_ashr_14):
+ # else
+ 	palignr	$14, %xmm3, %xmm2	/* merge into one 16byte value */
+ # endif
++	TOLOWER (%xmm1, %xmm2)
+ 
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pcmpeqb	%xmm2, %xmm1
+@@ -1862,7 +2038,7 @@ LABEL(gobble_ashr_14):
+ 	sub	$0xffff, %edx
+ 	jnz	LABEL(exit)
+ 
+-# ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz)
+ # endif
+@@ -1884,6 +2060,7 @@ LABEL(gobble_ashr_14):
+ # else
+ 	palignr	$14, %xmm3, %xmm2	/* merge into one 16byte value */
+ # endif
++	TOLOWER (%xmm1, %xmm2)
+ 
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pcmpeqb	%xmm2, %xmm1
+@@ -1892,7 +2069,7 @@ LABEL(gobble_ashr_14):
+ 	sub	$0xffff, %edx
+ 	jnz	LABEL(exit)
+ 
+-# ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP | defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz)
+ # endif
+@@ -1908,8 +2085,8 @@ LABEL(nibble_ashr_14):
+ 	test	$0xc000, %edx
+ 	jnz	LABEL(ashr_14_exittail)
+ 
+-# ifdef USE_AS_STRNCMP
+-	cmp	$1, %r11
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
++	cmp	$2, %r11
+ 	jbe	LABEL(ashr_14_exittail)
+ # endif
+ 
+@@ -1936,6 +2113,7 @@ LABEL(ashr_15):
+ 	movdqa	(%rsi), %xmm1
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pslldq	$1, %xmm2
++	TOLOWER (%xmm1, %xmm2)
+ 	pcmpeqb	%xmm1, %xmm2
+ 	psubb	%xmm0, %xmm2
+ 	pmovmskb %xmm2, %r9d
+@@ -1978,6 +2156,7 @@ LABEL(gobble_ashr_15):
+ # else
+ 	palignr	$15, %xmm3, %xmm2	/* merge into one 16byte value */
+ # endif
++	TOLOWER (%xmm1, %xmm2)
+ 
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pcmpeqb	%xmm2, %xmm1
+@@ -1986,7 +2165,7 @@ LABEL(gobble_ashr_15):
+ 	sub	$0xffff, %edx
+ 	jnz	LABEL(exit)
+ 
+-# ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz)
+ # endif
+@@ -2008,6 +2187,7 @@ LABEL(gobble_ashr_15):
+ # else
+ 	palignr	$15, %xmm3, %xmm2	/* merge into one 16byte value */
+ # endif
++	TOLOWER (%xmm1, %xmm2)
+ 
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pcmpeqb	%xmm2, %xmm1
+@@ -2016,7 +2196,7 @@ LABEL(gobble_ashr_15):
+ 	sub	$0xffff, %edx
+ 	jnz	LABEL(exit)
+ 
+-# ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	$16, %r11
+ 	jbe	LABEL(strcmp_exitz)
+ # endif
+@@ -2032,9 +2212,9 @@ LABEL(nibble_ashr_15):
+ 	test	$0x8000, %edx
+ 	jnz	LABEL(ashr_15_exittail)
+ 
+-# ifdef USE_AS_STRNCMP
+-	test	%r11, %r11
+-	je	LABEL(ashr_15_exittail)
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
++	cmpq	$1, %r11
++	jbe	LABEL(ashr_15_exittail)
+ # endif
+ 
+ 	pxor	%xmm0, %xmm0
+@@ -2049,6 +2229,7 @@ LABEL(ashr_15_exittail):
+ 
+ 	.p2align 4
+ LABEL(aftertail):
++	TOLOWER (%xmm1, %xmm3)
+ 	pcmpeqb	%xmm3, %xmm1
+ 	psubb	%xmm0, %xmm1
+ 	pmovmskb %xmm1, %edx
+@@ -2069,13 +2250,19 @@ LABEL(ret):
+ LABEL(less16bytes):
+ 	bsf	%rdx, %rdx		/* find and store bit index in %rdx */
+ 
+-# ifdef USE_AS_STRNCMP
++# if defined USE_AS_STRNCMP || defined USE_AS_STRNCASECMP_L
+ 	sub	%rdx, %r11
+ 	jbe	LABEL(strcmp_exitz)
+ # endif
+ 	movzbl	(%rsi, %rdx), %ecx
+ 	movzbl	(%rdi, %rdx), %eax
+ 
++# if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L
++	leaq	_nl_C_LC_CTYPE_tolower+128*4(%rip), %rdx
++	movl	(%rdx,%rcx,4), %ecx
++	movl	(%rdx,%rax,4), %eax
++# endif
++
+ 	sub	%ecx, %eax
+ 	ret
+ 
+@@ -2088,6 +2275,12 @@ LABEL(Byte0):
+ 	movzx	(%rsi), %ecx
+ 	movzx	(%rdi), %eax
+ 
++# if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L
++	leaq	_nl_C_LC_CTYPE_tolower+128*4(%rip), %rdx
++	movl	(%rdx,%rcx,4), %ecx
++	movl	(%rdx,%rax,4), %eax
++# endif
++
+ 	sub	%ecx, %eax
+ 	ret
+ END (BP_SYM (STRCMP))
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strncase.S
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strncase.S
+@@ -0,0 +1 @@
++/* In strncase_l.S.  */
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strncase_l-nonascii.c
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strncase_l-nonascii.c
+@@ -0,0 +1,8 @@
++#include <string.h>
++
++extern int __strncasecmp_l_nonascii (__const char *__s1, __const char *__s2,
++				     size_t __n, __locale_t __loc);
++
++#define __strncasecmp_l __strncasecmp_l_nonascii
++#define USE_IN_EXTENDED_LOCALE_MODEL    1
++#include <string/strncase.c>
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strncase_l.S
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strncase_l.S
+@@ -0,0 +1,6 @@
++#define STRCMP __strncasecmp_l
++#define USE_AS_STRNCASECMP_L
++#include "strcmp.S"
++
++weak_alias (__strncasecmp_l, strncasecmp_l)
++libc_hidden_def (strncasecmp_l)
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strnlen.S
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strnlen.S
+@@ -0,0 +1,64 @@
++/* strnlen(str,maxlen) -- determine the length of the string STR up to MAXLEN.
++   Copyright (C) 2010 Free Software Foundation, Inc.
++   Contributed by Ulrich Drepper <drepper@redhat.com>.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library 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
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++#include <sysdep.h>
++
++
++	.text
++ENTRY(__strnlen)
++	movq	%rsi, %rax
++	testq	%rsi, %rsi
++	jz	3f
++	pxor	%xmm2, %xmm2
++	movq	%rdi, %rcx
++	movq	%rdi, %r8
++	movq	$16, %r9
++	andq	$~15, %rdi
++	movdqa	%xmm2, %xmm1
++	pcmpeqb	(%rdi), %xmm2
++	orl	$0xffffffff, %r10d
++	subq	%rdi, %rcx
++	shll	%cl, %r10d
++	subq	%rcx, %r9
++	pmovmskb %xmm2, %edx
++	andl	%r10d, %edx
++	jnz	1f
++	subq	%r9, %rsi
++	jbe	3f
++
++2:	movdqa	16(%rdi), %xmm0
++	leaq	16(%rdi), %rdi
++	pcmpeqb	%xmm1, %xmm0
++	pmovmskb %xmm0, %edx
++	testl	%edx, %edx
++	jnz	1f
++	subq	$16, %rsi
++	jnbe	2b
++3:	ret
++
++1:	subq	%r8, %rdi
++	bsfl	%edx, %edx
++	addq	%rdi, %rdx
++	cmpq	%rdx, %rax
++	cmovnbq	%rdx, %rax
++	ret
++END(__strnlen)
++weak_alias (__strnlen, strnlen)
++libc_hidden_def (strnlen)
+Index: glibc-2.12-2-gc4ccff1/wcsmbs/wcsatcliff.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/wcsmbs/wcsatcliff.c
++++ glibc-2.12-2-gc4ccff1/wcsmbs/wcsatcliff.c
+@@ -16,6 +16,8 @@
+ #define MEMCPY wmemcpy
+ #define MEMPCPY wmempcpy
+ #define MEMCHR wmemchr
++#define STRCMP wcscmp
++#define STRNCMP wcsncmp
+ 
+ 
+ #include "../string/stratcliff.c"
diff --git a/SOURCES/glibc-rh607010.patch b/SOURCES/glibc-rh607010.patch
new file mode 100644
index 0000000..6952dad
--- /dev/null
+++ b/SOURCES/glibc-rh607010.patch
@@ -0,0 +1,26 @@
+2010-09-07  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* sysdeps/x86_64/cacheinfo.c (init_cacheinfo): Round cache sizes
+	up to multiple of 256 bytes.
+
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/cacheinfo.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/cacheinfo.c
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/cacheinfo.c
+@@ -661,12 +661,16 @@ init_cacheinfo (void)
+ 
+   if (data > 0)
+     {
++      /* Round data cache size up to multiple of 256 bytes.  */
++      data = (data + 255) & ~255L;
+       __x86_64_data_cache_size_half = data / 2;
+       __x86_64_data_cache_size = data;
+     }
+ 
+   if (shared > 0)
+     {
++      /* Round shared cache size up to multiple of 256 bytes.  */
++      shared = (shared + 255) & ~255L;
+       __x86_64_shared_cache_size_half = shared / 2;
+       __x86_64_shared_cache_size = shared;
+     }
diff --git a/SOURCES/glibc-rh607461.patch b/SOURCES/glibc-rh607461.patch
new file mode 100644
index 0000000..79fc72c
--- /dev/null
+++ b/SOURCES/glibc-rh607461.patch
@@ -0,0 +1,22 @@
+Index: glibc-2.12-2-gc4ccff1/nptl/allocatestack.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nptl/allocatestack.c
++++ glibc-2.12-2-gc4ccff1/nptl/allocatestack.c
+@@ -994,7 +994,16 @@ setxid_mark_thread (struct xid_command *
+ 
+       /* If the thread is exiting right now, ignore it.  */
+       if ((ch & EXITING_BITMASK) != 0)
+-	return;
++	{
++	  /* Release the futex if there is no other setxid in
++	     progress.  */
++	  if ((ch & SETXID_BITMASK) == 0)
++	    {
++	      t->setxid_futex = 1;
++	      lll_futex_wake (&t->setxid_futex, 1, LLL_PRIVATE);
++	    }
++	  return;
++	}
+     }
+   while (atomic_compare_and_exchange_bool_acq (&t->cancelhandling,
+ 					       ch | SETXID_BITMASK, ch));
diff --git a/SOURCES/glibc-rh615090.patch b/SOURCES/glibc-rh615090.patch
new file mode 100644
index 0000000..e6c00f0
--- /dev/null
+++ b/SOURCES/glibc-rh615090.patch
@@ -0,0 +1,21 @@
+2010-07-27  Andreas Schwab  <schwab@redhat.com>
+
+	* manual/memory.texi (Malloc Tunable Parameters): Document
+	M_PERTURB.
+
+Index: glibc-2.12-2-gc4ccff1/manual/memory.texi
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/manual/memory.texi
++++ glibc-2.12-2-gc4ccff1/manual/memory.texi
+@@ -702,6 +702,11 @@ be allocated via @code{mmap}.
+ @item M_MMAP_MAX
+ The maximum number of chunks to allocate with @code{mmap}.  Setting this
+ to zero disables all use of @code{mmap}.
++@item M_PERTURB
++If non-zero, memory blocks are filled with values depending on some
++low order bits of this parameter when they are allocated (except when
++allocated by @code{calloc}) and freed.  This can be used to debug the
++use of uninitialized or freed heap memory.
+ @end table
+ 
+ @end deftypefun
diff --git a/SOURCES/glibc-rh615701.patch b/SOURCES/glibc-rh615701.patch
new file mode 100644
index 0000000..283e3fe
--- /dev/null
+++ b/SOURCES/glibc-rh615701.patch
@@ -0,0 +1,23 @@
+2010-07-20  Roland McGrath  <roland@redhat.com>
+
+	* elf/dl-sysdep.c (_dl_important_hwcaps): Add dsocaps mask to
+	dl_hwcap_mask as well as dl_hwcap.  Without this, dsocaps matching in
+	ld.so.cache was broken.  With it, there is no way to disable dsocaps
+	like LD_HWCAP_MASK can disable hwcaps.
+
+Index: glibc-2.12-2-gc4ccff1/elf/dl-sysdep.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/elf/dl-sysdep.c
++++ glibc-2.12-2-gc4ccff1/elf/dl-sysdep.c
+@@ -425,6 +425,11 @@ _dl_important_hwcaps (const char *platfo
+     {
+       const ElfW(Word) mask = ((const ElfW(Word) *) dsocaps)[-1];
+       GLRO(dl_hwcap) |= (uint64_t) mask << _DL_FIRST_EXTRA;
++      /* Note that we add the dsocaps to the set already chosen by the
++	 LD_HWCAP_MASK environment variable (or default HWCAP_IMPORTANT).
++	 So there is no way to request ignoring an OS-supplied dsocap
++	 string and bit like you can ignore an OS-supplied HWCAP bit.  */
++      GLRO(dl_hwcap_mask) |= (uint64_t) mask << _DL_FIRST_EXTRA;
+       size_t len;
+       for (const char *p = dsocaps; p < dsocaps + dsocapslen; p += len + 1)
+ 	{
diff --git a/SOURCES/glibc-rh621959.patch b/SOURCES/glibc-rh621959.patch
new file mode 100644
index 0000000..315521f
--- /dev/null
+++ b/SOURCES/glibc-rh621959.patch
@@ -0,0 +1,120 @@
+2010-08-06  Ulrich Drepper  <drepper@redhat.com>
+
+	* sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid):
+	Also fail if tpwd after pwuid call is NULL.
+
+2010-06-21  Andreas Schwab <schwab@redhat.com>
+
+	* sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid):
+	Restore proper fallback handling.
+
+2010-06-19  Ulrich Drepper  <drepper@redhat.com>
+
+	* sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid): Handle
+	OOM in getpwuid_r correctly.  Return error number when the caller
+	should return, otherwise -1.
+	(getlogin_r): Adjust to return also for result of __getlogin_r_loginuid
+	call returning > 0 value.
+	* sysdeps/unix/sysv/linux/getlogin.c (getlogin): Likewise.
+
+Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/getlogin.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/getlogin.c
++++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/getlogin.c
+@@ -32,8 +32,9 @@
+ char *
+ getlogin (void)
+ {
+-  if (__getlogin_r_loginuid (name, sizeof (name)) == 0)
+-    return name;
++  int res = __getlogin_r_loginuid (name, sizeof (name));
++  if (res >= 0)
++    return res == 0 ? name : NULL;
+ 
+   return getlogin_fd0 ();
+ }
+Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/getlogin_r.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/getlogin_r.c
++++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/getlogin_r.c
+@@ -27,6 +27,10 @@ static int getlogin_r_fd0 (char *name, s
+ #undef getlogin_r
+ 
+ 
++/* Try to determine login name from /proc/self/loginuid and return 0
++   if successful.  If /proc/self/loginuid cannot be read return -1.
++   Otherwise return the error number.  */
++
+ int
+ attribute_hidden
+ __getlogin_r_loginuid (name, namesize)
+@@ -35,7 +39,7 @@ __getlogin_r_loginuid (name, namesize)
+ {
+   int fd = open_not_cancel_2 ("/proc/self/loginuid", O_RDONLY);
+   if (fd == -1)
+-    return 1;
++    return -1;
+ 
+   /* We are reading a 32-bit number.  12 bytes are enough for the text
+      representation.  If not, something is wrong.  */
+@@ -51,37 +55,38 @@ __getlogin_r_loginuid (name, namesize)
+       || (uidbuf[n] = '\0',
+ 	  uid = strtoul (uidbuf, &endp, 10),
+ 	  endp == uidbuf || *endp != '\0'))
+-    return 1;
++    return -1;
+ 
+   size_t buflen = 1024;
+   char *buf = alloca (buflen);
+   bool use_malloc = false;
+   struct passwd pwd;
+   struct passwd *tpwd;
++  int result = 0;
+   int res;
+ 
+-  while ((res = __getpwuid_r (uid, &pwd, buf, buflen, &tpwd)) != 0)
++  while ((res = __getpwuid_r (uid, &pwd, buf, buflen, &tpwd)) == ERANGE)
+     if (__libc_use_alloca (2 * buflen))
+-      extend_alloca (buf, buflen, 2 * buflen);
++      buf = extend_alloca (buf, buflen, 2 * buflen);
+     else
+       {
+ 	buflen *= 2;
+ 	char *newp = realloc (use_malloc ? buf : NULL, buflen);
+ 	if (newp == NULL)
+ 	  {
+-	  fail:
+-	    if (use_malloc)
+-	      free (buf);
+-	    return 1;
++	    result = ENOMEM;
++	    goto out;
+ 	  }
+ 	buf = newp;
+ 	use_malloc = true;
+       }
+ 
+-  if (tpwd == NULL)
+-    goto fail;
++  if (res != 0 || tpwd == NULL)
++    {
++      result = -1;
++      goto out;
++    }
+ 
+-  int result = 0;
+   size_t needed = strlen (pwd.pw_name) + 1;
+   if (needed > namesize)
+     {
+@@ -109,8 +114,9 @@ getlogin_r (name, namesize)
+      char *name;
+      size_t namesize;
+ {
+-  if (__getlogin_r_loginuid (name, namesize) == 0)
+-    return 0;
++  int res = __getlogin_r_loginuid (name, namesize);
++  if (res >= 0)
++    return res;
+ 
+   return getlogin_r_fd0 (name, namesize);
+ }
diff --git a/SOURCES/glibc-rh623187.patch b/SOURCES/glibc-rh623187.patch
new file mode 100644
index 0000000..596fdd6
--- /dev/null
+++ b/SOURCES/glibc-rh623187.patch
@@ -0,0 +1,18 @@
+2010-08-10  Dinakar Guniguntala  <dino@in.ibm.com>
+	    Stefan Hajnoczi  <stefanha@linux.vnet.ibm.com>
+
+	* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S: If
+	FUTEX_WAKE_OP fails make sure to call FUTEX_WAKE instead.
+
+Index: glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S
++++ glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S
+@@ -163,7 +163,6 @@ __pthread_cond_signal:
+ #endif
+ 	orl	$FUTEX_WAKE, %ecx
+ 
+-	xorl	$(FUTEX_WAKE ^ FUTEX_WAKE_OP), %ecx
+ 	movl	$SYS_futex, %eax
+ 	/* %edx should be 1 already from $FUTEX_WAKE_OP syscall.
+ 	movl	$1, %edx  */
diff --git a/SOURCES/glibc-rh625893.patch b/SOURCES/glibc-rh625893.patch
new file mode 100644
index 0000000..5337a42
--- /dev/null
+++ b/SOURCES/glibc-rh625893.patch
@@ -0,0 +1,79 @@
+2010-08-12  Andreas Schwab  <schwab@redhat.com>
+
+	[BZ #11904]
+	* locale/programs/locale.c (print_assignment): New function.
+	(show_locale_vars): Use it.
+
+Index: glibc-2.12-2-gc4ccff1/locale/programs/locale.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/locale/programs/locale.c
++++ glibc-2.12-2-gc4ccff1/locale/programs/locale.c
+@@ -762,6 +762,29 @@ write_charmaps (void)
+   twalk (all_data, print_names);
+ }
+ 
++/* Print a properly quoted assignment of NAME with VAL, using double
++   quotes iff DQUOTE is true.  */
++static void
++print_assignment (const char *name, const char *val, bool dquote)
++{
++  printf ("%s=", name);
++  if (dquote)
++    putchar ('"');
++  while (*val != '\0')
++    {
++      size_t segment
++	= strcspn (val, dquote ? "$`\"\\" : "~|&;<>()$`\\\"' \t\n");
++      printf ("%.*s", (int) segment, val);
++      val += segment;
++      if (*val == '\0')
++	break;
++      putchar ('\\');
++      putchar (*val++);
++    }
++  if (dquote)
++    putchar ('"');
++  putchar ('\n');
++}
+ 
+ /* We have to show the contents of the environments determining the
+    locale.  */
+@@ -769,7 +792,7 @@ static void
+ show_locale_vars (void)
+ {
+   size_t cat_no;
+-  const char *lcall = getenv ("LC_ALL");
++  const char *lcall = getenv ("LC_ALL") ? : "";
+   const char *lang = getenv ("LANG") ? : "";
+ 
+   auto void get_source (const char *name);
+@@ -778,15 +801,15 @@ show_locale_vars (void)
+     {
+       char *val = getenv (name);
+ 
+-      if ((lcall ?: "")[0] != '\0' || val == NULL)
+-	printf ("%s=\"%s\"\n", name,
+-		(lcall ?: "")[0] ? lcall : (lang ?: "")[0] ? lang : "POSIX");
++      if (lcall[0] != '\0' || val == NULL)
++	print_assignment (name, lcall[0] ? lcall : lang[0] ? lang : "POSIX",
++			  true);
+       else
+-	printf ("%s=%s\n", name, val);
++	print_assignment (name, val, false);
+     }
+ 
+   /* LANG has to be the first value.  */
+-  printf ("LANG=%s\n", lang);
++  print_assignment ("LANG", lang, false);
+ 
+   /* Now all categories in an unspecified order.  */
+   for (cat_no = 0; cat_no < NCATEGORIES; ++cat_no)
+@@ -794,7 +817,7 @@ show_locale_vars (void)
+       get_source (category[cat_no].name);
+ 
+   /* The last is the LC_ALL value.  */
+-  printf ("LC_ALL=%s\n", lcall ? : "");
++  print_assignment ("LC_ALL", lcall, false);
+ }
+ 
+ 
diff --git a/SOURCES/glibc-rh630801.patch b/SOURCES/glibc-rh630801.patch
new file mode 100644
index 0000000..5bd3c66
--- /dev/null
+++ b/SOURCES/glibc-rh630801.patch
@@ -0,0 +1,29 @@
+2010-05-26  H.J. Lu  <hongjiu.lu@intel.com>
+
+	[BZ #11640]
+	* sysdeps/x86_64/multiarch/init-arch.c (__init_cpu_features):
+	Properly check family and model.
+
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/init-arch.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/multiarch/init-arch.c
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/init-arch.c
+@@ -62,15 +62,15 @@ __init_cpu_features (void)
+       unsigned int eax = __cpu_features.cpuid[COMMON_CPUID_INDEX_1].eax;
+       unsigned int extended_family = (eax >> 20) & 0xff;
+       unsigned int extended_model = (eax >> 12) & 0xf0;
+-      if (__cpu_features.family == 0x0f)
++      if (family == 0x0f)
+ 	{
+ 	  family += extended_family;
+ 	  model += extended_model;
+ 	}
+-      else if (__cpu_features.family == 0x06)
++      else if (family == 0x06)
+ 	{
+ 	  model += extended_model;
+-	  switch (__cpu_features.model)
++	  switch (model)
+ 	    {
+ 	    case 0x1a:
+ 	    case 0x1e:
diff --git a/SOURCES/glibc-rh631011.patch b/SOURCES/glibc-rh631011.patch
new file mode 100644
index 0000000..42a1a56
--- /dev/null
+++ b/SOURCES/glibc-rh631011.patch
@@ -0,0 +1,17 @@
+2010-08-19  Andreas Schwab  <schwab@redhat.com>
+
+	* sysdeps/i386/i686/multiarch/strspn.S [!SHARED]: Fix SSE4.2 check.
+
+Index: glibc-2.12-2-gc4ccff1/sysdeps/i386/i686/multiarch/strspn.S
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/i386/i686/multiarch/strspn.S
++++ glibc-2.12-2-gc4ccff1/sysdeps/i386/i686/multiarch/strspn.S
+@@ -65,7 +65,7 @@ ENTRY(strspn)
+ 	jne	1f
+ 	call	__init_cpu_features
+ 1:	leal	__strspn_ia32, %eax
+-	testl	$index_SSE2, CPUID_OFFSET+index_SSE4_2+__cpu_features
++	testl	$bit_SSE4_2, CPUID_OFFSET+index_SSE4_2+__cpu_features
+ 	jz	2f
+ 	leal	__strspn_sse42, %eax
+ 2:	ret
diff --git a/SOURCES/glibc-rh641128.patch b/SOURCES/glibc-rh641128.patch
new file mode 100644
index 0000000..52df4ae
--- /dev/null
+++ b/SOURCES/glibc-rh641128.patch
@@ -0,0 +1,78 @@
+2010-10-06  Ulrich Drepper  <drepper@gmail.com>
+
+	* string/bug-strstr1.c: New file.
+	* string/Makefile: Add rules to build and run bug-strstr1.
+
+2010-10-05  Eric Blake  <eblake@redhat.com>
+
+	[BZ #12092]
+	* string/str-two-way.h (two_way_long_needle): Always clear memory
+	when skipping input due to the shift table.
+
+Index: glibc-2.12-2-gc4ccff1/string/Makefile
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/string/Makefile
++++ glibc-2.12-2-gc4ccff1/string/Makefile
+@@ -54,7 +54,8 @@ tests		:= tester inl-tester noinl-tester
+ 		   bug-strncat1 bug-strspn1 bug-strpbrk1 tst-bswap	\
+ 		   tst-strtok tst-strxfrm bug-strcoll1 tst-strfry	\
+ 		   bug-strtok1 $(addprefix test-,$(strop-tests))	\
+-		   bug-envz1 tst-strxfrm2 tst-endian tst-svc2
++		   bug-envz1 tst-strxfrm2 tst-endian tst-svc2		\
++		   bug-strstr1
+ distribute	:= memcopy.h pagecopy.h tst-svc.expect test-string.h	\
+ 		   str-two-way.h
+ 
+@@ -73,6 +74,7 @@ CFLAGS-tst-strlen.c = -fno-builtin
+ CFLAGS-stratcliff.c = -fno-builtin
+ CFLAGS-test-ffs.c = -fno-builtin
+ CFLAGS-tst-inlcall.c = -fno-builtin
++CFLAGS-bug-strstr1.c = -fno-builtin
+ 
+ ifeq ($(cross-compiling),no)
+ tests: $(objpfx)tst-svc.out
+Index: glibc-2.12-2-gc4ccff1/string/bug-strstr1.c
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/string/bug-strstr1.c
+@@ -0,0 +1,26 @@
++#include <stdio.h>
++#include <string.h>
++
++int main (int argc, char** argv)
++{
++  const char haystack[] =
++    "F_BD_CE_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD_C3_88_20_EF_BF_BD_EF_BF_BD_EF_BF_BD_C3_A7_20_EF_BF_BD";
++
++  const char needle[] =
++    "_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD";
++
++  const char* sub = strstr (haystack, needle);
++
++  if (sub != NULL)
++    {
++      int j;
++
++      fprintf (stderr, "BUG: expected NULL, got:\n%s\n%s\n", sub, needle);
++      for (j = 0; needle[j] != '\0'; ++j)
++        putchar (needle[j] == sub[j] ? ' ' : '^');
++      puts ("");
++      return 1;
++    }
++
++  return 0;
++}
+Index: glibc-2.12-2-gc4ccff1/string/str-two-way.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/string/str-two-way.h
++++ glibc-2.12-2-gc4ccff1/string/str-two-way.h
+@@ -350,8 +350,8 @@ two_way_long_needle (const unsigned char
+ 		     a byte out of place, there can be no match until
+ 		     after the mismatch.  */
+ 		  shift = needle_len - period;
+-		  memory = 0;
+ 		}
++	      memory = 0;
+ 	      j += shift;
+ 	      continue;
+ 	    }
diff --git a/SOURCES/glibc-rh642584.patch b/SOURCES/glibc-rh642584.patch
new file mode 100644
index 0000000..7fd390d
--- /dev/null
+++ b/SOURCES/glibc-rh642584.patch
@@ -0,0 +1,41 @@
+2010-10-13  H.J. Lu  <hongjiu.lu@intel.com>
+
+	[BZ #12113]
+	* sysdeps/x86_64/pthreaddef.h (TCB_ALIGNMENT): Changed to 32.
+	* sysdeps/x86_64/tls.h (TLS_TCB_ALIGN): Defined with alignment
+	of "struct pthread".
+
+Index: glibc-2.12-2-gc4ccff1/nptl/sysdeps/x86_64/pthreaddef.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nptl/sysdeps/x86_64/pthreaddef.h
++++ glibc-2.12-2-gc4ccff1/nptl/sysdeps/x86_64/pthreaddef.h
+@@ -27,8 +27,9 @@
+ /* Minimal stack size after allocating thread descriptor and guard size.  */
+ #define MINIMAL_REST_STACK	2048
+ 
+-/* Alignment requirement for TCB.  */
+-#define TCB_ALIGNMENT		16
++/* Alignment requirement for TCB.  Need to store post-AVX vector registers
++   in the TCB and we want the storage to be aligned at 32-byte.  */
++#define TCB_ALIGNMENT		32
+ 
+ 
+ /* Location of current stack frame.  The frame pointer is not usable.  */
+Index: glibc-2.12-2-gc4ccff1/nptl/sysdeps/x86_64/tls.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nptl/sysdeps/x86_64/tls.h
++++ glibc-2.12-2-gc4ccff1/nptl/sysdeps/x86_64/tls.h
+@@ -117,12 +117,7 @@ typedef struct
+ # define TLS_TCB_SIZE sizeof (struct pthread)
+ 
+ /* Alignment requirements for the TCB.  */
+-//# define TLS_TCB_ALIGN __alignof__ (struct pthread)
+-// Normally the above would be correct  But we have to store post-AVX
+-// vector registers in the TCB and we want the storage to be aligned.
+-// unfortunately there isn't yet a type for these values and hence no
+-// 32-byte alignment requirement.  Make this explicit, for now.
+-# define TLS_TCB_ALIGN 32
++# define TLS_TCB_ALIGN __alignof__ (struct pthread)
+ 
+ /* The TCB can have any size and the memory following the address the
+    thread pointer points to is unspecified.  Allocate the TCB there.  */
diff --git a/SOURCES/glibc-rh643822.patch b/SOURCES/glibc-rh643822.patch
new file mode 100644
index 0000000..c32c1fe
--- /dev/null
+++ b/SOURCES/glibc-rh643822.patch
@@ -0,0 +1,64 @@
+2010-12-09  Andreas Schwab  <schwab@redhat.com>
+
+	* elf/dl-object.c (_dl_new_object): Ignore origin of privileged
+	program.
+
+2010-10-18  Andreas Schwab  <schwab@redhat.com>
+
+	* elf/dl-open.c (dl_open_worker): Don't expand DST here, let
+	_dl_map_object do it.
+
+Index: glibc-2.12-2-gc4ccff1/elf/dl-object.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/elf/dl-object.c
++++ glibc-2.12-2-gc4ccff1/elf/dl-object.c
+@@ -214,6 +214,9 @@ _dl_new_object (char *realname, const ch
+     out:
+       new->l_origin = origin;
+     }
++  else if (INTUSE(__libc_enable_secure) && type == lt_executable)
++    /* The origin of a privileged program cannot be trusted.  */
++    new->l_origin = (char *) -1;
+ 
+   return new;
+ }
+Index: glibc-2.12-2-gc4ccff1/elf/dl-open.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/elf/dl-open.c
++++ glibc-2.12-2-gc4ccff1/elf/dl-open.c
+@@ -221,35 +221,6 @@ dl_open_worker (void *a)
+ 
+   assert (_dl_debug_initialize (0, args->nsid)->r_state == RT_CONSISTENT);
+ 
+-  /* Maybe we have to expand a DST.  */
+-  if (__builtin_expect (dst != NULL, 0))
+-    {
+-      size_t len = strlen (file);
+-
+-      /* Determine how much space we need.  We have to allocate the
+-	 memory locally.  */
+-      size_t required = DL_DST_REQUIRED (call_map, file, len,
+-					 _dl_dst_count (dst, 0));
+-
+-      /* Get space for the new file name.  */
+-      char *new_file = (char *) alloca (required + 1);
+-
+-      /* Generate the new file name.  */
+-      _dl_dst_substitute (call_map, file, new_file, 0);
+-
+-      /* If the substitution failed don't try to load.  */
+-      if (*new_file == '\0')
+-	_dl_signal_error (0, "dlopen", NULL,
+-			  N_("empty dynamic string token substitution"));
+-
+-      /* Now we have a new file name.  */
+-      file = new_file;
+-
+-      /* It does not matter whether call_map is set even if we
+-	 computed it only because of the DST.  Since the path contains
+-	 a slash the value is not used.  See dl-load.c.  */
+-    }
+-
+   /* Load the named object.  */
+   struct link_map *new;
+   args->map = new = _dl_map_object (call_map, file, 0, lt_loaded, 0,
diff --git a/SOURCES/glibc-rh645672.patch b/SOURCES/glibc-rh645672.patch
new file mode 100644
index 0000000..644614e
--- /dev/null
+++ b/SOURCES/glibc-rh645672.patch
@@ -0,0 +1,215 @@
+2010-10-22  Andreas Schwab  <schwab@redhat.com>
+
+	* include/dlfcn.h (__RTLD_SECURE): Define.
+	* elf/dl-load.c (_dl_map_object): Remove preloaded parameter.  Use
+	mode & __RTLD_SECURE instead.
+	(open_path): Remove preloaded parameter to secure.
+	* sysdeps/generic/ldsodefs.h (_dl_map_object): Adjust declaration.
+	* elf/dl-open.c (dl_open_worker): Adjust call to _dl_map_object.
+	* elf/dl-deps.c (openaux): Likewise.
+	* elf/rtld.c (struct map_args): Remove is_preloaded.
+	(map_doit): Don't use it.
+	(dl_main): Likewise.
+	(do_preload): Use __RTLD_SECURE instead of is_preloaded.
+	(dlmopen_doit): Add __RTLD_SECURE to mode bits.
+
+Index: glibc-2.12-2-gc4ccff1/elf/dl-deps.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/elf/dl-deps.c
++++ glibc-2.12-2-gc4ccff1/elf/dl-deps.c
+@@ -62,7 +62,7 @@ openaux (void *a)
+ {
+   struct openaux_args *args = (struct openaux_args *) a;
+ 
+-  args->aux = _dl_map_object (args->map, args->name, 0,
++  args->aux = _dl_map_object (args->map, args->name,
+ 			      (args->map->l_type == lt_executable
+ 			       ? lt_library : args->map->l_type),
+ 			      args->trace_mode, args->open_mode,
+Index: glibc-2.12-2-gc4ccff1/elf/dl-load.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/elf/dl-load.c
++++ glibc-2.12-2-gc4ccff1/elf/dl-load.c
+@@ -1811,7 +1811,7 @@ open_verify (const char *name, struct fi
+    if MAY_FREE_DIRS is true.  */
+ 
+ static int
+-open_path (const char *name, size_t namelen, int preloaded,
++open_path (const char *name, size_t namelen, int secure,
+ 	   struct r_search_path_struct *sps, char **realname,
+ 	   struct filebuf *fbp, struct link_map *loader, int whatcode,
+ 	   bool *found_other_class)
+@@ -1893,7 +1893,7 @@ open_path (const char *name, size_t name
+ 	  /* Remember whether we found any existing directory.  */
+ 	  here_any |= this_dir->status[cnt] != nonexisting;
+ 
+-	  if (fd != -1 && __builtin_expect (preloaded, 0)
++	  if (fd != -1 && __builtin_expect (secure, 0)
+ 	      && INTUSE(__libc_enable_secure))
+ 	    {
+ 	      /* This is an extra security effort to make sure nobody can
+@@ -1962,7 +1962,7 @@ open_path (const char *name, size_t name
+ 
+ struct link_map *
+ internal_function
+-_dl_map_object (struct link_map *loader, const char *name, int preloaded,
++_dl_map_object (struct link_map *loader, const char *name,
+ 		int type, int trace_mode, int mode, Lmid_t nsid)
+ {
+   int fd;
+@@ -2066,7 +2066,8 @@ _dl_map_object (struct link_map *loader,
+ 	  for (l = loader; l; l = l->l_loader)
+ 	    if (cache_rpath (l, &l->l_rpath_dirs, DT_RPATH, "RPATH"))
+ 	      {
+-		fd = open_path (name, namelen, preloaded, &l->l_rpath_dirs,
++		fd = open_path (name, namelen, mode & __RTLD_SECURE,
++				&l->l_rpath_dirs,
+ 				&realname, &fb, loader, LA_SER_RUNPATH,
+ 				&found_other_class);
+ 		if (fd != -1)
+@@ -2081,14 +2082,15 @@ _dl_map_object (struct link_map *loader,
+ 	      && main_map != NULL && main_map->l_type != lt_loaded
+ 	      && cache_rpath (main_map, &main_map->l_rpath_dirs, DT_RPATH,
+ 			      "RPATH"))
+-	    fd = open_path (name, namelen, preloaded, &main_map->l_rpath_dirs,
++	    fd = open_path (name, namelen, mode & __RTLD_SECURE,
++			    &main_map->l_rpath_dirs,
+ 			    &realname, &fb, loader ?: main_map, LA_SER_RUNPATH,
+ 			    &found_other_class);
+ 	}
+ 
+       /* Try the LD_LIBRARY_PATH environment variable.  */
+       if (fd == -1 && env_path_list.dirs != (void *) -1)
+-	fd = open_path (name, namelen, preloaded, &env_path_list,
++	fd = open_path (name, namelen, mode & __RTLD_SECURE, &env_path_list,
+ 			&realname, &fb,
+ 			loader ?: GL(dl_ns)[LM_ID_BASE]._ns_loaded,
+ 			LA_SER_LIBPATH, &found_other_class);
+@@ -2097,12 +2099,12 @@ _dl_map_object (struct link_map *loader,
+       if (fd == -1 && loader != NULL
+ 	  && cache_rpath (loader, &loader->l_runpath_dirs,
+ 			  DT_RUNPATH, "RUNPATH"))
+-	fd = open_path (name, namelen, preloaded,
++	fd = open_path (name, namelen, mode & __RTLD_SECURE,
+ 			&loader->l_runpath_dirs, &realname, &fb, loader,
+ 			LA_SER_RUNPATH, &found_other_class);
+ 
+       if (fd == -1
+-	  && (__builtin_expect (! preloaded, 1)
++	  && (__builtin_expect (! (mode & __RTLD_SECURE), 1)
+ 	      || ! INTUSE(__libc_enable_secure)))
+ 	{
+ 	  /* Check the list of libraries in the file /etc/ld.so.cache,
+@@ -2168,7 +2170,7 @@ _dl_map_object (struct link_map *loader,
+ 	  && ((l = loader ?: GL(dl_ns)[nsid]._ns_loaded) == NULL
+ 	      || __builtin_expect (!(l->l_flags_1 & DF_1_NODEFLIB), 1))
+ 	  && rtld_search_dirs.dirs != (void *) -1)
+-	fd = open_path (name, namelen, preloaded, &rtld_search_dirs,
++	fd = open_path (name, namelen, mode & __RTLD_SECURE, &rtld_search_dirs,
+ 			&realname, &fb, l, LA_SER_DEFAULT, &found_other_class);
+ 
+       /* Add another newline when we are tracing the library loading.  */
+Index: glibc-2.12-2-gc4ccff1/elf/dl-open.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/elf/dl-open.c
++++ glibc-2.12-2-gc4ccff1/elf/dl-open.c
+@@ -252,7 +252,7 @@ dl_open_worker (void *a)
+ 
+   /* Load the named object.  */
+   struct link_map *new;
+-  args->map = new = _dl_map_object (call_map, file, 0, lt_loaded, 0,
++  args->map = new = _dl_map_object (call_map, file, lt_loaded, 0,
+ 				    mode | __RTLD_CALLMAP, args->nsid);
+ 
+   /* If the pointer returned is NULL this means the RTLD_NOLOAD flag is
+Index: glibc-2.12-2-gc4ccff1/elf/rtld.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/elf/rtld.c
++++ glibc-2.12-2-gc4ccff1/elf/rtld.c
+@@ -589,7 +589,6 @@ struct map_args
+   /* Argument to map_doit.  */
+   char *str;
+   struct link_map *loader;
+-  int is_preloaded;
+   int mode;
+   /* Return value of map_doit.  */
+   struct link_map *map;
+@@ -627,16 +626,17 @@ static void
+ map_doit (void *a)
+ {
+   struct map_args *args = (struct map_args *) a;
+-  args->map = _dl_map_object (args->loader, args->str,
+-			      args->is_preloaded, lt_library, 0, args->mode,
+-			      LM_ID_BASE);
++  args->map = _dl_map_object (args->loader, args->str, lt_library, 0,
++			      args->mode, LM_ID_BASE);
+ }
+ 
+ static void
+ dlmopen_doit (void *a)
+ {
+   struct dlmopen_args *args = (struct dlmopen_args *) a;
+-  args->map = _dl_open (args->fname, RTLD_LAZY | __RTLD_DLOPEN | __RTLD_AUDIT,
++  args->map = _dl_open (args->fname,
++			(RTLD_LAZY | __RTLD_DLOPEN | __RTLD_AUDIT
++			 | __RTLD_SECURE),
+ 			dl_main, LM_ID_NEWLM, _dl_argc, INTUSE(_dl_argv),
+ 			__environ);
+ }
+@@ -806,8 +806,7 @@ do_preload (char *fname, struct link_map
+ 
+   args.str = fname;
+   args.loader = main_map;
+-  args.is_preloaded = 1;
+-  args.mode = 0;
++  args.mode = __RTLD_SECURE;
+ 
+   unsigned int old_nloaded = GL(dl_ns)[LM_ID_BASE]._ns_nloaded;
+ 
+@@ -1054,7 +1053,6 @@ of this helper program; chances are you 
+ 
+ 	  args.str = rtld_progname;
+ 	  args.loader = NULL;
+-	  args.is_preloaded = 0;
+ 	  args.mode = __RTLD_OPENEXEC;
+ 	  (void) _dl_catch_error (&objname, &err_str, &malloced, map_doit,
+ 				  &args);
+@@ -1066,7 +1064,7 @@ of this helper program; chances are you 
+       else
+ 	{
+ 	  HP_TIMING_NOW (start);
+-	  _dl_map_object (NULL, rtld_progname, 0, lt_library, 0,
++	  _dl_map_object (NULL, rtld_progname, lt_library, 0,
+ 			  __RTLD_OPENEXEC, LM_ID_BASE);
+ 	  HP_TIMING_NOW (stop);
+ 
+Index: glibc-2.12-2-gc4ccff1/include/dlfcn.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/include/dlfcn.h
++++ glibc-2.12-2-gc4ccff1/include/dlfcn.h
+@@ -9,6 +9,7 @@
+ #define __RTLD_OPENEXEC	0x20000000
+ #define __RTLD_CALLMAP	0x10000000
+ #define __RTLD_AUDIT	0x08000000
++#define __RTLD_SECURE	0x04000000 /* Apply additional security checks.  */
+ 
+ #define __LM_ID_CALLER	-2
+ 
+Index: glibc-2.12-2-gc4ccff1/sysdeps/generic/ldsodefs.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/generic/ldsodefs.h
++++ glibc-2.12-2-gc4ccff1/sysdeps/generic/ldsodefs.h
+@@ -824,11 +824,9 @@ extern void _dl_receive_error (receiver_
+ 
+ /* Open the shared object NAME and map in its segments.
+    LOADER's DT_RPATH is used in searching for NAME.
+-   If the object is already opened, returns its existing map.
+-   For preloaded shared objects PRELOADED is set to a non-zero
+-   value to allow additional security checks.  */
++   If the object is already opened, returns its existing map.  */
+ extern struct link_map *_dl_map_object (struct link_map *loader,
+-					const char *name, int preloaded,
++					const char *name,
+ 					int type, int trace_mode, int mode,
+ 					Lmid_t nsid)
+      internal_function attribute_hidden;
diff --git a/SOURCES/glibc-rh646954.patch b/SOURCES/glibc-rh646954.patch
new file mode 100644
index 0000000..bbb959e
--- /dev/null
+++ b/SOURCES/glibc-rh646954.patch
@@ -0,0 +1,216 @@
+2010-10-26  Ulrich Drepper  <drepper@gmail.com>
+
+	* elf/rtld.c (dl_main): Move assertion after the point where rtld map
+	is added to the list.
+
+2010-10-20  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
+	    Ulrich Drepper  <drepper@gmail.com>
+
+	* elf/dl-object.c (_dl_new_object): Don't append the new object to
+	the global list here.  Move code to...
+	(_dl_add_to_namespace_list): ...here.  New function.
+	* elf/rtld.c (dl_main): Invoke _dl_add_to_namespace_list.
+	* sysdeps/generic/ldsodefs.h (_dl_add_to_namespace_list): Declare.
+	* elf/dl-load.c (lose): Don't remove the element from the list.
+	(_dl_map_object_from_fd): Invoke _dl_add_to_namespace_list.
+	(_dl_map_object): Likewise.
+
+Index: glibc-2.12-2-gc4ccff1/elf/dl-load.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/elf/dl-load.c
++++ glibc-2.12-2-gc4ccff1/elf/dl-load.c
+@@ -797,22 +797,7 @@ lose (int code, int fd, const char *name
+   /* The file might already be closed.  */
+   if (fd != -1)
+     (void) __close (fd);
+-  if (l != NULL)
+-    {
+-      /* We modify the list of loaded objects.  */
+-      __rtld_lock_lock_recursive (GL(dl_load_write_lock));
+-      /* Remove the stillborn object from the list and free it.  */
+-      assert (l->l_next == NULL);
+-      if (l->l_prev == NULL)
+-	/* No other module loaded. This happens only in the static library,
+-	   or in rtld under --verify.  */
+-	GL(dl_ns)[l->l_ns]._ns_loaded = NULL;
+-      else
+-	l->l_prev->l_next = NULL;
+-      --GL(dl_ns)[l->l_ns]._ns_nloaded;
+-      free (l);
+-      __rtld_lock_unlock_recursive (GL(dl_load_write_lock));
+-    }
++  free (l);
+   free (realname);
+ 
+   if (r != NULL)
+@@ -897,6 +882,9 @@ _dl_map_object_from_fd (const char *name
+ 	 never be unloaded.  */
+       __close (fd);
+ 
++      /* Add the map for the mirrored object to the object list.  */
++      _dl_add_to_namespace_list (l, nsid);
++
+       return l;
+     }
+ #endif
+@@ -1491,6 +1479,9 @@ cannot enable executable stack as shared
+     add_name_to_object (l, ((const char *) D_PTR (l, l_info[DT_STRTAB])
+ 			    + l->l_info[DT_SONAME]->d_un.d_val));
+ 
++  /* Now that the object is fully initialized add it to the object list.  */
++  _dl_add_to_namespace_list (l, nsid);
++
+ #ifdef SHARED
+   /* Auditing checkpoint: we have a new object.  */
+   if (__builtin_expect (GLRO(dl_naudit) > 0, 0)
+@@ -2215,7 +2206,7 @@ _dl_map_object (struct link_map *loader,
+ 	     have.  */
+ 	  static const Elf_Symndx dummy_bucket = STN_UNDEF;
+ 
+-	  /* Enter the new object in the list of loaded objects.  */
++	  /* Allocate a new object map.  */
+ 	  if ((name_copy = local_strdup (name)) == NULL
+ 	      || (l = _dl_new_object (name_copy, name, type, loader,
+ 				      mode, nsid)) == NULL)
+@@ -2233,6 +2224,9 @@ _dl_map_object (struct link_map *loader,
+ 	  l->l_nbuckets = 1;
+ 	  l->l_relocated = 1;
+ 
++	  /* Enter the object in the object list.  */
++	  _dl_add_to_namespace_list (l, nsid);
++
+ 	  return l;
+ 	}
+       else if (found_other_class)
+Index: glibc-2.12-2-gc4ccff1/elf/dl-object.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/elf/dl-object.c
++++ glibc-2.12-2-gc4ccff1/elf/dl-object.c
+@@ -26,16 +26,41 @@
+ #include <assert.h>
+ 
+ 
++/* Add the new link_map NEW to the end of the namespace list.  */
++void
++internal_function
++_dl_add_to_namespace_list (struct link_map *new, Lmid_t nsid)
++{
++  /* We modify the list of loaded objects.  */
++  __rtld_lock_lock_recursive (GL(dl_load_write_lock));
++
++  if (GL(dl_ns)[nsid]._ns_loaded != NULL)
++    {
++      struct link_map *l = GL(dl_ns)[nsid]._ns_loaded;
++      while (l->l_next != NULL)
++	l = l->l_next;
++      new->l_prev = l;
++      /* new->l_next = NULL;   Would be necessary but we use calloc.  */
++      l->l_next = new;
++    }
++  else
++    GL(dl_ns)[nsid]._ns_loaded = new;
++  ++GL(dl_ns)[nsid]._ns_nloaded;
++  new->l_serial = GL(dl_load_adds);
++  ++GL(dl_load_adds);
++
++  __rtld_lock_unlock_recursive (GL(dl_load_write_lock));
++}
++
++
+ /* Allocate a `struct link_map' for a new object being loaded,
+    and enter it into the _dl_loaded list.  */
+-
+ struct link_map *
+ internal_function
+ _dl_new_object (char *realname, const char *libname, int type,
+ 		struct link_map *loader, int mode, Lmid_t nsid)
+ {
+   struct link_map *l;
+-  int idx;
+   size_t libname_len = strlen (libname) + 1;
+   struct link_map *new;
+   struct libname_list *newname;
+@@ -93,31 +118,12 @@ _dl_new_object (char *realname, const ch
+   new->l_scope = new->l_scope_mem;
+   new->l_scope_max = sizeof (new->l_scope_mem) / sizeof (new->l_scope_mem[0]);
+ 
+-  /* We modify the list of loaded objects.  */
+-  __rtld_lock_lock_recursive (GL(dl_load_write_lock));
+-
+   /* Counter for the scopes we have to handle.  */
+-  idx = 0;
++  int idx = 0;
+ 
+   if (GL(dl_ns)[nsid]._ns_loaded != NULL)
+-    {
+-      l = GL(dl_ns)[nsid]._ns_loaded;
+-      while (l->l_next != NULL)
+-	l = l->l_next;
+-      new->l_prev = l;
+-      /* new->l_next = NULL;	Would be necessary but we use calloc.  */
+-      l->l_next = new;
+-
+-      /* Add the global scope.  */
+-      new->l_scope[idx++] = &GL(dl_ns)[nsid]._ns_loaded->l_searchlist;
+-    }
+-  else
+-    GL(dl_ns)[nsid]._ns_loaded = new;
+-  ++GL(dl_ns)[nsid]._ns_nloaded;
+-  new->l_serial = GL(dl_load_adds);
+-  ++GL(dl_load_adds);
+-
+-  __rtld_lock_unlock_recursive (GL(dl_load_write_lock));
++    /* Add the global scope.  */
++    new->l_scope[idx++] = &GL(dl_ns)[nsid]._ns_loaded->l_searchlist;
+ 
+   /* If we have no loader the new object acts as it.  */
+   if (loader == NULL)
+Index: glibc-2.12-2-gc4ccff1/elf/rtld.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/elf/rtld.c
++++ glibc-2.12-2-gc4ccff1/elf/rtld.c
+@@ -1108,11 +1108,15 @@ of this helper program; chances are you 
+       main_map = _dl_new_object ((char *) "", "", lt_executable, NULL,
+ 				 __RTLD_OPENEXEC, LM_ID_BASE);
+       assert (main_map != NULL);
+-      assert (main_map == GL(dl_ns)[LM_ID_BASE]._ns_loaded);
+       main_map->l_phdr = phdr;
+       main_map->l_phnum = phnum;
+       main_map->l_entry = *user_entry;
+ 
++      /* Even though the link map is not yet fully initialized we can add
++	 it to the map list since there are no possible users running yet.  */
++      _dl_add_to_namespace_list (main_map, LM_ID_BASE);
++      assert (main_map == GL(dl_ns)[LM_ID_BASE]._ns_loaded);
++
+       /* At this point we are in a bit of trouble.  We would have to
+ 	 fill in the values for l_dev and l_ino.  But in general we
+ 	 do not know where the file is.  We also do not handle AT_EXECFD
+@@ -1380,6 +1384,9 @@ of this helper program; chances are you 
+ 	      l->l_libname->name = memcpy (copy, dsoname, len);
+ 	    }
+ 
++	  /* Add the vDSO to the object list.  */
++	  _dl_add_to_namespace_list (l, LM_ID_BASE);
++
+ 	  /* Rearrange the list so this DSO appears after rtld_map.  */
+ 	  assert (l->l_next == NULL);
+ 	  assert (l->l_prev == main_map);
+Index: glibc-2.12-2-gc4ccff1/sysdeps/generic/ldsodefs.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/generic/ldsodefs.h
++++ glibc-2.12-2-gc4ccff1/sysdeps/generic/ldsodefs.h
+@@ -891,8 +891,11 @@ extern lookup_t _dl_lookup_symbol_x (con
+ extern ElfW(Addr) _dl_symbol_value (struct link_map *map, const char *name)
+      internal_function;
+ 
+-/* Allocate a `struct link_map' for a new object being loaded,
+-   and enter it into the _dl_main_map list.  */
++/* Add the new link_map NEW to the end of the namespace list.  */
++extern void _dl_add_to_namespace_list (struct link_map *new, Lmid_t nsid)
++     internal_function attribute_hidden;
++
++/* Allocate a `struct link_map' for a new object being loaded.  */
+ extern struct link_map *_dl_new_object (char *realname, const char *libname,
+ 					int type, struct link_map *loader,
+ 					int mode, Lmid_t nsid)
diff --git a/SOURCES/glibc-rh647448.patch b/SOURCES/glibc-rh647448.patch
new file mode 100644
index 0000000..ff55945
--- /dev/null
+++ b/SOURCES/glibc-rh647448.patch
@@ -0,0 +1,58 @@
+2010-10-25  Ulrich Drepper  <drepper@redhat.com>
+
+	[BZ #12159]
+	* sysdeps/x86_64/multiarch/strchr.S: Fix propagation of search byte
+	into all bytes of SSE register.
+	Patch by Richard Li <richardpku@gmail.com>.
+
+Index: glibc-2.12-2-gc4ccff1/string/Makefile
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/string/Makefile
++++ glibc-2.12-2-gc4ccff1/string/Makefile
+@@ -55,7 +55,7 @@ tests		:= tester inl-tester noinl-tester
+ 		   tst-strtok tst-strxfrm bug-strcoll1 tst-strfry	\
+ 		   bug-strtok1 $(addprefix test-,$(strop-tests))	\
+ 		   bug-envz1 tst-strxfrm2 tst-endian tst-svc2		\
+-		   bug-strstr1
++		   bug-strstr1 bug-strchr1
+ distribute	:= memcopy.h pagecopy.h tst-svc.expect test-string.h	\
+ 		   str-two-way.h
+ 
+Index: glibc-2.12-2-gc4ccff1/string/bug-strchr1.c
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/string/bug-strchr1.c
+@@ -0,0 +1,14 @@
++#include <stdio.h>
++#include <string.h>
++
++static int
++do_test (void)
++{
++  char s[] __attribute__((aligned(16))) = "\xff";
++  char *p = strchr (s, '\xfe');
++  printf ("%p\n", p);
++  return p != NULL;
++}
++
++#define TEST_FUNCTION do_test ()
++#include "../test-skeleton.c"
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strchr.S
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/multiarch/strchr.S
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strchr.S
+@@ -87,13 +87,13 @@ __strchr_sse42:
+ 	pxor	%xmm2, %xmm2
+ 	movd	%esi, %xmm1
+ 	movl	%edi, %ecx
++	pshufb  %xmm2, %xmm1
+ 	andl	$15, %ecx
+ 	movq	%rdi, %r8
+ 	je	L(aligned_start)
+ 
+ /* Handle unaligned string.  */
+ 	andq	$-16, %r8
+-	pshufb  %xmm2, %xmm1
+ 	movdqa	(%r8), %xmm0
+ 	pcmpeqb	 %xmm0, %xmm2
+ 	pcmpeqb	 %xmm1, %xmm0
diff --git a/SOURCES/glibc-rh652661.patch b/SOURCES/glibc-rh652661.patch
new file mode 100644
index 0000000..79a3212
--- /dev/null
+++ b/SOURCES/glibc-rh652661.patch
@@ -0,0 +1,21 @@
+2010-05-20  Andreas Schwab  <schwab@redhat.com>
+
+	* sysdeps/unix/sysv/linux/sys/timex.h: Use __REDIRECT_NTH.
+
+Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/sys/timex.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/sys/timex.h
++++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/sys/timex.h
+@@ -140,9 +140,9 @@ __BEGIN_DECLS
+ extern int __adjtimex (struct timex *__ntx) __THROW;
+ extern int adjtimex (struct timex *__ntx) __THROW;
+ 
+-#if defined __GNUC__ && __GNUC__ >= 2
+-extern int ntp_gettime (struct ntptimeval *__ntv)
+-     __asm__ ("ntp_gettimex") __THROW;
++#ifdef __REDIRECT_NTH
++extern int __REDIRECT_NTH (ntp_gettime, (struct ntptimeval *__ntv),
++			   ntp_gettimex);
+ #else
+ extern int ntp_gettimex (struct ntptimeval *__ntv) __THROW;
+ # define ntp_gettime ntp_gettimex
diff --git a/SOURCES/glibc-rh656014.patch b/SOURCES/glibc-rh656014.patch
new file mode 100644
index 0000000..5ef68dc
--- /dev/null
+++ b/SOURCES/glibc-rh656014.patch
@@ -0,0 +1,45 @@
+2010-11-24  Andreas Schwab  <schwab@redhat.com>
+
+	* resolv/nss_dns/dns-host.c (getanswer_r): Don't handle ttl == 0
+	specially.
+	(gaih_getanswer_slice): Likewise.
+
+Index: glibc-2.12-2-gc4ccff1/resolv/nss_dns/dns-host.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/resolv/nss_dns/dns-host.c
++++ glibc-2.12-2-gc4ccff1/resolv/nss_dns/dns-host.c
+@@ -599,7 +599,6 @@ getanswer_r (const querybuf *answer, int
+   int (*name_ok) (const char *);
+   u_char packtmp[NS_MAXCDNAME];
+   int have_to_map = 0;
+-  int32_t ttl = 0;
+   uintptr_t pad = -(uintptr_t) buffer % __alignof__ (struct host_data);
+   buffer += pad;
+   if (__builtin_expect (buflen < sizeof (struct host_data) + pad, 0))
+@@ -733,7 +732,7 @@ getanswer_r (const querybuf *answer, int
+       cp += INT16SZ;			/* type */
+       class = __ns_get16 (cp);
+       cp += INT16SZ;			/* class */
+-      ttl = __ns_get32 (cp);
++      int32_t ttl = __ns_get32 (cp);
+       cp += INT32SZ;			/* TTL */
+       n = __ns_get16 (cp);
+       cp += INT16SZ;			/* len */
+@@ -907,7 +906,7 @@ getanswer_r (const querybuf *answer, int
+ 	    {
+ 	      register int nn;
+ 
+-	      if (ttlp != NULL && ttl != 0)
++	      if (ttlp != NULL)
+ 		*ttlp = ttl;
+ 	      if (canonp != NULL)
+ 		*canonp = bp;
+@@ -1163,7 +1162,7 @@ gaih_getanswer_slice (const querybuf *an
+ 
+       if (*firstp)
+ 	{
+-	  if (ttl != 0 && ttlp != NULL)
++	  if (ttlp != NULL)
+ 	    *ttlp = ttl;
+ 
+ 	  (*pat)->name = canon ?: h_name;
diff --git a/SOURCES/glibc-rh656530.patch b/SOURCES/glibc-rh656530.patch
new file mode 100644
index 0000000..f101430
--- /dev/null
+++ b/SOURCES/glibc-rh656530.patch
@@ -0,0 +1,21 @@
+2010-11-10  Luis Machado  <luisgpm@br.ibm.com>
+
+	* sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c (__ieee754_sqrtl): Force
+	  signed comparison.
+
+Index: glibc-2.12-2-gc4ccff1/sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c
++++ glibc-2.12-2-gc4ccff1/sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c
+@@ -73,9 +73,9 @@ long double __ieee754_sqrtl(long double 
+ 	m = ((a.i[2] >> 20) & 0x7ff) - 54;
+       }
+       m += n;
+-      if (m > 0)
++      if ((int) m > 0)
+ 	a.i[2] = (a.i[2] & 0x800fffff) | (m << 20);
+-      else if (m <= -54) {
++      else if ((int) m <= -54) {
+ 	a.i[2] &= 0x80000000;
+ 	a.i[3] = 0;
+       } else {
diff --git a/SOURCES/glibc-rh657572.patch b/SOURCES/glibc-rh657572.patch
new file mode 100644
index 0000000..a720130
--- /dev/null
+++ b/SOURCES/glibc-rh657572.patch
@@ -0,0 +1,141 @@
+commit 42c5011242e48f846111237552d3bf3ca18c4885
+Author: Ulrich Drepper <drepper@gmail.com>
+Date:   Fri Dec 23 09:51:10 2011 -0500
+
+    Various fixes to fi_FI
+
+ 2011-12-23  Ulrich Drepper  <drepper@gmail.com>
+ 
+	[BZ #12962]
+	* locales/fi_FI: Various fixups.
+	Patch by Marko Myllynen <myllynen@redhat.com>.
+
+diff --git a/localedata/locales/fi_FI b/localedata/locales/fi_FI
+index acc9ce6..f51700c 100644
+--- a/localedata/locales/fi_FI
++++ b/localedata/locales/fi_FI
+@@ -1,4 +1,4 @@
+-escape_char	/
++escape_char     /
+ comment_char    %
+ 
+ % Finnish language locale for Finland
+@@ -45,10 +45,10 @@ category  "fi_FI:2000";LC_NUMERIC
+ category  "fi_FI:2000";LC_MONETARY
+ category  "fi_FI:2000";LC_MESSAGES
+ category  "fi_FI:2000";LC_PAPER
++category  "fi_FI:2000";LC_MEASUREMENT
+ category  "fi_FI:2000";LC_NAME
+ category  "fi_FI:2000";LC_ADDRESS
+ category  "fi_FI:2000";LC_TELEPHONE
+-
+ END LC_IDENTIFICATION
+ 
+ LC_COLLATE
+@@ -125,7 +125,6 @@ reorder-after <U0044>
+ <U0110> <d>;<OBL>;<CAP>;IGNORE
+ 
+ reorder-end
+-
+ END LC_COLLATE
+ 
+ LC_CTYPE
+@@ -146,12 +145,10 @@ positive_sign        ""
+ negative_sign        "<U002D>"
+ int_frac_digits      2
+ frac_digits          2
+-% int_curr_symbol precedes
+-% curr_symbol succeeds
+ p_cs_precedes        0
+-p_sep_by_space       2
++p_sep_by_space       1
+ n_cs_precedes        0
+-n_sep_by_space       2
++n_sep_by_space       1
+ p_sign_posn          1
+ n_sign_posn          1
+ END LC_MONETARY
+@@ -173,18 +170,18 @@ day      "<U0073><U0075><U006E><U006E><U0075><U006E><U0074><U0061><U0069>";/
+          "<U0074><U006F><U0072><U0073><U0074><U0061><U0069>";/
+          "<U0070><U0065><U0072><U006A><U0061><U006E><U0074><U0061><U0069>";/
+          "<U006C><U0061><U0075><U0061><U006E><U0074><U0061><U0069>"
+-abmon    "<U0074><U0061><U006D><U006D><U0069><U00A0>";/
+-         "<U0068><U0065><U006C><U006D><U0069><U00A0>";/
++abmon    "<U0074><U0061><U006D><U006D><U0069>";/
++         "<U0068><U0065><U006C><U006D><U0069>";/
+          "<U006D><U0061><U0061><U006C><U0069><U0073>";/
+-         "<U0068><U0075><U0068><U0074><U0069><U00A0>";/
+-         "<U0074><U006F><U0075><U006B><U006F><U00A0>";/
+-         "<U006B><U0065><U0073><U00E4><U00A0><U00A0>";/
+-         "<U0068><U0065><U0069><U006E><U00E4><U00A0>";/
+-         "<U0065><U006C><U006F><U00A0><U00A0><U00A0>";/
+-         "<U0073><U0079><U0079><U0073><U00A0><U00A0>";/
+-         "<U006C><U006F><U006B><U0061><U00A0><U00A0>";/
++         "<U0068><U0075><U0068><U0074><U0069>";/
++         "<U0074><U006F><U0075><U006B><U006F>";/
++         "<U006B><U0065><U0073><U00E4>";/
++         "<U0068><U0065><U0069><U006E><U00E4>";/
++         "<U0065><U006C><U006F>";/
++         "<U0073><U0079><U0079><U0073>";/
++         "<U006C><U006F><U006B><U0061>";/
+          "<U006D><U0061><U0072><U0072><U0061><U0073>";/
+-         "<U006A><U006F><U0075><U006C><U0075><U00A0>"
++         "<U006A><U006F><U0075><U006C><U0075>"
+ mon      "<U0074><U0061><U006D><U006D><U0069><U006B><U0075><U0075>";/
+          "<U0068><U0065><U006C><U006D><U0069><U006B><U0075><U0075>";/
+          "<U006D><U0061><U0061><U006C><U0069><U0073><U006B><U0075><U0075>";/
+@@ -207,13 +204,14 @@ t_fmt_ampm  ""
+ date_fmt       "<U0025><U0061><U0020><U0025><U002D><U0064><U002E><U0025>/
+ <U002D><U006D><U002E><U0025><U0059><U0020><U0025><U0048><U002E><U0025>/
+ <U004D><U002E><U0025><U0053><U0020><U0025><U007A>"
++week     7;19971130;4
+ first_weekday 2 % Monday
+ first_workday 2 % Monday
+ END LC_TIME
+ 
+ LC_MESSAGES
+-yesexpr  "<U005E><U005B><U004B><U006B><U004A><U006A><U0059><U0079><U005D><U002E><U002A>"
+-noexpr   "<U005E><U005B><U004E><U006E><U0045><U0065><U005D><U002E><U002A>"
++yesexpr  "<U005E><U005B><U004B><U006B><U0059><U0079><U005D><U002E><U002A>"
++noexpr   "<U005E><U005B><U0045><U0065><U004E><U006E><U005D><U002E><U002A>"
+ END LC_MESSAGES
+ 
+ LC_PAPER
+@@ -222,6 +220,7 @@ width    210
+ END LC_PAPER
+ 
+ LC_TELEPHONE
++tel_dom_fmt    "<U0028><U0025><U0041><U0029><U0020><U0025><U006C>"
+ tel_int_fmt    "<U002B><U0025><U0063><U0020><U0025><U0061><U0020><U0025>/
+ <U006C>"
+ int_prefix     "<U0033><U0035><U0038>"
+@@ -235,15 +234,25 @@ END LC_MEASUREMENT
+ LC_NAME
+ name_fmt    "<U0025><U0064><U0025><U0074><U0025><U0067><U0025><U0074>/
+ <U0025><U006D><U0025><U0074><U0025><U0066>"
++% Finnish equivalents for Mr/Mrs/Miss/Ms are herra/rouva/rouva/neiti
++% but they are practically never used, thus we don't define them here.
+ END LC_NAME
+ 
+ LC_ADDRESS
+-postal_fmt    "<U0025><U0066><U0025><U004E><U0025><U0061><U0025><U004E>/
+-<U0025><U0064><U0025><U004E><U0025><U0062><U0025><U004E><U0025><U0073>/
+-<U0020><U0025><U0068><U0020><U0025><U0065><U0020><U0025><U0072><U0025>/
+-<U004E><U0025><U007A><U0020><U0025><U0054><U0025>/
++postal_fmt   "<U0025><U0066><U0025><U004E><U0025><U0064><U0025><U004E>/
++<U0025><U0062><U0025><U004E><U0025><U0061><U0025><U004E><U0025><U0073>/
++<U0020><U0025><U0068><U0025><U0074><U0025><U0065><U0025><U0074><U0025>/
++<U0072><U0025><U004E><U0025><U007A><U0020><U0025><U0054><U0025>/
+ <U004E><U0025><U0063><U0025><U004E>"
+ country_ab2 "<U0046><U0049>"
+ country_ab3 "<U0046><U0049><U004E>"
+ country_num 246
++country_name "<U0053><U0075><U006F><U006D><U0069>"
++country_post "<U0046><U0049>"
++country_car  "<U0046><U0049><U004E>"
++country_isbn 952
++lang_name    "<U0073><U0075><U006F><U006D><U0069>"
++lang_ab      "<U0066><U0069>"
++lang_term    "<U0066><U0069><U006E>"
++lang_lib     "<U0066><U0069><U006E>"
+ END LC_ADDRESS
diff --git a/SOURCES/glibc-rh661982.patch b/SOURCES/glibc-rh661982.patch
new file mode 100644
index 0000000..60b840b
--- /dev/null
+++ b/SOURCES/glibc-rh661982.patch
@@ -0,0 +1,188 @@
+2010-12-10  Andreas Schwab  <schwab@redhat.com>
+
+	* wcsmbs/wchar.h (wcpcpy, wcpncpy): Only declare under
+	_GNU_SOURCE.
+
+2010-12-10  Andreas Schwab  <schwab@redhat.com>
+
+	* wcsmbs/wchar.h (wcpcpy, wcpncpy): Add __restrict.
+	* wcsmbs/bits/wchar2.h (__wmemmove_chk_warn, wmemmove, wmemset):
+	Remove __restrict.
+	(wcscpy, __wcpcpy_chk, __wcpcpy_alias, wcpcpy, wcsncpy, wcpncpy)
+	(wcscat, wcsncat, __wcrtomb_chk, wcrtomb): Add __restrict.
+
+2010-12-09  Jakub Jelinek  <jakub@redhat.com>
+
+	* string/bits/string3.h (memmove, bcopy): Remove __restrict.
+
+Index: glibc-2.12-2-gc4ccff1/string/bits/string3.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/string/bits/string3.h
++++ glibc-2.12-2-gc4ccff1/string/bits/string3.h
+@@ -53,8 +53,7 @@ __NTH (memcpy (void *__restrict __dest, 
+ }
+ 
+ __extern_always_inline void *
+-__NTH (memmove (void *__restrict __dest, __const void *__restrict __src,
+-		size_t __len))
++__NTH (memmove (void *__dest, __const void *__src, size_t __len))
+ {
+   return __builtin___memmove_chk (__dest, __src, __len, __bos0 (__dest));
+ }
+@@ -88,8 +87,7 @@ __NTH (memset (void *__dest, int __ch, s
+ 
+ #ifdef __USE_BSD
+ __extern_always_inline void
+-__NTH (bcopy (__const void *__restrict __src, void *__restrict __dest,
+-	      size_t __len))
++__NTH (bcopy (__const void *__src, void *__dest, size_t __len))
+ {
+   (void) __builtin___memmove_chk (__dest, __src, __len, __bos0 (__dest));
+ }
+Index: glibc-2.12-2-gc4ccff1/wcsmbs/bits/wchar2.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/wcsmbs/bits/wchar2.h
++++ glibc-2.12-2-gc4ccff1/wcsmbs/bits/wchar2.h
+@@ -60,15 +60,13 @@ extern wchar_t *__REDIRECT_NTH (__wmemmo
+ 						   __const wchar_t *__s2,
+ 						   size_t __n), wmemmove);
+ extern wchar_t *__REDIRECT_NTH (__wmemmove_chk_warn,
+-				(wchar_t *__restrict __s1,
+-				 __const wchar_t *__restrict __s2, size_t __n,
+-				 size_t __ns1), __wmemmove_chk)
++				(wchar_t *__s1, __const wchar_t *__s2,
++				 size_t __n, size_t __ns1), __wmemmove_chk)
+      __warnattr ("wmemmove called with length bigger than size of destination "
+ 		 "buffer");
+ 
+ __extern_always_inline wchar_t *
+-__NTH (wmemmove (wchar_t *__restrict __s1, __const wchar_t *__restrict __s2,
+-		 size_t __n))
++__NTH (wmemmove (wchar_t *__s1, __const wchar_t *__s2, size_t __n))
+ {
+   if (__bos0 (__s1) != (size_t) -1)
+     {
+@@ -129,7 +127,7 @@ extern wchar_t *__REDIRECT_NTH (__wmemse
+ 		 "buffer");
+ 
+ __extern_always_inline wchar_t *
+-__NTH (wmemset (wchar_t *__restrict __s, wchar_t __c, size_t __n))
++__NTH (wmemset (wchar_t *__s, wchar_t __c, size_t __n))
+ {
+   if (__bos0 (__s) != (size_t) -1)
+     {
+@@ -152,7 +150,7 @@ extern wchar_t *__REDIRECT_NTH (__wcscpy
+ 				 __const wchar_t *__restrict __src), wcscpy);
+ 
+ __extern_always_inline wchar_t *
+-__NTH (wcscpy (wchar_t *__dest, __const wchar_t *__src))
++__NTH (wcscpy (wchar_t *__restrict __dest, __const wchar_t *__restrict __src))
+ {
+   if (__bos (__dest) != (size_t) -1)
+     return __wcscpy_chk (__dest, __src, __bos (__dest) / sizeof (wchar_t));
+@@ -160,14 +158,15 @@ __NTH (wcscpy (wchar_t *__dest, __const 
+ }
+ 
+ 
+-extern wchar_t *__wcpcpy_chk (wchar_t *__dest, __const wchar_t *__src,
++extern wchar_t *__wcpcpy_chk (wchar_t *__restrict __dest,
++			      __const wchar_t *__restrict __src,
+ 			      size_t __destlen) __THROW;
+-extern wchar_t *__REDIRECT_NTH (__wcpcpy_alias, (wchar_t *__dest,
+-						 __const wchar_t *__src),
+-				wcpcpy);
++extern wchar_t *__REDIRECT_NTH (__wcpcpy_alias,
++				(wchar_t *__restrict __dest,
++				 __const wchar_t *__restrict __src), wcpcpy);
+ 
+ __extern_always_inline wchar_t *
+-__NTH (wcpcpy (wchar_t *__dest, __const wchar_t *__src))
++__NTH (wcpcpy (wchar_t *__restrict __dest, __const wchar_t *__restrict __src))
+ {
+   if (__bos (__dest) != (size_t) -1)
+     return __wcpcpy_chk (__dest, __src, __bos (__dest) / sizeof (wchar_t));
+@@ -190,7 +189,8 @@ extern wchar_t *__REDIRECT_NTH (__wcsncp
+ 		 "buffer");
+ 
+ __extern_always_inline wchar_t *
+-__NTH (wcsncpy (wchar_t *__dest, __const wchar_t *__src, size_t __n))
++__NTH (wcsncpy (wchar_t *__restrict __dest, __const wchar_t *__restrict __src,
++		size_t __n))
+ {
+   if (__bos (__dest) != (size_t) -1)
+     {
+@@ -220,7 +220,8 @@ extern wchar_t *__REDIRECT_NTH (__wcpncp
+ 		 "buffer");
+ 
+ __extern_always_inline wchar_t *
+-__NTH (wcpncpy (wchar_t *__dest, __const wchar_t *__src, size_t __n))
++__NTH (wcpncpy (wchar_t *__restrict __dest, __const wchar_t *__restrict __src,
++		size_t __n))
+ {
+   if (__bos (__dest) != (size_t) -1)
+     {
+@@ -243,7 +244,7 @@ extern wchar_t *__REDIRECT_NTH (__wcscat
+ 				 __const wchar_t *__restrict __src), wcscat);
+ 
+ __extern_always_inline wchar_t *
+-__NTH (wcscat (wchar_t *__dest, __const wchar_t *__src))
++__NTH (wcscat (wchar_t *__restrict __dest, __const wchar_t *__restrict __src))
+ {
+   if (__bos (__dest) != (size_t) -1)
+     return __wcscat_chk (__dest, __src, __bos (__dest) / sizeof (wchar_t));
+@@ -260,7 +261,8 @@ extern wchar_t *__REDIRECT_NTH (__wcsnca
+ 				 size_t __n), wcsncat);
+ 
+ __extern_always_inline wchar_t *
+-__NTH (wcsncat (wchar_t *__dest, __const wchar_t *__src, size_t __n))
++__NTH (wcsncat (wchar_t *__restrict __dest, __const wchar_t *__restrict __src,
++		size_t __n))
+ {
+   if (__bos (__dest) != (size_t) -1)
+     return __wcsncat_chk (__dest, __src, __n,
+@@ -428,14 +430,16 @@ fgetws_unlocked (wchar_t *__restrict __s
+ #endif
+ 
+ 
+-extern size_t __wcrtomb_chk (char *__s, wchar_t __wchar, mbstate_t *__p,
+-			  size_t __buflen) __THROW __wur;
++extern size_t __wcrtomb_chk (char *__restrict __s, wchar_t __wchar,
++			     mbstate_t *__restrict __p,
++			     size_t __buflen) __THROW __wur;
+ extern size_t __REDIRECT_NTH (__wcrtomb_alias,
+ 			      (char *__restrict __s, wchar_t __wchar,
+ 			       mbstate_t *__restrict __ps), wcrtomb) __wur;
+ 
+ __extern_always_inline __wur size_t
+-__NTH (wcrtomb (char *__s, wchar_t __wchar, mbstate_t *__ps))
++__NTH (wcrtomb (char *__restrict __s, wchar_t __wchar,
++		mbstate_t *__restrict __ps))
+ {
+   /* We would have to include <limits.h> to get a definition of MB_LEN_MAX.
+      But this would only disturb the namespace.  So we define our own
+Index: glibc-2.12-2-gc4ccff1/wcsmbs/wchar.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/wcsmbs/wchar.h
++++ glibc-2.12-2-gc4ccff1/wcsmbs/wchar.h
+@@ -555,17 +555,17 @@ extern float wcstof_l (__const wchar_t *
+ extern long double wcstold_l (__const wchar_t *__restrict __nptr,
+ 			      wchar_t **__restrict __endptr,
+ 			      __locale_t __loc) __THROW;
+-#endif /* GNU */
+ 
+ 
+-#ifdef	__USE_XOPEN2K8
+ /* Copy SRC to DEST, returning the address of the terminating L'\0' in
+    DEST.  */
+-extern wchar_t *wcpcpy (wchar_t *__dest, __const wchar_t *__src) __THROW;
++extern wchar_t *wcpcpy (wchar_t *__restrict __dest,
++			__const wchar_t *__restrict __src) __THROW;
+ 
+ /* Copy no more than N characters of SRC to DEST, returning the address of
+    the last character written into DEST.  */
+-extern wchar_t *wcpncpy (wchar_t *__dest, __const wchar_t *__src, size_t __n)
++extern wchar_t *wcpncpy (wchar_t *__restrict __dest,
++			 __const wchar_t *__restrict __src, size_t __n)
+      __THROW;
+ #endif	/* use GNU */
+ 
diff --git a/SOURCES/glibc-rh667974.patch b/SOURCES/glibc-rh667974.patch
new file mode 100644
index 0000000..48aacac
--- /dev/null
+++ b/SOURCES/glibc-rh667974.patch
@@ -0,0 +1,160 @@
+2011-03-14  Andreas Schwab  <schwab@redhat.com>
+
+	* elf/dl-load.c (is_dst): Remove parameter secure, all callers
+	changed.  Don't check for isolated use.
+	(_dl_dst_substitute): Ignore rpath elements containing
+	non-isolated use of $ORIGIN when privileged.
+
+	* elf/dl-load.c (_dl_dst_substitute): When skipping the first
+	rpath element also skip the following colon.
+	(expand_dynamic_string_token): Add is_path parameter and pass
+	down to DL_DST_REQUIRED and _dl_dst_substitute.
+	(decompose_rpath): Call expand_dynamic_string_token with
+	non-zero is_path.  Ignore empty rpaths.
+	(_dl_map_object_from_fd): Call expand_dynamic_string_token
+	with zero is_path.
+
+Index: glibc-2.12-2-gc4ccff1/elf/dl-load.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/elf/dl-load.c
++++ glibc-2.12-2-gc4ccff1/elf/dl-load.c
+@@ -169,8 +169,7 @@ local_strdup (const char *s)
+ 
+ 
+ static size_t
+-is_dst (const char *start, const char *name, const char *str,
+-	int is_path, int secure)
++is_dst (const char *start, const char *name, const char *str, int is_path)
+ {
+   size_t len;
+   bool is_curly = false;
+@@ -199,11 +198,6 @@ is_dst (const char *start, const char *n
+ 	   && (!is_path || name[len] != ':'))
+     return 0;
+ 
+-  if (__builtin_expect (secure, 0)
+-      && ((name[len] != '\0' && (!is_path || name[len] != ':'))
+-	  || (name != start + 1 && (!is_path || name[-2] != ':'))))
+-    return 0;
+-
+   return len;
+ }
+ 
+@@ -218,13 +212,10 @@ _dl_dst_count (const char *name, int is_
+     {
+       size_t len;
+ 
+-      /* $ORIGIN is not expanded for SUID/GUID programs (except if it
+-	 is $ORIGIN alone) and it must always appear first in path.  */
+       ++name;
+-      if ((len = is_dst (start, name, "ORIGIN", is_path,
+-			 INTUSE(__libc_enable_secure))) != 0
+-	  || (len = is_dst (start, name, "PLATFORM", is_path, 0)) != 0
+-	  || (len = is_dst (start, name, "LIB", is_path, 0)) != 0)
++      if ((len = is_dst (start, name, "ORIGIN", is_path)) != 0
++	  || (len = is_dst (start, name, "PLATFORM", is_path)) != 0
++	  || (len = is_dst (start, name, "LIB", is_path)) != 0)
+ 	++cnt;
+ 
+       name = strchr (name + len, '$');
+@@ -256,9 +247,16 @@ _dl_dst_substitute (struct link_map *l, 
+ 	  size_t len;
+ 
+ 	  ++name;
+-	  if ((len = is_dst (start, name, "ORIGIN", is_path,
+-			     INTUSE(__libc_enable_secure))) != 0)
++	  if ((len = is_dst (start, name, "ORIGIN", is_path)) != 0)
+ 	    {
++	      /* $ORIGIN is not expanded for SUID/GUID programs
++		 (except if it is $ORIGIN alone) and it must always
++		 appear first in path.  */
++	      if (__builtin_expect (INTUSE(__libc_enable_secure), 0)
++		  && ((name[len] != '\0' && (!is_path || name[len] != ':'))
++		      || (name != start + 1 && (!is_path || name[-2] != ':'))))
++		repl = (const char *) -1;
++	      else
+ #ifndef SHARED
+ 	      if (l == NULL)
+ 		repl = _dl_get_origin ();
+@@ -266,9 +264,9 @@ _dl_dst_substitute (struct link_map *l, 
+ #endif
+ 		repl = l->l_origin;
+ 	    }
+-	  else if ((len = is_dst (start, name, "PLATFORM", is_path, 0)) != 0)
++	  else if ((len = is_dst (start, name, "PLATFORM", is_path)) != 0)
+ 	    repl = GLRO(dl_platform);
+-	  else if ((len = is_dst (start, name, "LIB", is_path, 0)) != 0)
++	  else if ((len = is_dst (start, name, "LIB", is_path)) != 0)
+ 	    repl = DL_DST_LIB;
+ 
+ 	  if (repl != NULL && repl != (const char *) -1)
+@@ -284,6 +282,10 @@ _dl_dst_substitute (struct link_map *l, 
+ 	      name += len;
+ 	      while (*name != '\0' && (!is_path || *name != ':'))
+ 		++name;
++	      /* Also skip following colon if this is the first rpath
++		 element, but keep an empty element at the end.  */
++	      if (wp == result && is_path && *name == ':' && name[1] != '\0')
++		++name;
+ 	    }
+ 	  else
+ 	    /* No DST we recognize.  */
+@@ -310,7 +312,7 @@ _dl_dst_substitute (struct link_map *l, 
+    belonging to the map is loaded.  In this case the path element
+    containing $ORIGIN is left out.  */
+ static char *
+-expand_dynamic_string_token (struct link_map *l, const char *s)
++expand_dynamic_string_token (struct link_map *l, const char *s, int is_path)
+ {
+   /* We make two runs over the string.  First we determine how large the
+      resulting string is and then we copy it over.  Since this is no
+@@ -321,7 +323,7 @@ expand_dynamic_string_token (struct link
+   char *result;
+ 
+   /* Determine the number of DST elements.  */
+-  cnt = DL_DST_COUNT (s, 1);
++  cnt = DL_DST_COUNT (s, is_path);
+ 
+   /* If we do not have to replace anything simply copy the string.  */
+   if (__builtin_expect (cnt, 0) == 0)
+@@ -335,7 +337,7 @@ expand_dynamic_string_token (struct link
+   if (result == NULL)
+     return NULL;
+ 
+-  return _dl_dst_substitute (l, s, result, 1);
++  return _dl_dst_substitute (l, s, result, is_path);
+ }
+ 
+ 
+@@ -551,13 +553,21 @@ decompose_rpath (struct r_search_path_st
+ 
+   /* Make a writable copy.  At the same time expand possible dynamic
+      string tokens.  */
+-  copy = expand_dynamic_string_token (l, rpath);
++  copy = expand_dynamic_string_token (l, rpath, 1);
+   if (copy == NULL)
+     {
+       errstring = N_("cannot create RUNPATH/RPATH copy");
+       goto signal_error;
+     }
+ 
++  /* Ignore empty rpaths.  */
++  if (*copy == 0)
++    {
++      free (copy);
++      sps->dirs = (char *) -1;
++      return false;
++    }
++
+   /* Count the number of necessary elements in the result array.  */
+   nelems = 0;
+   for (cp = copy; *cp != '\0'; ++cp)
+@@ -2176,7 +2186,7 @@ _dl_map_object (struct link_map *loader,
+     {
+       /* The path may contain dynamic string tokens.  */
+       realname = (loader
+-		  ? expand_dynamic_string_token (loader, name)
++		  ? expand_dynamic_string_token (loader, name, 0)
+ 		  : local_strdup (name));
+       if (realname == NULL)
+ 	fd = -1;
diff --git a/SOURCES/glibc-rh676076.patch b/SOURCES/glibc-rh676076.patch
new file mode 100644
index 0000000..c5aa2d4
--- /dev/null
+++ b/SOURCES/glibc-rh676076.patch
@@ -0,0 +1,714 @@
+2011-03-02  Harsha Jagasia  <harsha.jagasia@amd.com>
+	    Ulrich Drepper  <drepper@gmail.com>
+
+	* sysdeps/x86_64/memset.S: After aligning destination, code
+	branches to different locations depending on the value of
+	misalignment, when multiarch is enabled. Fix this.
+
+2011-03-02  Harsha Jagasia  <harsha.jagasia@amd.com>
+
+	* sysdeps/x86_64/cacheinfo.c (init_cacheinfo):
+	Set _x86_64_preferred_memory_instruction for AMD processsors.
+	* sysdeps/x86_64/multiarch/init-arch.c (__init_cpu_features):
+	Set bit_Prefer_SSE_for_memop for AMD processors.
+
+2010-11-07  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* sysdeps/x86_64/memset.S: Check USE_MULTIARCH and USE_SSE2 for
+	IFUNC support.
+	* sysdeps/x86_64/multiarch/Makefile (sysdep_routines): Add
+	memset-x86-64.
+	* sysdeps/x86_64/multiarch/bzero.S: New file.
+	* sysdeps/x86_64/multiarch/cacheinfo.c: New file.
+	* sysdeps/x86_64/multiarch/memset-x86-64.S: New file.
+	* sysdeps/x86_64/multiarch/memset.S: New file.
+	* sysdeps/x86_64/multiarch/memset_chk.S: New file.
+	* sysdeps/x86_64/multiarch/init-arch.c (__init_cpu_features):
+	Set bit_Prefer_SSE_for_memop for Intel processors.
+	* sysdeps/x86_64/multiarch/init-arch.h (bit_Prefer_SSE_for_memop):
+	Define.
+	(index_Prefer_SSE_for_memop): Define.
+	(HAS_PREFER_SSE_FOR_MEMOP): Define.
+
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/cacheinfo.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/cacheinfo.c
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/cacheinfo.c
+@@ -613,6 +613,25 @@ init_cacheinfo (void)
+       long int core = handle_amd (_SC_LEVEL2_CACHE_SIZE);
+       shared = handle_amd (_SC_LEVEL3_CACHE_SIZE);
+ 
++#ifndef DISABLE_PREFERRED_MEMORY_INSTRUCTION
++# ifdef USE_MULTIARCH
++      eax = __cpu_features.cpuid[COMMON_CPUID_INDEX_1].eax;
++      ebx = __cpu_features.cpuid[COMMON_CPUID_INDEX_1].ebx;
++      ecx = __cpu_features.cpuid[COMMON_CPUID_INDEX_1].ecx;
++      edx = __cpu_features.cpuid[COMMON_CPUID_INDEX_1].edx;
++# else
++      __cpuid (1, eax, ebx, ecx, edx);
++# endif
++
++      /* AMD prefers SSSE3 instructions for memory/string routines
++	 if they are avaiable, otherwise it prefers integer
++	 instructions.  */
++      if ((ecx & 0x200))
++	__x86_64_preferred_memory_instruction = 3;
++      else
++	__x86_64_preferred_memory_instruction = 0;
++#endif
++
+       /* Get maximum extended function. */
+       __cpuid (0x80000000, max_cpuid_ex, ebx, ecx, edx);
+ 
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/memset.S
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/memset.S
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/memset.S
+@@ -24,7 +24,7 @@
+ #define __STOS_UPPER_BOUNDARY	$65536
+ 
+         .text
+-#ifndef NOT_IN_libc
++#if !defined NOT_IN_libc && !defined USE_MULTIARCH
+ ENTRY(__bzero)
+ 	mov	%rsi,%rdx	/* Adjust parameter.  */
+ 	xorl	%esi,%esi	/* Fill with 0s.  */
+@@ -34,10 +34,10 @@ weak_alias (__bzero, bzero)
+ #endif
+ 
+ #if defined PIC && !defined NOT_IN_libc
+-ENTRY (__memset_chk)
++ENTRY_CHK (__memset_chk)
+ 	cmpq	%rdx, %rcx
+ 	jb	HIDDEN_JUMPTARGET (__chk_fail)
+-END (__memset_chk)
++END_CHK (__memset_chk)
+ #endif
+ ENTRY (memset)
+ L(memset_entry):
+@@ -591,157 +591,15 @@ L(A6Q1):    mov    %dx,-0xe(%rdi)
+ L(A7Q0):    mov    %dl,-0x7(%rdi)
+ L(A6Q0):    mov    %dx,-0x6(%rdi)
+ 	mov    %edx,-0x4(%rdi)
+-	jmp    L(aligned_now)
+-
+-	.balign     16
+-L(aligned_now):
+-
+-	 cmpl   $0x1,__x86_64_preferred_memory_instruction(%rip)
+-	 jg     L(SSE_pre)
+-
+-L(8byte_move_try):
+-	cmpq	__STOS_LOWER_BOUNDARY,%r8
+-	jae	L(8byte_stos_try)
+-
+-	.balign     16
+-L(8byte_move):
+-	movq	%r8,%rcx
+-	shrq	$7,%rcx
+-	jz	L(8byte_move_skip)
+-
+-	.p2align 4
+-
+-L(8byte_move_loop):
+-	decq	%rcx
+-
+-	movq	%rdx,    (%rdi)
+-	movq	%rdx,  8 (%rdi)
+-	movq	%rdx, 16 (%rdi)
+-	movq	%rdx, 24 (%rdi)
+-	movq	%rdx, 32 (%rdi)
+-	movq	%rdx, 40 (%rdi)
+-	movq	%rdx, 48 (%rdi)
+-	movq	%rdx, 56 (%rdi)
+-	movq	%rdx, 64 (%rdi)
+-	movq	%rdx, 72 (%rdi)
+-	movq	%rdx, 80 (%rdi)
+-	movq	%rdx, 88 (%rdi)
+-	movq	%rdx, 96 (%rdi)
+-	movq	%rdx, 104 (%rdi)
+-	movq	%rdx, 112 (%rdi)
+-	movq	%rdx, 120 (%rdi)
+-
+-	leaq	128 (%rdi),%rdi
+-
+-	jnz     L(8byte_move_loop)
+-
+-L(8byte_move_skip):
+-	andl	$127,%r8d
+-	lea    	(%rdi,%r8,1),%rdi
+-
+-#ifndef PIC
+-	lea    	L(setPxQx)(%rip),%r11
+-	jmpq   	*(%r11,%r8,8) # old scheme remained for nonPIC
+-#else
+-	lea    	L(Got0)(%rip),%r11
+-	lea	L(setPxQx)(%rip),%rcx
+-	movswq	(%rcx,%r8,2),%rcx
+-	lea    	(%rcx,%r11,1),%r11
+-	jmpq   	*%r11
+-#endif
+-
+-	.balign     16
+-L(8byte_stos_try):
+-	mov    __x86_64_shared_cache_size(%rip),%r9d // ck largest cache size
+-	cmpq	%r8,%r9		// calculate the lesser of remaining
+-	cmovaq	%r8,%r9		// bytes and largest cache size
+-	jbe	L(8byte_stos)
+-
+-L(8byte_move_reuse_try):
+-	cmp	__STOS_UPPER_BOUNDARY,%r8
+-	jae	L(8byte_move)
+-
+-	.balign     16
+-L(8byte_stos):
+-	movq	%r9,%rcx
+-	andq	$-8,%r9
+-
+-	shrq	$3,%rcx
+-	jz	L(8byte_stos_skip)
+-
+-	xchgq	%rax,%rdx
+-
+-	rep
+-	stosq
+-
+-	xchgq	%rax,%rdx
+-
+-L(8byte_stos_skip):
+-	subq	%r9,%r8
+-	ja	L(8byte_nt_move)
+-
+-	andl	$7,%r8d
+-	lea    	(%rdi,%r8,1),%rdi
+-#ifndef PIC
+-	lea    	L(setPxQx)(%rip),%r11
+-	jmpq   	*(%r11,%r8,8) # old scheme remained for nonPIC
+-#else
+-	lea    	L(Got0)(%rip),%r11
+-	lea     L(setPxQx)(%rip),%rcx
+-	movswq	(%rcx,%r8,2),%rcx
+-	lea	(%rcx,%r11,1),%r11
+-	jmpq   	*%r11
+-#endif
+ 
+-	.balign     16
+-L(8byte_nt_move):
+-	movq	%r8,%rcx
+-	shrq	$7,%rcx
+-	jz      L(8byte_nt_move_skip)
+-
+-	.balign     16
+-L(8byte_nt_move_loop):
+-	decq	%rcx
+-
+-	movntiq	%rdx,     (%rdi)
+-	movntiq	%rdx,   8 (%rdi)
+-	movntiq	%rdx,  16 (%rdi)
+-	movntiq	%rdx,  24 (%rdi)
+-	movntiq	%rdx,  32 (%rdi)
+-	movntiq	%rdx,  40 (%rdi)
+-	movntiq	%rdx,  48 (%rdi)
+-	movntiq	%rdx,  56 (%rdi)
+-	movntiq	%rdx,  64 (%rdi)
+-	movntiq	%rdx,  72 (%rdi)
+-	movntiq	%rdx,  80 (%rdi)
+-	movntiq	%rdx,  88 (%rdi)
+-	movntiq	%rdx,  96 (%rdi)
+-	movntiq	%rdx, 104 (%rdi)
+-	movntiq	%rdx, 112 (%rdi)
+-	movntiq	%rdx, 120 (%rdi)
+-
+-	leaq	128 (%rdi),%rdi
+-
+-	jnz     L(8byte_nt_move_loop)
+-
+-	sfence
+-
+-L(8byte_nt_move_skip):
+-	andl	$127,%r8d
++#ifndef USE_MULTIARCH
++	jmp    L(aligned_now)
+ 
+-	lea    	(%rdi,%r8,1),%rdi
+-#ifndef PIC
+-	lea    	L(setPxQx)(%rip),%r11
+-	jmpq   	*(%r11,%r8,8) # old scheme remained for nonPIC
++L(SSE_pre):
+ #else
+-	lea    	L(Got0)(%rip),%r11
+-	lea     L(setPxQx)(%rip),%rcx
+-	movswq	(%rcx,%r8,2),%rcx
+-	lea    	(%rcx,%r11,1),%r11
+-	jmpq   	*%r11
++L(aligned_now):
+ #endif
+-
+-L(SSE_pre):
++#if !defined USE_MULTIARCH || defined USE_SSE2
+ 	 # fill RegXMM0 with the pattern
+ 	 movd   %rdx,%xmm0
+ 	 punpcklqdq %xmm0,%xmm0
+@@ -1342,11 +1200,162 @@ L(SSExDx):
+ 	.short     L(SSE15QB)-L(SSE0Q0)
+ #endif
+ 	.popsection
++#endif /* !defined USE_MULTIARCH || defined USE_SSE2  */
++
++	.balign     16
++#ifndef USE_MULTIARCH
++L(aligned_now):
++
++	 cmpl   $0x1,__x86_64_preferred_memory_instruction(%rip)
++	 jg     L(SSE_pre)
++#endif /* USE_MULTIARCH */
++
++L(8byte_move_try):
++	cmpq	__STOS_LOWER_BOUNDARY,%r8
++	jae	L(8byte_stos_try)
++
++	.balign     16
++L(8byte_move):
++	movq	%r8,%rcx
++	shrq	$7,%rcx
++	jz	L(8byte_move_skip)
++
++	.p2align 4
++
++L(8byte_move_loop):
++	decq	%rcx
++
++	movq	%rdx,    (%rdi)
++	movq	%rdx,  8 (%rdi)
++	movq	%rdx, 16 (%rdi)
++	movq	%rdx, 24 (%rdi)
++	movq	%rdx, 32 (%rdi)
++	movq	%rdx, 40 (%rdi)
++	movq	%rdx, 48 (%rdi)
++	movq	%rdx, 56 (%rdi)
++	movq	%rdx, 64 (%rdi)
++	movq	%rdx, 72 (%rdi)
++	movq	%rdx, 80 (%rdi)
++	movq	%rdx, 88 (%rdi)
++	movq	%rdx, 96 (%rdi)
++	movq	%rdx, 104 (%rdi)
++	movq	%rdx, 112 (%rdi)
++	movq	%rdx, 120 (%rdi)
++
++	leaq	128 (%rdi),%rdi
++
++	jnz     L(8byte_move_loop)
++
++L(8byte_move_skip):
++	andl	$127,%r8d
++	lea    	(%rdi,%r8,1),%rdi
++
++#ifndef PIC
++	lea    	L(setPxQx)(%rip),%r11
++	jmpq   	*(%r11,%r8,8) # old scheme remained for nonPIC
++#else
++	lea    	L(Got0)(%rip),%r11
++	lea	L(setPxQx)(%rip),%rcx
++	movswq	(%rcx,%r8,2),%rcx
++	lea    	(%rcx,%r11,1),%r11
++	jmpq   	*%r11
++#endif
++
++	.balign     16
++L(8byte_stos_try):
++	mov    __x86_64_shared_cache_size(%rip),%r9d // ck largest cache size
++	cmpq	%r8,%r9		// calculate the lesser of remaining
++	cmovaq	%r8,%r9		// bytes and largest cache size
++	jbe	L(8byte_stos)
++
++L(8byte_move_reuse_try):
++	cmp	__STOS_UPPER_BOUNDARY,%r8
++	jae	L(8byte_move)
++
++	.balign     16
++L(8byte_stos):
++	movq	%r9,%rcx
++	andq	$-8,%r9
++
++	shrq	$3,%rcx
++	jz	L(8byte_stos_skip)
++
++	xchgq	%rax,%rdx
++
++	rep
++	stosq
++
++	xchgq	%rax,%rdx
++
++L(8byte_stos_skip):
++	subq	%r9,%r8
++	ja	L(8byte_nt_move)
++
++	andl	$7,%r8d
++	lea    	(%rdi,%r8,1),%rdi
++#ifndef PIC
++	lea    	L(setPxQx)(%rip),%r11
++	jmpq   	*(%r11,%r8,8) # old scheme remained for nonPIC
++#else
++	lea    	L(Got0)(%rip),%r11
++	lea     L(setPxQx)(%rip),%rcx
++	movswq	(%rcx,%r8,2),%rcx
++	lea	(%rcx,%r11,1),%r11
++	jmpq   	*%r11
++#endif
++
++	.balign     16
++L(8byte_nt_move):
++	movq	%r8,%rcx
++	shrq	$7,%rcx
++	jz      L(8byte_nt_move_skip)
++
++	.balign     16
++L(8byte_nt_move_loop):
++	decq	%rcx
++
++	movntiq	%rdx,     (%rdi)
++	movntiq	%rdx,   8 (%rdi)
++	movntiq	%rdx,  16 (%rdi)
++	movntiq	%rdx,  24 (%rdi)
++	movntiq	%rdx,  32 (%rdi)
++	movntiq	%rdx,  40 (%rdi)
++	movntiq	%rdx,  48 (%rdi)
++	movntiq	%rdx,  56 (%rdi)
++	movntiq	%rdx,  64 (%rdi)
++	movntiq	%rdx,  72 (%rdi)
++	movntiq	%rdx,  80 (%rdi)
++	movntiq	%rdx,  88 (%rdi)
++	movntiq	%rdx,  96 (%rdi)
++	movntiq	%rdx, 104 (%rdi)
++	movntiq	%rdx, 112 (%rdi)
++	movntiq	%rdx, 120 (%rdi)
++
++	leaq	128 (%rdi),%rdi
++
++	jnz     L(8byte_nt_move_loop)
++
++	sfence
++
++L(8byte_nt_move_skip):
++	andl	$127,%r8d
++
++	lea    	(%rdi,%r8,1),%rdi
++#ifndef PIC
++	lea    	L(setPxQx)(%rip),%r11
++	jmpq   	*(%r11,%r8,8) # old scheme remained for nonPIC
++#else
++	lea    	L(Got0)(%rip),%r11
++	lea     L(setPxQx)(%rip),%rcx
++	movswq	(%rcx,%r8,2),%rcx
++	lea    	(%rcx,%r11,1),%r11
++	jmpq   	*%r11
++#endif
+ 
+ END (memset)
+ libc_hidden_builtin_def (memset)
+ 
+-#if defined PIC && !defined NOT_IN_libc
++#if defined PIC && !defined NOT_IN_libc && !defined USE_MULTIARCH
+ strong_alias (__memset_chk, __memset_zero_constant_len_parameter)
+ 	.section .gnu.warning.__memset_zero_constant_len_parameter
+ 	.string "memset used with constant zero length parameter; this could be due to transposed parameters"
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/Makefile
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/multiarch/Makefile
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/Makefile
+@@ -7,7 +7,8 @@ ifeq ($(subdir),string)
+ sysdep_routines += stpncpy-c strncpy-c strcmp-ssse3 strncmp-ssse3 \
+ 		   strend-sse4 memcmp-sse4 \
+ 		   strcasestr-nonascii strcasecmp_l-ssse3 \
+-		   strncase_l-ssse3
++		   strncase_l-ssse3 \
++		   memset-x86-64
+ ifeq (yes,$(config-cflags-sse4))
+ sysdep_routines += strcspn-c strpbrk-c strspn-c strstr-c strcasestr-c
+ CFLAGS-strcspn-c.c += -msse4
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/bzero.S
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/bzero.S
+@@ -0,0 +1,56 @@
++/* Multiple versions of bzero
++   Copyright (C) 2010 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library 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
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++#include <sysdep.h>
++#include <init-arch.h>
++
++	.text
++ENTRY(__bzero)
++	.type	__bzero, @gnu_indirect_function
++	cmpl	$0, __cpu_features+KIND_OFFSET(%rip)
++	jne	1f
++	call	__init_cpu_features
++1:	leaq	__bzero_x86_64(%rip), %rax
++	testl	$bit_Prefer_SSE_for_memop, __cpu_features+FEATURE_OFFSET+index_Prefer_SSE_for_memop(%rip)
++	jz	2f
++	leaq	__bzero_sse2(%rip), %rax
++2:	ret
++END(__bzero)
++
++	.type	__bzero_sse2, @function
++__bzero_sse2:
++	cfi_startproc
++	CALL_MCOUNT
++	mov	%rsi,%rdx	/* Adjust parameter.  */
++	xorl	%esi,%esi	/* Fill with 0s.  */
++	jmp	__memset_sse2
++	cfi_endproc
++	.size __bzero_sse2, .-__bzero_sse2
++
++	.type	__bzero_x86_64, @function
++__bzero_x86_64:
++	cfi_startproc
++	CALL_MCOUNT
++	mov	%rsi,%rdx	/* Adjust parameter.  */
++	xorl	%esi,%esi	/* Fill with 0s.  */
++	jmp	__memset_x86_64
++	cfi_endproc
++	.size __bzero_x86_64, .-__bzero_x86_64
++
++weak_alias (__bzero, bzero)
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/cacheinfo.c
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/cacheinfo.c
+@@ -0,0 +1,2 @@
++#define DISABLE_PREFERRED_MEMORY_INSTRUCTION
++#include "../cacheinfo.c"
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/init-arch.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/multiarch/init-arch.c
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/init-arch.c
+@@ -59,6 +59,11 @@ __init_cpu_features (void)
+ 
+       get_common_indeces (&family, &model);
+ 
++      /* Intel processors prefer SSE instruction for memory/string
++	 routines if they are avaiable.  */
++      __cpu_features.feature[index_Prefer_SSE_for_memop]
++	|= bit_Prefer_SSE_for_memop;
++
+       unsigned int eax = __cpu_features.cpuid[COMMON_CPUID_INDEX_1].eax;
+       unsigned int extended_family = (eax >> 20) & 0xff;
+       unsigned int extended_model = (eax >> 12) & 0xf0;
+@@ -92,6 +97,14 @@ __init_cpu_features (void)
+       kind = arch_kind_amd;
+ 
+       get_common_indeces (&family, &model);
++
++      unsigned int ecx = __cpu_features.cpuid[COMMON_CPUID_INDEX_1].ecx;
++
++      /* AMD processors prefer SSE instructions for memory/string routines
++	 if they are available, otherwise they prefer integer instructions.  */
++      if ((ecx & 0x200))
++	__cpu_features.feature[index_Prefer_SSE_for_memop]
++	  |= bit_Prefer_SSE_for_memop;
+     }
+   else
+     kind = arch_kind_other;
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/init-arch.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/multiarch/init-arch.h
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/init-arch.h
+@@ -16,7 +16,8 @@
+    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA.  */
+ 
+-#define bit_Fast_Rep_String	(1 << 0)
++#define bit_Fast_Rep_String		(1 << 0)
++#define bit_Prefer_SSE_for_memop	(1 << 3)
+ 
+ #ifdef	__ASSEMBLER__
+ 
+@@ -33,6 +34,7 @@
+ # define index_SSE4_2	COMMON_CPUID_INDEX_1*CPUID_SIZE+CPUID_ECX_OFFSET
+ 
+ #define index_Fast_Rep_String	FEATURE_INDEX_1*FEATURE_SIZE
++# define index_Prefer_SSE_for_memop	FEATURE_INDEX_1*FEATURE_SIZE
+ 
+ #else	/* __ASSEMBLER__ */
+ 
+@@ -103,5 +105,12 @@ extern const struct cpu_features *__get_
+ # define HAS_FMA	HAS_CPU_FEATURE (COMMON_CPUID_INDEX_1, ecx, 12)
+ 
+ # define index_Fast_Rep_String	FEATURE_INDEX_1
++# define index_Prefer_SSE_for_memop	FEATURE_INDEX_1
++
++#define HAS_ARCH_FEATURE(idx, bit) \
++  ((__get_cpu_features ()->feature[idx] & (bit)) != 0)
++
++#define HAS_PREFER_SSE_FOR_MEMOP \
++  HAS_ARCH_FEATURE (index_Prefer_SSE_for_memop, bit_Prefer_SSE_for_memop)
+ 
+ #endif	/* __ASSEMBLER__ */
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/memset-x86-64.S
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/memset-x86-64.S
+@@ -0,0 +1,18 @@
++#include <sysdep.h>
++
++#ifndef NOT_IN_libc
++# undef ENTRY_CHK
++# define ENTRY_CHK(name) \
++	.type __memset_chk_x86_64, @function; \
++	.globl __memset_chk_x86_64; \
++	.p2align 4; \
++	__memset_chk_x86_64: cfi_startproc; \
++	CALL_MCOUNT
++# undef END_CHK
++# define END_CHK(name) \
++	cfi_endproc; .size __memset_chk_x86_64, .-__memset_chk_x86_64
++
++# define libc_hidden_builtin_def(name)
++# define memset __memset_x86_64
++# include "../memset.S"
++#endif
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/memset.S
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/memset.S
+@@ -0,0 +1,74 @@
++/* Multiple versions of memset
++   Copyright (C) 2010 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library 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
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++#include <sysdep.h>
++#include <init-arch.h>
++
++/* Define multiple versions only for the definition in lib.  */
++#ifndef NOT_IN_libc
++ENTRY(memset)
++	.type	memset, @gnu_indirect_function
++	cmpl	$0, __cpu_features+KIND_OFFSET(%rip)
++	jne	1f
++	call	__init_cpu_features
++1:	leaq	__memset_x86_64(%rip), %rax
++	testl	$bit_Prefer_SSE_for_memop, __cpu_features+FEATURE_OFFSET+index_Prefer_SSE_for_memop(%rip)
++	jz	2f
++	leaq	__memset_sse2(%rip), %rax
++2:	ret
++END(memset)
++
++# define USE_SSE2 1
++
++# undef ENTRY
++# define ENTRY(name) \
++	.type __memset_sse2, @function; \
++	.globl __memset_sse2; \
++	.p2align 4; \
++	__memset_sse2: cfi_startproc; \
++	CALL_MCOUNT
++# undef END
++# define END(name) \
++	cfi_endproc; .size __memset_sse2, .-__memset_sse2
++
++# undef ENTRY_CHK
++# define ENTRY_CHK(name) \
++	.type __memset_chk_sse2, @function; \
++	.globl __memset_chk_sse2; \
++	.p2align 4; \
++	__memset_chk_sse2: cfi_startproc; \
++	CALL_MCOUNT
++# undef END_CHK
++# define END_CHK(name) \
++	cfi_endproc; .size __memset_chk_sse2, .-__memset_chk_sse2
++
++# ifdef SHARED
++#  undef libc_hidden_builtin_def
++/* It doesn't make sense to send libc-internal memset calls through a PLT.
++   The speedup we get from using GPR instruction is likely eaten away
++   by the indirect call in the PLT.  */
++#  define libc_hidden_builtin_def(name) \
++	.globl __GI_memset; __GI_memset = __memset_sse2
++# endif
++
++# undef strong_alias
++# define strong_alias(original, alias)
++#endif
++
++#include "../memset.S"
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/memset_chk.S
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/memset_chk.S
+@@ -0,0 +1,44 @@
++/* Multiple versions of __memset_chk
++   Copyright (C) 2010 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library 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
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++#include <sysdep.h>
++#include <init-arch.h>
++
++/* Define multiple versions only for the definition in lib.  */
++#ifndef NOT_IN_libc
++# ifdef SHARED
++ENTRY(__memset_chk)
++	.type	__memset_chk, @gnu_indirect_function
++	cmpl	$0, __cpu_features+KIND_OFFSET(%rip)
++	jne	1f
++	call	__init_cpu_features
++1:	leaq	__memset_chk_x86_64(%rip), %rax
++	testl	$bit_Prefer_SSE_for_memop, __cpu_features+FEATURE_OFFSET+index_Prefer_SSE_for_memop(%rip)
++	jz	2f
++	leaq	__memset_chk_sse2(%rip), %rax
++2:	ret
++END(__memset_chk)
++
++strong_alias (__memset_chk, __memset_zero_constant_len_parameter)
++	.section .gnu.warning.__memset_zero_constant_len_parameter
++	.string "memset used with constant zero length parameter; this could be due to transposed parameters"
++# else
++#  include "../memset_chk.S"
++# endif
++#endif
diff --git a/SOURCES/glibc-rh676591.patch b/SOURCES/glibc-rh676591.patch
new file mode 100644
index 0000000..fd6df1e
--- /dev/null
+++ b/SOURCES/glibc-rh676591.patch
@@ -0,0 +1,352 @@
+2011-05-15  Ulrich Drepper  <drepper@gmail.com>
+
+	[BZ #11901]
+	* include/stdlib.h: Move include protection to the right place.
+	Define abort_msg_s.  Declare __abort_msg with it.
+	* stdlib/abort.c (__abort_msg): Adjust type.
+	* assert/assert.c (__assert_fail_base): New function.  Majority
+	of code from __assert_fail.  Allocate memory for __abort_msg with
+	mmap.
+	(__assert_fail): Now call __assert_fail_base.
+	* assert/assert-perr.c: Remove bulk of implementation.  Use
+	__assert_fail_base.
+	* include/assert.hL Declare __assert_fail_base.
+	* sysdeps/posix/libc_fatal.c: Allocate memory for __abort_msg with
+	mmap.
+	* sysdeps/unix/sysv/linux/libc_fatal.c: Likewise.
+
+Index: glibc-2.12-2-gc4ccff1/assert/assert-perr.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/assert/assert-perr.c
++++ glibc-2.12-2-gc4ccff1/assert/assert-perr.c
+@@ -17,66 +17,23 @@
+    02111-1307 USA.  */
+ 
+ #include <assert.h>
+-#include <atomic.h>
+ #include <libintl.h>
+-#include <stdio.h>
+-#include <stdlib.h>
+ #include <string.h>
+-#include <sysdep.h>
+-#include <unistd.h>
+ 
+ 
+-extern const char *__progname;
+-
+-#ifdef USE_IN_LIBIO
+-# include <wchar.h>
+-# include <libio/iolibio.h>
+-# define fflush(s) INTUSE(_IO_fflush) (s)
+-#endif
+-
+ /* This function, when passed an error number, a filename, and a line
+    number, prints a message on the standard error stream of the form:
+-   	a.c:10: foobar: Unexpected error: Computer bought the farm
++	a.c:10: foobar: Unexpected error: Computer bought the farm
+    It then aborts program execution via a call to `abort'.  */
+-
+-#ifdef FATAL_PREPARE_INCLUDE
+-# include FATAL_PREPARE_INCLUDE
+-#endif
+-
+ void
+ __assert_perror_fail (int errnum,
+ 		      const char *file, unsigned int line,
+ 		      const char *function)
+ {
+   char errbuf[1024];
+-  char *buf;
+-
+-#ifdef FATAL_PREPARE
+-  FATAL_PREPARE;
+-#endif
+-
+-  if (__asprintf (&buf, _("%s%s%s:%u: %s%sUnexpected error: %s.\n"),
+-		  __progname, __progname[0] ? ": " : "",
+-		  file, line,
+-		  function ? function : "", function ? ": " : "",
+-		  __strerror_r (errnum, errbuf, sizeof errbuf)) >= 0)
+-    {
+-      /* Print the message.  */
+-      (void) __fxprintf (NULL, "%s", buf);
+-      (void) fflush (stderr);
+-
+-      /* We have to free the old buffer since the application might
+-	 catch the SIGABRT signal.  */
+-      char *old = atomic_exchange_acq (&__abort_msg, buf);
+-      free (old);
+-    }
+-  else
+-    {
+-      /* At least print a minimal message.  */
+-      static const char errstr[] = "Unexpected error.\n";
+-      __libc_write (STDERR_FILENO, errstr, sizeof (errstr) - 1);
+-    }
+ 
+-  abort ();
++  char *e = __strerror_r (errnum, errbuf, sizeof errbuf);
++  __assert_fail_base (_("%s%s%s:%u: %s%sUnexpected error: %s.\n"),
++		      e, file, line, function);
+ }
+ libc_hidden_def (__assert_perror_fail)
+Index: glibc-2.12-2-gc4ccff1/assert/assert.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/assert/assert.c
++++ glibc-2.12-2-gc4ccff1/assert/assert.c
+@@ -19,11 +19,13 @@
+ 
+ #include <assert.h>
+ #include <atomic.h>
++#include <ldsodefs.h>
+ #include <libintl.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <sysdep.h>
+ #include <unistd.h>
++#include <sys/mman.h>
+ 
+ 
+ extern const char *__progname;
+@@ -45,31 +47,44 @@ extern const char *__progname;
+ #endif
+ 
+ 
+-#undef __assert_fail
+ void
+-__assert_fail (const char *assertion, const char *file, unsigned int line,
+-	       const char *function)
++__assert_fail_base (const char *fmt, const char *assertion, const char *file,
++		    unsigned int line, const char *function)
+ {
+-  char *buf;
++  char *str;
+ 
+ #ifdef FATAL_PREPARE
+   FATAL_PREPARE;
+ #endif
+ 
+-  if (__asprintf (&buf, _("%s%s%s:%u: %s%sAssertion `%s' failed.\n"),
++  int total;
++  if (__asprintf (&str, fmt,
+ 		  __progname, __progname[0] ? ": " : "",
+ 		  file, line,
+ 		  function ? function : "", function ? ": " : "",
+-		  assertion) >= 0)
++		  assertion, &total) >= 0)
+     {
+       /* Print the message.  */
+-      (void) __fxprintf (NULL, "%s", buf);
++      (void) __fxprintf (NULL, "%s", str);
+       (void) fflush (stderr);
+ 
+-      /* We have to free the old buffer since the application might
+-	 catch the SIGABRT signal.  */
+-      char *old = atomic_exchange_acq (&__abort_msg, buf);
+-      free (old);
++      total = (total + 1 + GLRO(dl_pagesize) - 1) & ~(GLRO(dl_pagesize) - 1);
++      struct abort_msg_s *buf = __mmap (NULL, total, PROT_READ | PROT_WRITE,
++					MAP_ANON | MAP_PRIVATE, -1, 0);
++      if (__builtin_expect (buf != MAP_FAILED, 1))
++	{
++	  buf->size = total;
++	  strcpy (buf->msg, str);
++
++	  /* We have to free the old buffer since the application might
++	     catch the SIGABRT signal.  */
++	  struct abort_msg_s *old = atomic_exchange_acq (&__abort_msg, buf);
++
++	  if (old != NULL)
++	    __munmap (old, old->size);
++	}
++
++      free (str);
+     }
+   else
+     {
+@@ -80,4 +95,14 @@ __assert_fail (const char *assertion, co
+ 
+   abort ();
+ }
++
++
++#undef __assert_fail
++void
++__assert_fail (const char *assertion, const char *file, unsigned int line,
++	       const char *function)
++{
++  __assert_fail_base (_("%s%s%s:%u: %s%sAssertion `%s' failed.\n%n"),
++		      assertion, file, line, function);
++}
+ hidden_def(__assert_fail)
+Index: glibc-2.12-2-gc4ccff1/include/assert.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/include/assert.h
++++ glibc-2.12-2-gc4ccff1/include/assert.h
+@@ -13,6 +13,12 @@ extern void __assert_perror_fail (int __
+ 				  __const char *__function)
+      __THROW __attribute__ ((__noreturn__));
+ 
++/* The real implementation of the two functions above.  */
++extern void __assert_fail_base (const char *fmt, const char *assertion,
++				const char *file, unsigned int line,
++				const char *function)
++     __THROW  __attribute__ ((__noreturn__));
++
+ #if !defined NOT_IN_libc || defined IS_IN_rtld
+ hidden_proto (__assert_fail)
+ hidden_proto (__assert_perror_fail)
+Index: glibc-2.12-2-gc4ccff1/include/stdlib.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/include/stdlib.h
++++ glibc-2.12-2-gc4ccff1/include/stdlib.h
+@@ -223,16 +223,21 @@ extern int __qfcvt_r (long double __valu
+ # define __cxa_atexit(func, arg, d) INTUSE(__cxa_atexit) (func, arg, d)
+ # endif
+ 
+-#endif
+-
+ extern void *__default_morecore (ptrdiff_t) __THROW;
+ libc_hidden_proto (__default_morecore)
+ 
+-extern char *__abort_msg;
++struct abort_msg_s
++{
++  unsigned int size;
++  char msg[0];
++};
++extern struct abort_msg_s *__abort_msg;
+ libc_hidden_proto (__abort_msg)
+ 
+ __END_DECLS
+ 
++#endif
++
+ #undef __Need_M_And_C
+ 
+ #endif  /* include/stdlib.h */
+Index: glibc-2.12-2-gc4ccff1/stdlib/abort.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/stdlib/abort.c
++++ glibc-2.12-2-gc4ccff1/stdlib/abort.c
+@@ -37,7 +37,7 @@
+ #endif
+ 
+ /* Exported variable to locate abort message in core files etc.  */
+-char *__abort_msg __attribute__ ((nocommon));
++struct abort_msg_s *__abort_msg __attribute__ ((nocommon));
+ libc_hidden_def (__abort_msg)
+ 
+ /* We must avoid to run in circles.  Therefore we remember how far we
+Index: glibc-2.12-2-gc4ccff1/sysdeps/posix/libc_fatal.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/posix/libc_fatal.c
++++ glibc-2.12-2-gc4ccff1/sysdeps/posix/libc_fatal.c
+@@ -20,6 +20,7 @@
+ #include <atomic.h>
+ #include <errno.h>
+ #include <fcntl.h>
++#include <ldsodefs.h>
+ #include <paths.h>
+ #include <stdarg.h>
+ #include <stdbool.h>
+@@ -125,18 +126,28 @@ __libc_message (int do_abort, const char
+       if (TEMP_FAILURE_RETRY (__writev (fd, iov, nlist)) == total)
+ 	written = true;
+ 
+-      char *buf = do_abort ? malloc (total + 1) : NULL;
+-      if (buf != NULL)
++      if (do_abort)
+ 	{
+-	  char *wp = buf;
+-	  for (int cnt = 0; cnt < nlist; ++cnt)
+-	    wp = mempcpy (wp, iov[cnt].iov_base, iov[cnt].iov_len);
+-	  *wp = '\0';
+-
+-	  /* We have to free the old buffer since the application might
+-	     catch the SIGABRT signal.  */
+-	  char *old = atomic_exchange_acq (&__abort_msg, buf);
+-	  free (old);
++	  total = ((total + 1 + GLRO(dl_pagesize) - 1)
++		   & ~(GLRO(dl_pagesize) - 1));
++	  struct abort_msg_s *buf = __mmap (NULL, total,
++					    PROT_READ | PROT_WRITE,
++					    MAP_ANON | MAP_PRIVATE, -1, 0);
++	  if (buf != MAP_FAILED)
++	    {
++	      buf->size = total;
++	      char *wp = buf->msg;
++	      for (int cnt = 0; cnt < nlist; ++cnt)
++		wp = mempcpy (wp, iov[cnt].iov_base, iov[cnt].iov_len);
++	      *wp = '\0';
++
++	      /* We have to free the old buffer since the application might
++		 catch the SIGABRT signal.  */
++	      struct abort_msg_s *old = atomic_exchange_acq (&__abort_msg,
++							     buf);
++	      if (old != NULL)
++		__munmap (old, old->size);
++	    }
+ 	}
+     }
+ 
+Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/libc_fatal.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/libc_fatal.c
++++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/libc_fatal.c
+@@ -20,6 +20,7 @@
+ #include <atomic.h>
+ #include <errno.h>
+ #include <fcntl.h>
++#include <ldsodefs.h>
+ #include <paths.h>
+ #include <stdarg.h>
+ #include <stdbool.h>
+@@ -28,6 +29,7 @@
+ #include <string.h>
+ #include <sysdep.h>
+ #include <unistd.h>
++#include <sys/mman.h>
+ #include <sys/syslog.h>
+ #include <execinfo.h>
+ 
+@@ -134,18 +136,28 @@ __libc_message (int do_abort, const char
+       if (cnt == total)
+ 	written = true;
+ 
+-      char *buf = do_abort ? malloc (total + 1) : NULL;
+-      if (buf != NULL)
++      if (do_abort)
+ 	{
+-	  char *wp = buf;
+-	  for (int cnt = 0; cnt < nlist; ++cnt)
+-	    wp = mempcpy (wp, iov[cnt].iov_base, iov[cnt].iov_len);
+-	  *wp = '\0';
+-
+-	  /* We have to free the old buffer since the application might
+-	     catch the SIGABRT signal.  */
+-	  char *old = atomic_exchange_acq (&__abort_msg, buf);
+-	  free (old);
++	  total = ((total + 1 + GLRO(dl_pagesize) - 1)
++		   & ~(GLRO(dl_pagesize) - 1));
++	  struct abort_msg_s *buf = __mmap (NULL, total,
++					    PROT_READ | PROT_WRITE,
++					    MAP_ANON | MAP_PRIVATE, -1, 0);
++	  if (__builtin_expect (buf != MAP_FAILED, 1))
++	    {
++	      buf->size = total;
++	      char *wp = buf->msg;
++	      for (int cnt = 0; cnt < nlist; ++cnt)
++		wp = mempcpy (wp, iov[cnt].iov_base, iov[cnt].iov_len);
++	      *wp = '\0';
++
++	      /* We have to free the old buffer since the application might
++		 catch the SIGABRT signal.  */
++	      struct abort_msg_s *old = atomic_exchange_acq (&__abort_msg,
++							     buf);
++	      if (old != NULL)
++		__munmap (old, old->size);
++	    }
+ 	}
+     }
+ 
diff --git a/SOURCES/glibc-rh681054.patch b/SOURCES/glibc-rh681054.patch
new file mode 100644
index 0000000..27b7361
--- /dev/null
+++ b/SOURCES/glibc-rh681054.patch
@@ -0,0 +1,514 @@
+2011-03-18  Ulrich Drepper  <drepper@gmail.com>
+
+	* posix/fnmatch.c (fnmatch): Check size of pattern in wide
+	character representation.
+	Partly based on a patch by Tomas Hoger <thoger@redhat.com>.
+
+2010-11-11  Andreas Schwab  <schwab@redhat.com>
+
+	* posix/fnmatch_loop.c (NEW_PATTERN): Fix use of alloca.
+	* posix/Makefile (tests): Add $(objpfx)tst-fnmatch-mem.
+	(tst-fnmatch-ENV): Set MALLOC_TRACE.
+	($(objpfx)tst-fnmatch-mem): New rule.
+	(generated): Add tst-fnmatch-mem and tst-fnmatch.mtrace.
+	* posix/tst-fnmatch.c (main): Call mtrace.
+
+2010-08-09  Ulrich Drepper  <drepper@redhat.com>
+
+	[BZ #11883]
+	* posix/fnmatch.c: Keep track of alloca use and fall back on malloc.
+	* posix/fnmatch_loop.c: Likewise.
+
+Index: glibc-2.12-2-gc4ccff1/posix/Makefile
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/posix/Makefile
++++ glibc-2.12-2-gc4ccff1/posix/Makefile
+@@ -114,7 +114,8 @@ generated := $(addprefix wordexp-test-re
+ 	     tst-rxspencer-mem tst-rxspencer.mtrace tst-getconf.out \
+ 	     tst-pcre-mem tst-pcre.mtrace tst-boost-mem tst-boost.mtrace \
+ 	     bug-ga2.mtrace bug-ga2-mem bug-glob2.mtrace bug-glob2-mem \
+-	     tst-vfork3-mem tst-vfork3.mtrace getconf.speclist
++	     tst-vfork3-mem tst-vfork3.mtrace getconf.speclist \
++	     tst-fnmatch-mem tst-fnmatch.mtrace
+ 
+ include ../Rules
+ 
+@@ -226,7 +227,7 @@ ifeq (no,$(cross-compiling))
+ tests: $(objpfx)bug-regex2-mem $(objpfx)bug-regex14-mem \
+   $(objpfx)bug-regex21-mem $(objpfx)tst-rxspencer-mem \
+   $(objpfx)tst-pcre-mem $(objpfx)tst-boost-mem $(objpfx)tst-getconf.out \
+-  $(objpfx)bug-glob2-mem $(objpfx)tst-vfork3-mem
++  $(objpfx)bug-glob2-mem $(objpfx)tst-vfork3-mem $(objpfx)tst-fnmatch-mem
+ xtests: $(objpfx)bug-ga2-mem
+ endif
+ 
+@@ -238,6 +239,11 @@ annexc-CFLAGS = -O
+ $(objpfx)annexc: annexc.c
+ 	$(native-compile)
+ 
++tst-fnmatch-ENV += MALLOC_TRACE=$(objpfx)tst-fnmatch.mtrace
++
++$(objpfx)tst-fnmatch-mem: $(objpfx)tst-fnmatch.out
++	$(common-objpfx)malloc/mtrace $(objpfx)tst-fnmatch.mtrace > $@
++
+ bug-regex2-ENV = MALLOC_TRACE=$(objpfx)bug-regex2.mtrace
+ 
+ $(objpfx)bug-regex2-mem: $(objpfx)bug-regex2.out
+Index: glibc-2.12-2-gc4ccff1/posix/fnmatch.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/posix/fnmatch.c
++++ glibc-2.12-2-gc4ccff1/posix/fnmatch.c
+@@ -41,6 +41,12 @@
+ # include <stdlib.h>
+ #endif
+ 
++#ifdef _LIBC
++# include <alloca.h>
++#else
++# define alloca_account(size., var) alloca (size)
++#endif
++
+ /* For platform which support the ISO C amendement 1 functionality we
+    support user defined character classes.  */
+ #if defined _LIBC || (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H)
+@@ -330,8 +336,11 @@ fnmatch (pattern, string, flags)
+       mbstate_t ps;
+       size_t n;
+       const char *p;
++      wchar_t *wpattern_malloc = NULL;
+       wchar_t *wpattern;
++      wchar_t *wstring_malloc = NULL;
+       wchar_t *wstring;
++      size_t alloca_used = 0;
+ 
+       /* Convert the strings into wide characters.  */
+       memset (&ps, '\0', sizeof (ps));
+@@ -343,7 +352,8 @@ fnmatch (pattern, string, flags)
+ #endif
+       if (__builtin_expect (n < 1024, 1))
+ 	{
+-	  wpattern = (wchar_t *) alloca ((n + 1) * sizeof (wchar_t));
++	  wpattern = (wchar_t *) alloca_account ((n + 1) * sizeof (wchar_t),
++						 alloca_used);
+ 	  n = mbsrtowcs (wpattern, &p, n + 1, &ps);
+ 	  if (__builtin_expect (n == (size_t) -1, 0))
+ 	    /* Something wrong.
+@@ -365,8 +375,16 @@ fnmatch (pattern, string, flags)
+ 	       XXX Do we have to set `errno' to something which mbsrtows hasn't
+ 	       already done?  */
+ 	    return -1;
+-	  wpattern = (wchar_t *) alloca ((n + 1) * sizeof (wchar_t));
++	  if (__builtin_expect (n >= (size_t) -1 / sizeof (wchar_t), 0))
++	    {
++	      __set_errno (ENOMEM);
++	      return -2;
++	    }
++	  wpattern_malloc = wpattern
++	    = (wchar_t *) malloc ((n + 1) * sizeof (wchar_t));
+ 	  assert (mbsinit (&ps));
++	  if (wpattern == NULL)
++	    return -2;
+ 	  (void) mbsrtowcs (wpattern, &pattern, n + 1, &ps);
+ 	}
+ 
+@@ -379,13 +397,18 @@ fnmatch (pattern, string, flags)
+       p = string;
+       if (__builtin_expect (n < 1024, 1))
+ 	{
+-	  wstring = (wchar_t *) alloca ((n + 1) * sizeof (wchar_t));
++	  wstring = (wchar_t *) alloca_account ((n + 1) * sizeof (wchar_t),
++						alloca_used);
+ 	  n = mbsrtowcs (wstring, &p, n + 1, &ps);
+ 	  if (__builtin_expect (n == (size_t) -1, 0))
+-	    /* Something wrong.
+-	       XXX Do we have to set `errno' to something which mbsrtows hasn't
+-	       already done?  */
+-	    return -1;
++	    {
++	      /* Something wrong.
++		 XXX Do we have to set `errno' to something which
++		 mbsrtows hasn't already done?  */
++	    free_return:
++	      free (wpattern_malloc);
++	      return -1;
++	    }
+ 	  if (p)
+ 	    {
+ 	      memset (&ps, '\0', sizeof (ps));
+@@ -400,19 +423,38 @@ fnmatch (pattern, string, flags)
+ 	    /* Something wrong.
+ 	       XXX Do we have to set `errno' to something which mbsrtows hasn't
+ 	       already done?  */
+-	    return -1;
+-	  wstring = (wchar_t *) alloca ((n + 1) * sizeof (wchar_t));
++	    goto free_return;
++	  if (__builtin_expect (n >= (size_t) -1 / sizeof (wchar_t), 0))
++	    {
++	      free (wpattern_malloc);
++	      __set_errno (ENOMEM);
++	      return -2;
++	    }
++
++	  wstring_malloc = wstring
++	    = (wchar_t *) malloc ((n + 1) * sizeof (wchar_t));
++	  if (wstring == NULL)
++	    {
++	      free (wpattern_malloc);
++	      return -2;
++	    }
+ 	  assert (mbsinit (&ps));
+ 	  (void) mbsrtowcs (wstring, &string, n + 1, &ps);
+ 	}
+ 
+-      return internal_fnwmatch (wpattern, wstring, wstring + n,
+-				flags & FNM_PERIOD, flags, NULL);
++      int res = internal_fnwmatch (wpattern, wstring, wstring + n,
++				   flags & FNM_PERIOD, flags, NULL,
++				   alloca_used);
++
++      free (wstring_malloc);
++      free (wpattern_malloc);
++
++      return res;
+     }
+ # endif  /* mbstate_t and mbsrtowcs or _LIBC.  */
+ 
+   return internal_fnmatch (pattern, string, string + strlen (string),
+-			   flags & FNM_PERIOD, flags, NULL);
++			   flags & FNM_PERIOD, flags, NULL, 0);
+ }
+ 
+ # ifdef _LIBC
+Index: glibc-2.12-2-gc4ccff1/posix/fnmatch_loop.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/posix/fnmatch_loop.c
++++ glibc-2.12-2-gc4ccff1/posix/fnmatch_loop.c
+@@ -28,22 +28,24 @@ struct STRUCT
+    it matches, nonzero if not.  */
+ static int FCT (const CHAR *pattern, const CHAR *string,
+ 		const CHAR *string_end, int no_leading_period, int flags,
+-		struct STRUCT *ends)
++		struct STRUCT *ends, size_t alloca_used)
+      internal_function;
+ static int EXT (INT opt, const CHAR *pattern, const CHAR *string,
+-		const CHAR *string_end, int no_leading_period, int flags)
++		const CHAR *string_end, int no_leading_period, int flags,
++		size_t alloca_used)
+      internal_function;
+ static const CHAR *END (const CHAR *patternp) internal_function;
+ 
+ static int
+ internal_function
+-FCT (pattern, string, string_end, no_leading_period, flags, ends)
++FCT (pattern, string, string_end, no_leading_period, flags, ends, alloca_used)
+      const CHAR *pattern;
+      const CHAR *string;
+      const CHAR *string_end;
+      int no_leading_period;
+      int flags;
+      struct STRUCT *ends;
++     size_t alloca_used;
+ {
+   register const CHAR *p = pattern, *n = string;
+   register UCHAR c;
+@@ -67,10 +69,8 @@ FCT (pattern, string, string_end, no_lea
+ 	case L('?'):
+ 	  if (__builtin_expect (flags & FNM_EXTMATCH, 0) && *p == '(')
+ 	    {
+-	      int res;
+-
+-	      res = EXT (c, p, n, string_end, no_leading_period,
+-			 flags);
++	      int res = EXT (c, p, n, string_end, no_leading_period,
++			     flags, alloca_used);
+ 	      if (res != -1)
+ 		return res;
+ 	    }
+@@ -99,10 +99,8 @@ FCT (pattern, string, string_end, no_lea
+ 	case L('*'):
+ 	  if (__builtin_expect (flags & FNM_EXTMATCH, 0) && *p == '(')
+ 	    {
+-	      int res;
+-
+-	      res = EXT (c, p, n, string_end, no_leading_period,
+-			 flags);
++	      int res = EXT (c, p, n, string_end, no_leading_period,
++			     flags, alloca_used);
+ 	      if (res != -1)
+ 		return res;
+ 	    }
+@@ -191,7 +189,7 @@ FCT (pattern, string, string_end, no_lea
+ 
+ 		  for (--p; n < endp; ++n, no_leading_period = 0)
+ 		    if (FCT (p, n, string_end, no_leading_period, flags2,
+-			     &end) == 0)
++			     &end, alloca_used) == 0)
+ 		      goto found;
+ 		}
+ 	      else if (c == L('/') && (flags & FNM_FILE_NAME))
+@@ -200,7 +198,7 @@ FCT (pattern, string, string_end, no_lea
+ 		    ++n;
+ 		  if (n < string_end && *n == L('/')
+ 		      && (FCT (p, n + 1, string_end, flags & FNM_PERIOD, flags,
+-			       NULL) == 0))
++			       NULL, alloca_used) == 0))
+ 		    return 0;
+ 		}
+ 	      else
+@@ -214,7 +212,7 @@ FCT (pattern, string, string_end, no_lea
+ 		  for (--p; n < endp; ++n, no_leading_period = 0)
+ 		    if (FOLD ((UCHAR) *n) == c
+ 			&& (FCT (p, n, string_end, no_leading_period, flags2,
+-				 &end) == 0))
++				 &end, alloca_used) == 0))
+ 		      {
+ 		      found:
+ 			if (end.pattern == NULL)
+@@ -749,7 +747,7 @@ FCT (pattern, string, string_end, no_lea
+ 					       _NL_COLLATE_SYMB_EXTRAMB);
+ 
+ 				/* Locate the character in the hashing
+-                                   table.  */
++				   table.  */
+ 				hash = elem_hash (str, c1);
+ 
+ 				idx = 0;
+@@ -971,9 +969,8 @@ FCT (pattern, string, string_end, no_lea
+ 	case L('!'):
+ 	  if (__builtin_expect (flags & FNM_EXTMATCH, 0) && *p == '(')
+ 	    {
+-	      int res;
+-
+-	      res = EXT (c, p, n, string_end, no_leading_period, flags);
++	      int res = EXT (c, p, n, string_end, no_leading_period, flags,
++			     alloca_used);
+ 	      if (res != -1)
+ 		return res;
+ 	    }
+@@ -1052,26 +1049,32 @@ END (const CHAR *pattern)
+ static int
+ internal_function
+ EXT (INT opt, const CHAR *pattern, const CHAR *string, const CHAR *string_end,
+-     int no_leading_period, int flags)
++     int no_leading_period, int flags, size_t alloca_used)
+ {
+   const CHAR *startp;
+   int level;
+   struct patternlist
+   {
+     struct patternlist *next;
++    CHAR malloced;
+     CHAR str[0];
+   } *list = NULL;
+   struct patternlist **lastp = &list;
+   size_t pattern_len = STRLEN (pattern);
++  int any_malloced = 0;
+   const CHAR *p;
+   const CHAR *rs;
++  int retval = 0;
+ 
+   /* Parse the pattern.  Store the individual parts in the list.  */
+   level = 0;
+   for (startp = p = pattern + 1; level >= 0; ++p)
+     if (*p == L('\0'))
+-      /* This is an invalid pattern.  */
+-      return -1;
++      {
++	/* This is an invalid pattern.  */
++	retval = -1;
++	goto out;
++      }
+     else if (*p == L('['))
+       {
+ 	/* Handle brackets special.  */
+@@ -1088,8 +1091,11 @@ EXT (INT opt, const CHAR *pattern, const
+ 	/* Skip over all characters of the list.  */
+ 	while (*p != L(']'))
+ 	  if (*p++ == L('\0'))
+-	    /* This is no valid pattern.  */
+-	    return -1;
++	    {
++	      /* This is no valid pattern.  */
++	      retval = -1;
++	      goto out;
++	    }
+       }
+     else if ((*p == L('?') || *p == L('*') || *p == L('+') || *p == L('@')
+ 	      || *p == L('!')) && p[1] == L('('))
+@@ -1102,15 +1108,25 @@ EXT (INT opt, const CHAR *pattern, const
+ 	    /* This means we found the end of the pattern.  */
+ #define NEW_PATTERN \
+ 	    struct patternlist *newp;					      \
+-									      \
+-	    if (opt == L('?') || opt == L('@'))				      \
+-	      newp = alloca (sizeof (struct patternlist)		      \
+-			     + (pattern_len * sizeof (CHAR)));		      \
++	    size_t slen = (opt == L('?') || opt == L('@')		      \
++			   ? pattern_len : (p - startp + 1));		      \
++	    slen = sizeof (struct patternlist) + (slen * sizeof (CHAR));      \
++	    int malloced = ! __libc_use_alloca (alloca_used + slen);	      \
++	    if (__builtin_expect (malloced, 0))				      \
++	      {								      \
++		newp = malloc (slen);					      \
++		if (newp == NULL)					      \
++		  {							      \
++		    retval = -2;					      \
++		    goto out;						      \
++		  }							      \
++		any_malloced = 1;					      \
++	      }								      \
+ 	    else							      \
+-	      newp = alloca (sizeof (struct patternlist)		      \
+-			     + ((p - startp + 1) * sizeof (CHAR)));	      \
+-	    *((CHAR *) MEMPCPY (newp->str, startp, p - startp)) = L('\0');    \
++	      newp = alloca_account (slen, alloca_used);		      \
+ 	    newp->next = NULL;						      \
++	    newp->malloced = malloced;					      \
++	    *((CHAR *) MEMPCPY (newp->str, startp, p - startp)) = L('\0');    \
+ 	    *lastp = newp;						      \
+ 	    lastp = &newp->next
+ 	    NEW_PATTERN;
+@@ -1131,8 +1147,9 @@ EXT (INT opt, const CHAR *pattern, const
+   switch (opt)
+     {
+     case L('*'):
+-      if (FCT (p, string, string_end, no_leading_period, flags, NULL) == 0)
+-	return 0;
++      if (FCT (p, string, string_end, no_leading_period, flags, NULL,
++	       alloca_used) == 0)
++	goto success;
+       /* FALLTHROUGH */
+ 
+     case L('+'):
+@@ -1143,7 +1160,7 @@ EXT (INT opt, const CHAR *pattern, const
+ 	       current pattern.  */
+ 	    if (FCT (list->str, string, rs, no_leading_period,
+ 		     flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD,
+-		     NULL) == 0
++		     NULL, alloca_used) == 0
+ 		/* This was successful.  Now match the rest with the rest
+ 		   of the pattern.  */
+ 		&& (FCT (p, rs, string_end,
+@@ -1151,7 +1168,7 @@ EXT (INT opt, const CHAR *pattern, const
+ 			 ? no_leading_period
+ 			 : rs[-1] == '/' && NO_LEADING_PERIOD (flags) ? 1 : 0,
+ 			 flags & FNM_FILE_NAME
+-			 ? flags : flags & ~FNM_PERIOD, NULL) == 0
++			 ? flags : flags & ~FNM_PERIOD, NULL, alloca_used) == 0
+ 		    /* This didn't work.  Try the whole pattern.  */
+ 		    || (rs != string
+ 			&& FCT (pattern - 1, rs, string_end,
+@@ -1160,18 +1177,21 @@ EXT (INT opt, const CHAR *pattern, const
+ 				: (rs[-1] == '/' && NO_LEADING_PERIOD (flags)
+ 				   ? 1 : 0),
+ 				flags & FNM_FILE_NAME
+-				? flags : flags & ~FNM_PERIOD, NULL) == 0)))
++				? flags : flags & ~FNM_PERIOD, NULL,
++				alloca_used) == 0)))
+ 	      /* It worked.  Signal success.  */
+-	      return 0;
++	      goto success;
+ 	}
+       while ((list = list->next) != NULL);
+ 
+       /* None of the patterns lead to a match.  */
+-      return FNM_NOMATCH;
++      retval = FNM_NOMATCH;
++      break;
+ 
+     case L('?'):
+-      if (FCT (p, string, string_end, no_leading_period, flags, NULL) == 0)
+-	return 0;
++      if (FCT (p, string, string_end, no_leading_period, flags, NULL,
++	       alloca_used) == 0)
++	goto success;
+       /* FALLTHROUGH */
+ 
+     case L('@'):
+@@ -1183,13 +1203,14 @@ EXT (INT opt, const CHAR *pattern, const
+ 	if (FCT (STRCAT (list->str, p), string, string_end,
+ 		 no_leading_period,
+ 		 flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD,
+-		 NULL) == 0)
++		 NULL, alloca_used) == 0)
+ 	  /* It worked.  Signal success.  */
+-	  return 0;
++	  goto success;
+       while ((list = list->next) != NULL);
+ 
+       /* None of the patterns lead to a match.  */
+-      return FNM_NOMATCH;
++      retval = FNM_NOMATCH;
++      break;
+ 
+     case L('!'):
+       for (rs = string; rs <= string_end; ++rs)
+@@ -1199,7 +1220,7 @@ EXT (INT opt, const CHAR *pattern, const
+ 	  for (runp = list; runp != NULL; runp = runp->next)
+ 	    if (FCT (runp->str, string, rs,  no_leading_period,
+ 		     flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD,
+-		     NULL) == 0)
++		     NULL, alloca_used) == 0)
+ 	      break;
+ 
+ 	  /* If none of the patterns matched see whether the rest does.  */
+@@ -1209,21 +1230,34 @@ EXT (INT opt, const CHAR *pattern, const
+ 		       ? no_leading_period
+ 		       : rs[-1] == '/' && NO_LEADING_PERIOD (flags) ? 1 : 0,
+ 		       flags & FNM_FILE_NAME ? flags : flags & ~FNM_PERIOD,
+-		       NULL) == 0))
++		       NULL, alloca_used) == 0))
+ 	    /* This is successful.  */
+-	    return 0;
++	    goto success;
+ 	}
+ 
+       /* None of the patterns together with the rest of the pattern
+ 	 lead to a match.  */
+-      return FNM_NOMATCH;
++      retval = FNM_NOMATCH;
++      break;
+ 
+     default:
+       assert (! "Invalid extended matching operator");
++      retval = -1;
+       break;
+     }
+ 
+-  return -1;
++ success:
++ out:
++  if (any_malloced)
++    while (list != NULL)
++      {
++	struct patternlist *old = list;
++	list = list->next;
++	if (old->malloced)
++	  free (old);
++      }
++
++  return retval;
+ }
+ 
+ 
+Index: glibc-2.12-2-gc4ccff1/posix/tst-fnmatch.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/posix/tst-fnmatch.c
++++ glibc-2.12-2-gc4ccff1/posix/tst-fnmatch.c
+@@ -25,6 +25,7 @@
+ #include <stdlib.h>
+ #include <string.h>
+ #include <sys/types.h>
++#include <mcheck.h>
+ 
+ 
+ static char *next_input (char **line, int first, int last);
+@@ -46,6 +47,8 @@ main (void)
+   size_t escpatternlen = 0;
+   int nr = 0;
+ 
++  mtrace ();
++
+   /* Read lines from stdin with the following format:
+ 
+        locale  input-string  match-string  flags  result
diff --git a/SOURCES/glibc-rh688720.patch b/SOURCES/glibc-rh688720.patch
new file mode 100644
index 0000000..0c86f25
--- /dev/null
+++ b/SOURCES/glibc-rh688720.patch
@@ -0,0 +1,1638 @@
+2011-11-11  Ulrich Drepper  <drepper@gmail.com>
+
+	[BZ #13147]
+	* locales/de_AT: Use de_DE for LC_NUMERIC.
+	* locales/es_BO: Use es_ES for LC_MESSAGES and LC_NUMERIC.
+	* locales/es_CL: Likewise.
+	* locales/es_CO: Likewise.
+	* locales/es_DO: Likewise.
+	* locales/es_EC: Likewise.
+	* locales/es_GT: Likewise.
+	* locales/es_HN: Likewise.
+	* locales/es_MX: Likewise.
+	* locales/es_NI: Likewise.
+	* locales/es_PA: Likewise.
+	* locales/es_PE: Likewise.
+	* locales/es_PR: Likewise.
+	* locales/es_PY: Likewise.
+	* locales/es_SV: Likewise.
+	* locales/es_UY: Likewise.
+	* locales/es_VE: Likewise.
+	* locales/es_ES: Fix LC_NUMERIC.
+	* locales/es_CR: Use es_ES for LC_MESSAGES.
+	* locales/fr_BE: Actually use grouping in LC_NUMERIC.
+	* locales/fr_CA: Use fr_FR for LC_MESSAGES and LC_NUMERIC.
+	* locales/fr_CH: Use de_CH for LC_NUMERIC.
+	* locales/fr_LU: Use same grouping in LC_NUMERIC as in LC_MONETARY.
+
+2010-05-17  Andreas Schwab  <schwab@redhat.com>
+
+	* locales/es_CR (LC_ADDRESS): Fix character names in lang_ab.
+
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/de_AT
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/de_AT
++++ glibc-2.12-2-gc4ccff1/localedata/locales/de_AT
+@@ -78,41 +78,39 @@ n_sign_posn               1
+ END LC_MONETARY
+ 
+ LC_NUMERIC
+-decimal_point             "<U002C>"
+-thousands_sep             ""
+-grouping                  0;0
++copy "de_DE"
+ END LC_NUMERIC
+ 
+ LC_TIME
+ abday   "<U0053><U006F><U006E>";"<U004D><U006F><U006E>";/
+-        "<U0044><U0069><U0065>";"<U004D><U0069><U0074>";/
+-        "<U0044><U006F><U006E>";"<U0046><U0072><U0065>";/
+-        "<U0053><U0061><U006D>"
++	"<U0044><U0069><U0065>";"<U004D><U0069><U0074>";/
++	"<U0044><U006F><U006E>";"<U0046><U0072><U0065>";/
++	"<U0053><U0061><U006D>"
+ day     "<U0053><U006F><U006E><U006E><U0074><U0061><U0067>";/
+-        "<U004D><U006F><U006E><U0074><U0061><U0067>";/
+-        "<U0044><U0069><U0065><U006E><U0073><U0074><U0061><U0067>";/
+-        "<U004D><U0069><U0074><U0074><U0077><U006F><U0063><U0068>";/
+-        "<U0044><U006F><U006E><U006E><U0065><U0072><U0073><U0074><U0061><U0067>";/
+-        "<U0046><U0072><U0065><U0069><U0074><U0061><U0067>";/
+-        "<U0053><U0061><U006D><U0073><U0074><U0061><U0067>"
++	"<U004D><U006F><U006E><U0074><U0061><U0067>";/
++	"<U0044><U0069><U0065><U006E><U0073><U0074><U0061><U0067>";/
++	"<U004D><U0069><U0074><U0074><U0077><U006F><U0063><U0068>";/
++	"<U0044><U006F><U006E><U006E><U0065><U0072><U0073><U0074><U0061><U0067>";/
++	"<U0046><U0072><U0065><U0069><U0074><U0061><U0067>";/
++	"<U0053><U0061><U006D><U0073><U0074><U0061><U0067>"
+ abmon   "<U004A><U00E4><U006E>";"<U0046><U0065><U0062>";/
+-        "<U004D><U00E4><U0072>";"<U0041><U0070><U0072>";/
+-        "<U004D><U0061><U0069>";"<U004A><U0075><U006E>";/
+-        "<U004A><U0075><U006C>";"<U0041><U0075><U0067>";/
+-        "<U0053><U0065><U0070>";"<U004F><U006B><U0074>";/
+-        "<U004E><U006F><U0076>";"<U0044><U0065><U007A>"
++	"<U004D><U00E4><U0072>";"<U0041><U0070><U0072>";/
++	"<U004D><U0061><U0069>";"<U004A><U0075><U006E>";/
++	"<U004A><U0075><U006C>";"<U0041><U0075><U0067>";/
++	"<U0053><U0065><U0070>";"<U004F><U006B><U0074>";/
++	"<U004E><U006F><U0076>";"<U0044><U0065><U007A>"
+ mon     "<U004A><U00E4><U006E><U006E><U0065><U0072>";/
+-        "<U0046><U0065><U0062><U0065><U0072>";/
+-        "<U004D><U00E4><U0072><U007A>";/
+-        "<U0041><U0070><U0072><U0069><U006C>";/
+-        "<U004D><U0061><U0069>";/
+-        "<U004A><U0075><U006E><U0069>";/
+-        "<U004A><U0075><U006C><U0069>";/
+-        "<U0041><U0075><U0067><U0075><U0073><U0074>";/
+-        "<U0053><U0065><U0070><U0074><U0065><U006D><U0062><U0065><U0072>";/
+-        "<U004F><U006B><U0074><U006F><U0062><U0065><U0072>";/
+-        "<U004E><U006F><U0076><U0065><U006D><U0062><U0065><U0072>";/
+-        "<U0044><U0065><U007A><U0065><U006D><U0062><U0065><U0072>"
++	"<U0046><U0065><U0062><U0065><U0072>";/
++	"<U004D><U00E4><U0072><U007A>";/
++	"<U0041><U0070><U0072><U0069><U006C>";/
++	"<U004D><U0061><U0069>";/
++	"<U004A><U0075><U006E><U0069>";/
++	"<U004A><U0075><U006C><U0069>";/
++	"<U0041><U0075><U0067><U0075><U0073><U0074>";/
++	"<U0053><U0065><U0070><U0074><U0065><U006D><U0062><U0065><U0072>";/
++	"<U004F><U006B><U0074><U006F><U0062><U0065><U0072>";/
++	"<U004E><U006F><U0076><U0065><U006D><U0062><U0065><U0072>";/
++	"<U0044><U0065><U007A><U0065><U006D><U0062><U0065><U0072>"
+ d_t_fmt "<U0025><U0061><U0020><U0025><U0064><U0020><U0025><U0062><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
+ d_fmt   "<U0025><U0059><U002D><U0025><U006D><U002D><U0025><U0064>"
+ t_fmt   "<U0025><U0054>"
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_BO
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_BO
++++ glibc-2.12-2-gc4ccff1/localedata/locales/es_BO
+@@ -56,8 +56,7 @@ copy "es_ES"
+ END LC_CTYPE
+ 
+ LC_MESSAGES
+-yesexpr "<U005E><U005B><U0073><U0053><U0079><U0059><U005D><U002E><U002A>"
+-noexpr  "<U005E><U005B><U006E><U004E><U005D><U002E><U002A>"
++copy "es_ES"
+ END LC_MESSAGES
+ 
+ LC_MONETARY
+@@ -79,41 +78,39 @@ n_sign_posn          1
+ END LC_MONETARY
+ 
+ LC_NUMERIC
+-decimal_point        "<U002C>"
+-thousands_sep        ""
+-grouping             0;0
++copy "es_ES"
+ END LC_NUMERIC
+ 
+ LC_TIME
+ abday   "<U0064><U006F><U006D>";"<U006C><U0075><U006E>";/
+-        "<U006D><U0061><U0072>";"<U006D><U0069><U00E9>";/
+-        "<U006A><U0075><U0065>";"<U0076><U0069><U0065>";/
+-        "<U0073><U00E1><U0062>"
++	"<U006D><U0061><U0072>";"<U006D><U0069><U00E9>";/
++	"<U006A><U0075><U0065>";"<U0076><U0069><U0065>";/
++	"<U0073><U00E1><U0062>"
+ day     "<U0064><U006F><U006D><U0069><U006E><U0067><U006F>";/
+-        "<U006C><U0075><U006E><U0065><U0073>";/
+-        "<U006D><U0061><U0072><U0074><U0065><U0073>";/
+-        "<U006D><U0069><U00E9><U0072><U0063><U006F><U006C><U0065><U0073>";/
+-        "<U006A><U0075><U0065><U0076><U0065><U0073>";/
+-        "<U0076><U0069><U0065><U0072><U006E><U0065><U0073>";/
+-        "<U0073><U00E1><U0062><U0061><U0064><U006F>"
++	"<U006C><U0075><U006E><U0065><U0073>";/
++	"<U006D><U0061><U0072><U0074><U0065><U0073>";/
++	"<U006D><U0069><U00E9><U0072><U0063><U006F><U006C><U0065><U0073>";/
++	"<U006A><U0075><U0065><U0076><U0065><U0073>";/
++	"<U0076><U0069><U0065><U0072><U006E><U0065><U0073>";/
++	"<U0073><U00E1><U0062><U0061><U0064><U006F>"
+ abmon   "<U0065><U006E><U0065>";"<U0066><U0065><U0062>";/
+-        "<U006D><U0061><U0072>";"<U0061><U0062><U0072>";/
+-        "<U006D><U0061><U0079>";"<U006A><U0075><U006E>";/
+-        "<U006A><U0075><U006C>";"<U0061><U0067><U006F>";/
+-        "<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
+-        "<U006E><U006F><U0076>";"<U0064><U0069><U0063>"
++	"<U006D><U0061><U0072>";"<U0061><U0062><U0072>";/
++	"<U006D><U0061><U0079>";"<U006A><U0075><U006E>";/
++	"<U006A><U0075><U006C>";"<U0061><U0067><U006F>";/
++	"<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
++	"<U006E><U006F><U0076>";"<U0064><U0069><U0063>"
+ mon     "<U0065><U006E><U0065><U0072><U006F>";/
+-        "<U0066><U0065><U0062><U0072><U0065><U0072><U006F>";/
+-        "<U006D><U0061><U0072><U007A><U006F>";/
+-        "<U0061><U0062><U0072><U0069><U006C>";/
+-        "<U006D><U0061><U0079><U006F>";/
+-        "<U006A><U0075><U006E><U0069><U006F>";/
+-        "<U006A><U0075><U006C><U0069><U006F>";/
+-        "<U0061><U0067><U006F><U0073><U0074><U006F>";/
+-        "<U0073><U0065><U0070><U0074><U0069><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U006F><U0063><U0074><U0075><U0062><U0072><U0065>";/
+-        "<U006E><U006F><U0076><U0069><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U0064><U0069><U0063><U0069><U0065><U006D><U0062><U0072><U0065>"
++	"<U0066><U0065><U0062><U0072><U0065><U0072><U006F>";/
++	"<U006D><U0061><U0072><U007A><U006F>";/
++	"<U0061><U0062><U0072><U0069><U006C>";/
++	"<U006D><U0061><U0079><U006F>";/
++	"<U006A><U0075><U006E><U0069><U006F>";/
++	"<U006A><U0075><U006C><U0069><U006F>";/
++	"<U0061><U0067><U006F><U0073><U0074><U006F>";/
++	"<U0073><U0065><U0070><U0074><U0069><U0065><U006D><U0062><U0072><U0065>";/
++	"<U006F><U0063><U0074><U0075><U0062><U0072><U0065>";/
++	"<U006E><U006F><U0076><U0069><U0065><U006D><U0062><U0072><U0065>";/
++	"<U0064><U0069><U0063><U0069><U0065><U006D><U0062><U0072><U0065>"
+ d_t_fmt "<U0025><U0061><U0020><U0025><U0064><U0020><U0025><U0062><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
+ d_fmt   "<U0025><U0064><U002F><U0025><U006D><U002F><U0025><U0079>"
+ t_fmt   "<U0025><U0054>"
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_CL
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_CL
++++ glibc-2.12-2-gc4ccff1/localedata/locales/es_CL
+@@ -56,8 +56,7 @@ copy "es_ES"
+ END LC_CTYPE
+ 
+ LC_MESSAGES
+-yesexpr "<U005E><U005B><U0073><U0053><U0079><U0059><U005D><U002E><U002A>"
+-noexpr  "<U005E><U005B><U006E><U004E><U005D><U002E><U002A>"
++copy "es_ES"
+ END LC_MESSAGES
+ 
+ LC_MONETARY
+@@ -79,41 +78,39 @@ n_sign_posn          1
+ END LC_MONETARY
+ 
+ LC_NUMERIC
+-decimal_point        "<U002C>"
+-thousands_sep        ""
+-grouping             0;0
++copy "es_ES"
+ END LC_NUMERIC
+ 
+ LC_TIME
+ abday   "<U0064><U006F><U006D>";"<U006C><U0075><U006E>";/
+-        "<U006D><U0061><U0072>";"<U006D><U0069><U00E9>";/
+-        "<U006A><U0075><U0065>";"<U0076><U0069><U0065>";/
+-        "<U0073><U00E1><U0062>"
++	"<U006D><U0061><U0072>";"<U006D><U0069><U00E9>";/
++	"<U006A><U0075><U0065>";"<U0076><U0069><U0065>";/
++	"<U0073><U00E1><U0062>"
+ day     "<U0064><U006F><U006D><U0069><U006E><U0067><U006F>";/
+-        "<U006C><U0075><U006E><U0065><U0073>";/
+-        "<U006D><U0061><U0072><U0074><U0065><U0073>";/
+-        "<U006D><U0069><U00E9><U0072><U0063><U006F><U006C><U0065><U0073>";/
+-        "<U006A><U0075><U0065><U0076><U0065><U0073>";/
+-        "<U0076><U0069><U0065><U0072><U006E><U0065><U0073>";/
+-        "<U0073><U00E1><U0062><U0061><U0064><U006F>"
++	"<U006C><U0075><U006E><U0065><U0073>";/
++	"<U006D><U0061><U0072><U0074><U0065><U0073>";/
++	"<U006D><U0069><U00E9><U0072><U0063><U006F><U006C><U0065><U0073>";/
++	"<U006A><U0075><U0065><U0076><U0065><U0073>";/
++	"<U0076><U0069><U0065><U0072><U006E><U0065><U0073>";/
++	"<U0073><U00E1><U0062><U0061><U0064><U006F>"
+ abmon   "<U0065><U006E><U0065>";"<U0066><U0065><U0062>";/
+-        "<U006D><U0061><U0072>";"<U0061><U0062><U0072>";/
+-        "<U006D><U0061><U0079>";"<U006A><U0075><U006E>";/
+-        "<U006A><U0075><U006C>";"<U0061><U0067><U006F>";/
+-        "<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
+-        "<U006E><U006F><U0076>";"<U0064><U0069><U0063>"
++	"<U006D><U0061><U0072>";"<U0061><U0062><U0072>";/
++	"<U006D><U0061><U0079>";"<U006A><U0075><U006E>";/
++	"<U006A><U0075><U006C>";"<U0061><U0067><U006F>";/
++	"<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
++	"<U006E><U006F><U0076>";"<U0064><U0069><U0063>"
+ mon     "<U0065><U006E><U0065><U0072><U006F>";/
+-        "<U0066><U0065><U0062><U0072><U0065><U0072><U006F>";/
+-        "<U006D><U0061><U0072><U007A><U006F>";/
+-        "<U0061><U0062><U0072><U0069><U006C>";/
+-        "<U006D><U0061><U0079><U006F>";/
+-        "<U006A><U0075><U006E><U0069><U006F>";/
+-        "<U006A><U0075><U006C><U0069><U006F>";/
+-        "<U0061><U0067><U006F><U0073><U0074><U006F>";/
+-        "<U0073><U0065><U0070><U0074><U0069><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U006F><U0063><U0074><U0075><U0062><U0072><U0065>";/
+-        "<U006E><U006F><U0076><U0069><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U0064><U0069><U0063><U0069><U0065><U006D><U0062><U0072><U0065>"
++	"<U0066><U0065><U0062><U0072><U0065><U0072><U006F>";/
++	"<U006D><U0061><U0072><U007A><U006F>";/
++	"<U0061><U0062><U0072><U0069><U006C>";/
++	"<U006D><U0061><U0079><U006F>";/
++	"<U006A><U0075><U006E><U0069><U006F>";/
++	"<U006A><U0075><U006C><U0069><U006F>";/
++	"<U0061><U0067><U006F><U0073><U0074><U006F>";/
++	"<U0073><U0065><U0070><U0074><U0069><U0065><U006D><U0062><U0072><U0065>";/
++	"<U006F><U0063><U0074><U0075><U0062><U0072><U0065>";/
++	"<U006E><U006F><U0076><U0069><U0065><U006D><U0062><U0072><U0065>";/
++	"<U0064><U0069><U0063><U0069><U0065><U006D><U0062><U0072><U0065>"
+ d_t_fmt "<U0025><U0061><U0020><U0025><U0064><U0020><U0025><U0062><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
+ d_fmt   "<U0025><U0064><U002F><U0025><U006D><U002F><U0025><U0079>"
+ t_fmt   "<U0025><U0054>"
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_CO
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_CO
++++ glibc-2.12-2-gc4ccff1/localedata/locales/es_CO
+@@ -56,8 +56,7 @@ copy "es_ES"
+ END LC_CTYPE
+ 
+ LC_MESSAGES
+-yesexpr "<U005E><U005B><U0073><U0053><U0079><U0059><U005D><U002E><U002A>"
+-noexpr  "<U005E><U005B><U006E><U004E><U005D><U002E><U002A>"
++copy "es_ES"
+ END LC_MESSAGES
+ 
+ LC_MONETARY
+@@ -79,41 +78,39 @@ n_sign_posn          1
+ END LC_MONETARY
+ 
+ LC_NUMERIC
+-decimal_point        "<U002C>"
+-thousands_sep        ""
+-grouping             0;0
++copy "es_ES"
+ END LC_NUMERIC
+ 
+ LC_TIME
+ abday   "<U0064><U006F><U006D>";"<U006C><U0075><U006E>";/
+-        "<U006D><U0061><U0072>";"<U006D><U0069><U00E9>";/
+-        "<U006A><U0075><U0065>";"<U0076><U0069><U0065>";/
+-        "<U0073><U00E1><U0062>"
++	"<U006D><U0061><U0072>";"<U006D><U0069><U00E9>";/
++	"<U006A><U0075><U0065>";"<U0076><U0069><U0065>";/
++	"<U0073><U00E1><U0062>"
+ day     "<U0064><U006F><U006D><U0069><U006E><U0067><U006F>";/
+-        "<U006C><U0075><U006E><U0065><U0073>";/
+-        "<U006D><U0061><U0072><U0074><U0065><U0073>";/
+-        "<U006D><U0069><U00E9><U0072><U0063><U006F><U006C><U0065><U0073>";/
+-        "<U006A><U0075><U0065><U0076><U0065><U0073>";/
+-        "<U0076><U0069><U0065><U0072><U006E><U0065><U0073>";/
+-        "<U0073><U00E1><U0062><U0061><U0064><U006F>"
++	"<U006C><U0075><U006E><U0065><U0073>";/
++	"<U006D><U0061><U0072><U0074><U0065><U0073>";/
++	"<U006D><U0069><U00E9><U0072><U0063><U006F><U006C><U0065><U0073>";/
++	"<U006A><U0075><U0065><U0076><U0065><U0073>";/
++	"<U0076><U0069><U0065><U0072><U006E><U0065><U0073>";/
++	"<U0073><U00E1><U0062><U0061><U0064><U006F>"
+ abmon   "<U0065><U006E><U0065>";"<U0066><U0065><U0062>";/
+-        "<U006D><U0061><U0072>";"<U0061><U0062><U0072>";/
+-        "<U006D><U0061><U0079>";"<U006A><U0075><U006E>";/
+-        "<U006A><U0075><U006C>";"<U0061><U0067><U006F>";/
+-        "<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
+-        "<U006E><U006F><U0076>";"<U0064><U0069><U0063>"
++	"<U006D><U0061><U0072>";"<U0061><U0062><U0072>";/
++	"<U006D><U0061><U0079>";"<U006A><U0075><U006E>";/
++	"<U006A><U0075><U006C>";"<U0061><U0067><U006F>";/
++	"<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
++	"<U006E><U006F><U0076>";"<U0064><U0069><U0063>"
+ mon     "<U0065><U006E><U0065><U0072><U006F>";/
+-        "<U0066><U0065><U0062><U0072><U0065><U0072><U006F>";/
+-        "<U006D><U0061><U0072><U007A><U006F>";/
+-        "<U0061><U0062><U0072><U0069><U006C>";/
+-        "<U006D><U0061><U0079><U006F>";/
+-        "<U006A><U0075><U006E><U0069><U006F>";/
+-        "<U006A><U0075><U006C><U0069><U006F>";/
+-        "<U0061><U0067><U006F><U0073><U0074><U006F>";/
+-        "<U0073><U0065><U0070><U0074><U0069><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U006F><U0063><U0074><U0075><U0062><U0072><U0065>";/
+-        "<U006E><U006F><U0076><U0069><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U0064><U0069><U0063><U0069><U0065><U006D><U0062><U0072><U0065>"
++	"<U0066><U0065><U0062><U0072><U0065><U0072><U006F>";/
++	"<U006D><U0061><U0072><U007A><U006F>";/
++	"<U0061><U0062><U0072><U0069><U006C>";/
++	"<U006D><U0061><U0079><U006F>";/
++	"<U006A><U0075><U006E><U0069><U006F>";/
++	"<U006A><U0075><U006C><U0069><U006F>";/
++	"<U0061><U0067><U006F><U0073><U0074><U006F>";/
++	"<U0073><U0065><U0070><U0074><U0069><U0065><U006D><U0062><U0072><U0065>";/
++	"<U006F><U0063><U0074><U0075><U0062><U0072><U0065>";/
++	"<U006E><U006F><U0076><U0069><U0065><U006D><U0062><U0072><U0065>";/
++	"<U0064><U0069><U0063><U0069><U0065><U006D><U0062><U0072><U0065>"
+ d_t_fmt "<U0025><U0061><U0020><U0025><U0064><U0020><U0025><U0062><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
+ d_fmt   "<U0025><U0064><U002F><U0025><U006D><U002F><U0025><U0079>"
+ t_fmt   "<U0025><U0054>"
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_CR
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_CR
++++ glibc-2.12-2-gc4ccff1/localedata/locales/es_CR
+@@ -47,8 +47,7 @@ copy "es_ES"
+ END LC_CTYPE
+ 
+ LC_MESSAGES
+-yesexpr "<U005E><U005B><U0073><U0053><U0079><U0059><U005D><U002E><U002A>"
+-noexpr  "<U005E><U005B><U006E><U004E><U005D><U002E><U002A>"
++copy "es_ES"
+ END LC_MESSAGES
+ 
+ LC_MONETARY
+@@ -79,34 +78,34 @@ END LC_NUMERIC
+ 
+ LC_TIME
+ abday   "<U0064><U006F><U006D>";"<U006C><U0075><U006E>";/
+-        "<U006D><U0061><U0072>";"<U006D><U0069><U00E9>";/
+-        "<U006A><U0075><U0065>";"<U0076><U0069><U0065>";/
+-        "<U0073><U00E1><U0062>"
++	"<U006D><U0061><U0072>";"<U006D><U0069><U00E9>";/
++	"<U006A><U0075><U0065>";"<U0076><U0069><U0065>";/
++	"<U0073><U00E1><U0062>"
+ day     "<U0064><U006F><U006D><U0069><U006E><U0067><U006F>";/
+-        "<U006C><U0075><U006E><U0065><U0073>";/
+-        "<U006D><U0061><U0072><U0074><U0065><U0073>";/
+-        "<U006D><U0069><U00E9><U0072><U0063><U006F><U006C><U0065><U0073>";/
+-        "<U006A><U0075><U0065><U0076><U0065><U0073>";/
+-        "<U0076><U0069><U0065><U0072><U006E><U0065><U0073>";/
+-        "<U0073><U00E1><U0062><U0061><U0064><U006F>"
++	"<U006C><U0075><U006E><U0065><U0073>";/
++	"<U006D><U0061><U0072><U0074><U0065><U0073>";/
++	"<U006D><U0069><U00E9><U0072><U0063><U006F><U006C><U0065><U0073>";/
++	"<U006A><U0075><U0065><U0076><U0065><U0073>";/
++	"<U0076><U0069><U0065><U0072><U006E><U0065><U0073>";/
++	"<U0073><U00E1><U0062><U0061><U0064><U006F>"
+ abmon   "<U0065><U006E><U0065>";"<U0066><U0065><U0062>";/
+-        "<U006D><U0061><U0072>";"<U0061><U0062><U0072>";/
+-        "<U006D><U0061><U0079>";"<U006A><U0075><U006E>";/
+-        "<U006A><U0075><U006C>";"<U0061><U0067><U006F>";/
+-        "<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
+-        "<U006E><U006F><U0076>";"<U0064><U0069><U0063>"
++	"<U006D><U0061><U0072>";"<U0061><U0062><U0072>";/
++	"<U006D><U0061><U0079>";"<U006A><U0075><U006E>";/
++	"<U006A><U0075><U006C>";"<U0061><U0067><U006F>";/
++	"<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
++	"<U006E><U006F><U0076>";"<U0064><U0069><U0063>"
+ mon     "<U0065><U006E><U0065><U0072><U006F>";/
+-        "<U0066><U0065><U0062><U0072><U0065><U0072><U006F>";/
+-        "<U006D><U0061><U0072><U007A><U006F>";/
+-        "<U0061><U0062><U0072><U0069><U006C>";/
+-        "<U006D><U0061><U0079><U006F>";/
+-        "<U006A><U0075><U006E><U0069><U006F>";/
+-        "<U006A><U0075><U006C><U0069><U006F>";/
+-        "<U0061><U0067><U006F><U0073><U0074><U006F>";/
+-        "<U0073><U0065><U0070><U0074><U0069><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U006F><U0063><U0074><U0075><U0062><U0072><U0065>";/
+-        "<U006E><U006F><U0076><U0069><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U0064><U0069><U0063><U0069><U0065><U006D><U0062><U0072><U0065>"
++	"<U0066><U0065><U0062><U0072><U0065><U0072><U006F>";/
++	"<U006D><U0061><U0072><U007A><U006F>";/
++	"<U0061><U0062><U0072><U0069><U006C>";/
++	"<U006D><U0061><U0079><U006F>";/
++	"<U006A><U0075><U006E><U0069><U006F>";/
++	"<U006A><U0075><U006C><U0069><U006F>";/
++	"<U0061><U0067><U006F><U0073><U0074><U006F>";/
++	"<U0073><U0065><U0070><U0074><U0069><U0065><U006D><U0062><U0072><U0065>";/
++	"<U006F><U0063><U0074><U0075><U0062><U0072><U0065>";/
++	"<U006E><U006F><U0076><U0069><U0065><U006D><U0062><U0072><U0065>";/
++	"<U0064><U0069><U0063><U0069><U0065><U006D><U0062><U0072><U0065>"
+ d_t_fmt "<U0025><U0061><U0020><U0025><U0064><U0020><U0025><U0062><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
+ d_fmt   "<U0025><U0064><U002F><U0025><U006D><U002F><U0025><U0059>"
+ t_fmt   "<U0025><U0054>"
+@@ -157,7 +156,7 @@ country_post  "<U0043><U0052>"
+ country_car   "<U0043><U0052>"
+ country_isbn  "9930,9977,9968"
+ lang_name     "<U0045><U0073><U0070><U0061><U00F1><U006F><U006C>"
+-lang_ab       "<0065><0073>"
++lang_ab       "<U0065><U0073>"
+ lang_term     "<U0073><U0070><U0061>"
+ country_ab2   "<U0043><U0052>"
+ country_ab3   "<U0043><U0052><U0049>"
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_DO
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_DO
++++ glibc-2.12-2-gc4ccff1/localedata/locales/es_DO
+@@ -56,8 +56,7 @@ copy "es_ES"
+ END LC_CTYPE
+ 
+ LC_MESSAGES
+-yesexpr "<U005E><U005B><U0073><U0053><U0079><U0059><U005D><U002E><U002A>"
+-noexpr  "<U005E><U005B><U006E><U004E><U005D><U002E><U002A>"
++copy "es_ES"
+ END LC_MESSAGES
+ 
+ LC_MONETARY
+@@ -79,41 +78,39 @@ n_sign_posn          1
+ END LC_MONETARY
+ 
+ LC_NUMERIC
+-decimal_point        "<U002E>"
+-thousands_sep        ""
+-grouping             0;0
++copy "es_ES"
+ END LC_NUMERIC
+ 
+ LC_TIME
+ abday   "<U0064><U006F><U006D>";"<U006C><U0075><U006E>";/
+-        "<U006D><U0061><U0072>";"<U006D><U0069><U00E9>";/
+-        "<U006A><U0075><U0065>";"<U0076><U0069><U0065>";/
+-        "<U0073><U00E1><U0062>"
++	"<U006D><U0061><U0072>";"<U006D><U0069><U00E9>";/
++	"<U006A><U0075><U0065>";"<U0076><U0069><U0065>";/
++	"<U0073><U00E1><U0062>"
+ day     "<U0064><U006F><U006D><U0069><U006E><U0067><U006F>";/
+-        "<U006C><U0075><U006E><U0065><U0073>";/
+-        "<U006D><U0061><U0072><U0074><U0065><U0073>";/
+-        "<U006D><U0069><U00E9><U0072><U0063><U006F><U006C><U0065><U0073>";/
+-        "<U006A><U0075><U0065><U0076><U0065><U0073>";/
+-        "<U0076><U0069><U0065><U0072><U006E><U0065><U0073>";/
+-        "<U0073><U00E1><U0062><U0061><U0064><U006F>"
++	"<U006C><U0075><U006E><U0065><U0073>";/
++	"<U006D><U0061><U0072><U0074><U0065><U0073>";/
++	"<U006D><U0069><U00E9><U0072><U0063><U006F><U006C><U0065><U0073>";/
++	"<U006A><U0075><U0065><U0076><U0065><U0073>";/
++	"<U0076><U0069><U0065><U0072><U006E><U0065><U0073>";/
++	"<U0073><U00E1><U0062><U0061><U0064><U006F>"
+ abmon   "<U0065><U006E><U0065>";"<U0066><U0065><U0062>";/
+-        "<U006D><U0061><U0072>";"<U0061><U0062><U0072>";/
+-        "<U006D><U0061><U0079>";"<U006A><U0075><U006E>";/
+-        "<U006A><U0075><U006C>";"<U0061><U0067><U006F>";/
+-        "<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
+-        "<U006E><U006F><U0076>";"<U0064><U0069><U0063>"
++	"<U006D><U0061><U0072>";"<U0061><U0062><U0072>";/
++	"<U006D><U0061><U0079>";"<U006A><U0075><U006E>";/
++	"<U006A><U0075><U006C>";"<U0061><U0067><U006F>";/
++	"<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
++	"<U006E><U006F><U0076>";"<U0064><U0069><U0063>"
+ mon     "<U0065><U006E><U0065><U0072><U006F>";/
+-        "<U0066><U0065><U0062><U0072><U0065><U0072><U006F>";/
+-        "<U006D><U0061><U0072><U007A><U006F>";/
+-        "<U0061><U0062><U0072><U0069><U006C>";/
+-        "<U006D><U0061><U0079><U006F>";/
+-        "<U006A><U0075><U006E><U0069><U006F>";/
+-        "<U006A><U0075><U006C><U0069><U006F>";/
+-        "<U0061><U0067><U006F><U0073><U0074><U006F>";/
+-        "<U0073><U0065><U0070><U0074><U0069><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U006F><U0063><U0074><U0075><U0062><U0072><U0065>";/
+-        "<U006E><U006F><U0076><U0069><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U0064><U0069><U0063><U0069><U0065><U006D><U0062><U0072><U0065>"
++	"<U0066><U0065><U0062><U0072><U0065><U0072><U006F>";/
++	"<U006D><U0061><U0072><U007A><U006F>";/
++	"<U0061><U0062><U0072><U0069><U006C>";/
++	"<U006D><U0061><U0079><U006F>";/
++	"<U006A><U0075><U006E><U0069><U006F>";/
++	"<U006A><U0075><U006C><U0069><U006F>";/
++	"<U0061><U0067><U006F><U0073><U0074><U006F>";/
++	"<U0073><U0065><U0070><U0074><U0069><U0065><U006D><U0062><U0072><U0065>";/
++	"<U006F><U0063><U0074><U0075><U0062><U0072><U0065>";/
++	"<U006E><U006F><U0076><U0069><U0065><U006D><U0062><U0072><U0065>";/
++	"<U0064><U0069><U0063><U0069><U0065><U006D><U0062><U0072><U0065>"
+ d_t_fmt "<U0025><U0061><U0020><U0025><U0064><U0020><U0025><U0062><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
+ d_fmt   "<U0025><U0064><U002F><U0025><U006D><U002F><U0025><U0079>"
+ t_fmt   "<U0025><U0054>"
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_EC
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_EC
++++ glibc-2.12-2-gc4ccff1/localedata/locales/es_EC
+@@ -56,8 +56,7 @@ copy "es_ES"
+ END LC_CTYPE
+ 
+ LC_MESSAGES
+-yesexpr "<U005E><U005B><U0073><U0053><U0079><U0059><U005D><U002E><U002A>"
+-noexpr  "<U005E><U005B><U006E><U004E><U005D><U002E><U002A>"
++copy "es_ES"
+ END LC_MESSAGES
+ 
+ LC_MONETARY
+@@ -79,41 +78,39 @@ n_sign_posn          1
+ END LC_MONETARY
+ 
+ LC_NUMERIC
+-decimal_point        "<U002C>"
+-thousands_sep        ""
+-grouping             0;0
++copy "es_ES"
+ END LC_NUMERIC
+ 
+ LC_TIME
+ abday   "<U0064><U006F><U006D>";"<U006C><U0075><U006E>";/
+-        "<U006D><U0061><U0072>";"<U006D><U0069><U00E9>";/
+-        "<U006A><U0075><U0065>";"<U0076><U0069><U0065>";/
+-        "<U0073><U00E1><U0062>"
++	"<U006D><U0061><U0072>";"<U006D><U0069><U00E9>";/
++	"<U006A><U0075><U0065>";"<U0076><U0069><U0065>";/
++	"<U0073><U00E1><U0062>"
+ day     "<U0064><U006F><U006D><U0069><U006E><U0067><U006F>";/
+-        "<U006C><U0075><U006E><U0065><U0073>";/
+-        "<U006D><U0061><U0072><U0074><U0065><U0073>";/
+-        "<U006D><U0069><U00E9><U0072><U0063><U006F><U006C><U0065><U0073>";/
+-        "<U006A><U0075><U0065><U0076><U0065><U0073>";/
+-        "<U0076><U0069><U0065><U0072><U006E><U0065><U0073>";/
+-        "<U0073><U00E1><U0062><U0061><U0064><U006F>"
++	"<U006C><U0075><U006E><U0065><U0073>";/
++	"<U006D><U0061><U0072><U0074><U0065><U0073>";/
++	"<U006D><U0069><U00E9><U0072><U0063><U006F><U006C><U0065><U0073>";/
++	"<U006A><U0075><U0065><U0076><U0065><U0073>";/
++	"<U0076><U0069><U0065><U0072><U006E><U0065><U0073>";/
++	"<U0073><U00E1><U0062><U0061><U0064><U006F>"
+ abmon   "<U0065><U006E><U0065>";"<U0066><U0065><U0062>";/
+-        "<U006D><U0061><U0072>";"<U0061><U0062><U0072>";/
+-        "<U006D><U0061><U0079>";"<U006A><U0075><U006E>";/
+-        "<U006A><U0075><U006C>";"<U0061><U0067><U006F>";/
+-        "<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
+-        "<U006E><U006F><U0076>";"<U0064><U0069><U0063>"
++	"<U006D><U0061><U0072>";"<U0061><U0062><U0072>";/
++	"<U006D><U0061><U0079>";"<U006A><U0075><U006E>";/
++	"<U006A><U0075><U006C>";"<U0061><U0067><U006F>";/
++	"<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
++	"<U006E><U006F><U0076>";"<U0064><U0069><U0063>"
+ mon     "<U0065><U006E><U0065><U0072><U006F>";/
+-        "<U0066><U0065><U0062><U0072><U0065><U0072><U006F>";/
+-        "<U006D><U0061><U0072><U007A><U006F>";/
+-        "<U0061><U0062><U0072><U0069><U006C>";/
+-        "<U006D><U0061><U0079><U006F>";/
+-        "<U006A><U0075><U006E><U0069><U006F>";/
+-        "<U006A><U0075><U006C><U0069><U006F>";/
+-        "<U0061><U0067><U006F><U0073><U0074><U006F>";/
+-        "<U0073><U0065><U0070><U0074><U0069><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U006F><U0063><U0074><U0075><U0062><U0072><U0065>";/
+-        "<U006E><U006F><U0076><U0069><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U0064><U0069><U0063><U0069><U0065><U006D><U0062><U0072><U0065>"
++	"<U0066><U0065><U0062><U0072><U0065><U0072><U006F>";/
++	"<U006D><U0061><U0072><U007A><U006F>";/
++	"<U0061><U0062><U0072><U0069><U006C>";/
++	"<U006D><U0061><U0079><U006F>";/
++	"<U006A><U0075><U006E><U0069><U006F>";/
++	"<U006A><U0075><U006C><U0069><U006F>";/
++	"<U0061><U0067><U006F><U0073><U0074><U006F>";/
++	"<U0073><U0065><U0070><U0074><U0069><U0065><U006D><U0062><U0072><U0065>";/
++	"<U006F><U0063><U0074><U0075><U0062><U0072><U0065>";/
++	"<U006E><U006F><U0076><U0069><U0065><U006D><U0062><U0072><U0065>";/
++	"<U0064><U0069><U0063><U0069><U0065><U006D><U0062><U0072><U0065>"
+ d_t_fmt "<U0025><U0061><U0020><U0025><U0064><U0020><U0025><U0062><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
+ d_fmt   "<U0025><U0064><U002F><U0025><U006D><U002F><U0025><U0079>"
+ t_fmt   "<U0025><U0054>"
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_ES
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_ES
++++ glibc-2.12-2-gc4ccff1/localedata/locales/es_ES
+@@ -85,40 +85,40 @@ END LC_MONETARY
+ 
+ LC_NUMERIC
+ decimal_point        "<U002C>"
+-thousands_sep        ""
+-grouping             0;0
++thousands_sep        "<U002E>"
++grouping             3;3
+ END LC_NUMERIC
+ 
+ LC_TIME
+ abday   "<U0064><U006F><U006D>";"<U006C><U0075><U006E>";/
+-        "<U006D><U0061><U0072>";"<U006D><U0069><U00E9>";/
+-        "<U006A><U0075><U0065>";"<U0076><U0069><U0065>";/
+-        "<U0073><U00E1><U0062>"
++	"<U006D><U0061><U0072>";"<U006D><U0069><U00E9>";/
++	"<U006A><U0075><U0065>";"<U0076><U0069><U0065>";/
++	"<U0073><U00E1><U0062>"
+ day     "<U0064><U006F><U006D><U0069><U006E><U0067><U006F>";/
+-        "<U006C><U0075><U006E><U0065><U0073>";/
+-        "<U006D><U0061><U0072><U0074><U0065><U0073>";/
+-        "<U006D><U0069><U00E9><U0072><U0063><U006F><U006C><U0065><U0073>";/
+-        "<U006A><U0075><U0065><U0076><U0065><U0073>";/
+-        "<U0076><U0069><U0065><U0072><U006E><U0065><U0073>";/
+-        "<U0073><U00E1><U0062><U0061><U0064><U006F>"
++	"<U006C><U0075><U006E><U0065><U0073>";/
++	"<U006D><U0061><U0072><U0074><U0065><U0073>";/
++	"<U006D><U0069><U00E9><U0072><U0063><U006F><U006C><U0065><U0073>";/
++	"<U006A><U0075><U0065><U0076><U0065><U0073>";/
++	"<U0076><U0069><U0065><U0072><U006E><U0065><U0073>";/
++	"<U0073><U00E1><U0062><U0061><U0064><U006F>"
+ abmon   "<U0065><U006E><U0065>";"<U0066><U0065><U0062>";/
+-        "<U006D><U0061><U0072>";"<U0061><U0062><U0072>";/
+-        "<U006D><U0061><U0079>";"<U006A><U0075><U006E>";/
+-        "<U006A><U0075><U006C>";"<U0061><U0067><U006F>";/
+-        "<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
+-        "<U006E><U006F><U0076>";"<U0064><U0069><U0063>"
++	"<U006D><U0061><U0072>";"<U0061><U0062><U0072>";/
++	"<U006D><U0061><U0079>";"<U006A><U0075><U006E>";/
++	"<U006A><U0075><U006C>";"<U0061><U0067><U006F>";/
++	"<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
++	"<U006E><U006F><U0076>";"<U0064><U0069><U0063>"
+ mon     "<U0065><U006E><U0065><U0072><U006F>";/
+-        "<U0066><U0065><U0062><U0072><U0065><U0072><U006F>";/
+-        "<U006D><U0061><U0072><U007A><U006F>";/
+-        "<U0061><U0062><U0072><U0069><U006C>";/
+-        "<U006D><U0061><U0079><U006F>";/
+-        "<U006A><U0075><U006E><U0069><U006F>";/
+-        "<U006A><U0075><U006C><U0069><U006F>";/
+-        "<U0061><U0067><U006F><U0073><U0074><U006F>";/
+-        "<U0073><U0065><U0070><U0074><U0069><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U006F><U0063><U0074><U0075><U0062><U0072><U0065>";/
+-        "<U006E><U006F><U0076><U0069><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U0064><U0069><U0063><U0069><U0065><U006D><U0062><U0072><U0065>"
++	"<U0066><U0065><U0062><U0072><U0065><U0072><U006F>";/
++	"<U006D><U0061><U0072><U007A><U006F>";/
++	"<U0061><U0062><U0072><U0069><U006C>";/
++	"<U006D><U0061><U0079><U006F>";/
++	"<U006A><U0075><U006E><U0069><U006F>";/
++	"<U006A><U0075><U006C><U0069><U006F>";/
++	"<U0061><U0067><U006F><U0073><U0074><U006F>";/
++	"<U0073><U0065><U0070><U0074><U0069><U0065><U006D><U0062><U0072><U0065>";/
++	"<U006F><U0063><U0074><U0075><U0062><U0072><U0065>";/
++	"<U006E><U006F><U0076><U0069><U0065><U006D><U0062><U0072><U0065>";/
++	"<U0064><U0069><U0063><U0069><U0065><U006D><U0062><U0072><U0065>"
+ d_t_fmt "<U0025><U0061><U0020><U0025><U0064><U0020><U0025><U0062><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
+ d_fmt   "<U0025><U0064><U002F><U0025><U006D><U002F><U0025><U0079>"
+ t_fmt   "<U0025><U0054>"
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_GT
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_GT
++++ glibc-2.12-2-gc4ccff1/localedata/locales/es_GT
+@@ -55,8 +55,7 @@ copy "es_ES"
+ END LC_CTYPE
+ 
+ LC_MESSAGES
+-yesexpr "<U005E><U005B><U0073><U0053><U0079><U0059><U005D><U002E><U002A>"
+-noexpr  "<U005E><U005B><U006E><U004E><U005D><U002E><U002A>"
++copy "es_ES"
+ END LC_MESSAGES
+ 
+ LC_MONETARY
+@@ -78,9 +77,7 @@ n_sign_posn          1
+ END LC_MONETARY
+ 
+ LC_NUMERIC
+-decimal_point        "<U002E>"
+-thousands_sep        ""
+-grouping             0;0
++copy "es_ES"
+ END LC_NUMERIC
+ 
+ LC_TIME
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_HN
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_HN
++++ glibc-2.12-2-gc4ccff1/localedata/locales/es_HN
+@@ -56,8 +56,7 @@ copy "es_ES"
+ END LC_CTYPE
+ 
+ LC_MESSAGES
+-yesexpr "<U005E><U005B><U0073><U0053><U0079><U0059><U005D><U002E><U002A>"
+-noexpr  "<U005E><U005B><U006E><U004E><U005D><U002E><U002A>"
++copy "es_ES"
+ END LC_MESSAGES
+ 
+ LC_MONETARY
+@@ -79,41 +78,39 @@ n_sign_posn          1
+ END LC_MONETARY
+ 
+ LC_NUMERIC
+-decimal_point        "<U002E>"
+-thousands_sep        ""
+-grouping             0;0
++copy "es_ES"
+ END LC_NUMERIC
+ 
+ LC_TIME
+ abday   "<U0064><U006F><U006D>";"<U006C><U0075><U006E>";/
+-        "<U006D><U0061><U0072>";"<U006D><U0069><U00E9>";/
+-        "<U006A><U0075><U0065>";"<U0076><U0069><U0065>";/
+-        "<U0073><U00E1><U0062>"
++	"<U006D><U0061><U0072>";"<U006D><U0069><U00E9>";/
++	"<U006A><U0075><U0065>";"<U0076><U0069><U0065>";/
++	"<U0073><U00E1><U0062>"
+ day     "<U0064><U006F><U006D><U0069><U006E><U0067><U006F>";/
+-        "<U006C><U0075><U006E><U0065><U0073>";/
+-        "<U006D><U0061><U0072><U0074><U0065><U0073>";/
+-        "<U006D><U0069><U00E9><U0072><U0063><U006F><U006C><U0065><U0073>";/
+-        "<U006A><U0075><U0065><U0076><U0065><U0073>";/
+-        "<U0076><U0069><U0065><U0072><U006E><U0065><U0073>";/
+-        "<U0073><U00E1><U0062><U0061><U0064><U006F>"
++	"<U006C><U0075><U006E><U0065><U0073>";/
++	"<U006D><U0061><U0072><U0074><U0065><U0073>";/
++	"<U006D><U0069><U00E9><U0072><U0063><U006F><U006C><U0065><U0073>";/
++	"<U006A><U0075><U0065><U0076><U0065><U0073>";/
++	"<U0076><U0069><U0065><U0072><U006E><U0065><U0073>";/
++	"<U0073><U00E1><U0062><U0061><U0064><U006F>"
+ abmon   "<U0065><U006E><U0065>";"<U0066><U0065><U0062>";/
+-        "<U006D><U0061><U0072>";"<U0061><U0062><U0072>";/
+-        "<U006D><U0061><U0079>";"<U006A><U0075><U006E>";/
+-        "<U006A><U0075><U006C>";"<U0061><U0067><U006F>";/
+-        "<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
+-        "<U006E><U006F><U0076>";"<U0064><U0069><U0063>"
++	"<U006D><U0061><U0072>";"<U0061><U0062><U0072>";/
++	"<U006D><U0061><U0079>";"<U006A><U0075><U006E>";/
++	"<U006A><U0075><U006C>";"<U0061><U0067><U006F>";/
++	"<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
++	"<U006E><U006F><U0076>";"<U0064><U0069><U0063>"
+ mon     "<U0065><U006E><U0065><U0072><U006F>";/
+-        "<U0066><U0065><U0062><U0072><U0065><U0072><U006F>";/
+-        "<U006D><U0061><U0072><U007A><U006F>";/
+-        "<U0061><U0062><U0072><U0069><U006C>";/
+-        "<U006D><U0061><U0079><U006F>";/
+-        "<U006A><U0075><U006E><U0069><U006F>";/
+-        "<U006A><U0075><U006C><U0069><U006F>";/
+-        "<U0061><U0067><U006F><U0073><U0074><U006F>";/
+-        "<U0073><U0065><U0070><U0074><U0069><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U006F><U0063><U0074><U0075><U0062><U0072><U0065>";/
+-        "<U006E><U006F><U0076><U0069><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U0064><U0069><U0063><U0069><U0065><U006D><U0062><U0072><U0065>"
++	"<U0066><U0065><U0062><U0072><U0065><U0072><U006F>";/
++	"<U006D><U0061><U0072><U007A><U006F>";/
++	"<U0061><U0062><U0072><U0069><U006C>";/
++	"<U006D><U0061><U0079><U006F>";/
++	"<U006A><U0075><U006E><U0069><U006F>";/
++	"<U006A><U0075><U006C><U0069><U006F>";/
++	"<U0061><U0067><U006F><U0073><U0074><U006F>";/
++	"<U0073><U0065><U0070><U0074><U0069><U0065><U006D><U0062><U0072><U0065>";/
++	"<U006F><U0063><U0074><U0075><U0062><U0072><U0065>";/
++	"<U006E><U006F><U0076><U0069><U0065><U006D><U0062><U0072><U0065>";/
++	"<U0064><U0069><U0063><U0069><U0065><U006D><U0062><U0072><U0065>"
+ d_t_fmt "<U0025><U0061><U0020><U0025><U0064><U0020><U0025><U0062><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
+ d_fmt   "<U0025><U0064><U002F><U0025><U006D><U002F><U0025><U0079>"
+ t_fmt   "<U0025><U0054>"
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_MX
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_MX
++++ glibc-2.12-2-gc4ccff1/localedata/locales/es_MX
+@@ -56,8 +56,7 @@ copy "es_ES"
+ END LC_CTYPE
+ 
+ LC_MESSAGES
+-yesexpr "<U005E><U005B><U0073><U0053><U0079><U0059><U005D><U002E><U002A>"
+-noexpr  "<U005E><U005B><U006E><U004E><U005D><U002E><U002A>"
++copy "es_ES"
+ END LC_MESSAGES
+ 
+ LC_MONETARY
+@@ -79,41 +78,39 @@ n_sign_posn          1
+ END LC_MONETARY
+ 
+ LC_NUMERIC
+-decimal_point        "<U002E>"
+-thousands_sep        ""
+-grouping             0;0
++copy "es_ES"
+ END LC_NUMERIC
+ 
+ LC_TIME
+ abday   "<U0064><U006F><U006D>";"<U006C><U0075><U006E>";/
+-        "<U006D><U0061><U0072>";"<U006D><U0069><U00E9>";/
+-        "<U006A><U0075><U0065>";"<U0076><U0069><U0065>";/
+-        "<U0073><U00E1><U0062>"
++	"<U006D><U0061><U0072>";"<U006D><U0069><U00E9>";/
++	"<U006A><U0075><U0065>";"<U0076><U0069><U0065>";/
++	"<U0073><U00E1><U0062>"
+ day     "<U0064><U006F><U006D><U0069><U006E><U0067><U006F>";/
+-        "<U006C><U0075><U006E><U0065><U0073>";/
+-        "<U006D><U0061><U0072><U0074><U0065><U0073>";/
+-        "<U006D><U0069><U00E9><U0072><U0063><U006F><U006C><U0065><U0073>";/
+-        "<U006A><U0075><U0065><U0076><U0065><U0073>";/
+-        "<U0076><U0069><U0065><U0072><U006E><U0065><U0073>";/
+-        "<U0073><U00E1><U0062><U0061><U0064><U006F>"
++	"<U006C><U0075><U006E><U0065><U0073>";/
++	"<U006D><U0061><U0072><U0074><U0065><U0073>";/
++	"<U006D><U0069><U00E9><U0072><U0063><U006F><U006C><U0065><U0073>";/
++	"<U006A><U0075><U0065><U0076><U0065><U0073>";/
++	"<U0076><U0069><U0065><U0072><U006E><U0065><U0073>";/
++	"<U0073><U00E1><U0062><U0061><U0064><U006F>"
+ abmon   "<U0065><U006E><U0065>";"<U0066><U0065><U0062>";/
+-        "<U006D><U0061><U0072>";"<U0061><U0062><U0072>";/
+-        "<U006D><U0061><U0079>";"<U006A><U0075><U006E>";/
+-        "<U006A><U0075><U006C>";"<U0061><U0067><U006F>";/
+-        "<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
+-        "<U006E><U006F><U0076>";"<U0064><U0069><U0063>"
++	"<U006D><U0061><U0072>";"<U0061><U0062><U0072>";/
++	"<U006D><U0061><U0079>";"<U006A><U0075><U006E>";/
++	"<U006A><U0075><U006C>";"<U0061><U0067><U006F>";/
++	"<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
++	"<U006E><U006F><U0076>";"<U0064><U0069><U0063>"
+ mon     "<U0065><U006E><U0065><U0072><U006F>";/
+-        "<U0066><U0065><U0062><U0072><U0065><U0072><U006F>";/
+-        "<U006D><U0061><U0072><U007A><U006F>";/
+-        "<U0061><U0062><U0072><U0069><U006C>";/
+-        "<U006D><U0061><U0079><U006F>";/
+-        "<U006A><U0075><U006E><U0069><U006F>";/
+-        "<U006A><U0075><U006C><U0069><U006F>";/
+-        "<U0061><U0067><U006F><U0073><U0074><U006F>";/
+-        "<U0073><U0065><U0070><U0074><U0069><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U006F><U0063><U0074><U0075><U0062><U0072><U0065>";/
+-        "<U006E><U006F><U0076><U0069><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U0064><U0069><U0063><U0069><U0065><U006D><U0062><U0072><U0065>"
++	"<U0066><U0065><U0062><U0072><U0065><U0072><U006F>";/
++	"<U006D><U0061><U0072><U007A><U006F>";/
++	"<U0061><U0062><U0072><U0069><U006C>";/
++	"<U006D><U0061><U0079><U006F>";/
++	"<U006A><U0075><U006E><U0069><U006F>";/
++	"<U006A><U0075><U006C><U0069><U006F>";/
++	"<U0061><U0067><U006F><U0073><U0074><U006F>";/
++	"<U0073><U0065><U0070><U0074><U0069><U0065><U006D><U0062><U0072><U0065>";/
++	"<U006F><U0063><U0074><U0075><U0062><U0072><U0065>";/
++	"<U006E><U006F><U0076><U0069><U0065><U006D><U0062><U0072><U0065>";/
++	"<U0064><U0069><U0063><U0069><U0065><U006D><U0062><U0072><U0065>"
+ d_t_fmt "<U0025><U0061><U0020><U0025><U0064><U0020><U0025><U0062><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
+ d_fmt   "<U0025><U0064><U002F><U0025><U006D><U002F><U0025><U0079>"
+ t_fmt   "<U0025><U0054>"
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_NI
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_NI
++++ glibc-2.12-2-gc4ccff1/localedata/locales/es_NI
+@@ -47,8 +47,7 @@ copy "es_ES"
+ END LC_CTYPE
+ 
+ LC_MESSAGES
+-yesexpr "<U005E><U005B><U0073><U0053><U0079><U0059><U005D><U002E><U002A>"
+-noexpr  "<U005E><U005B><U006E><U004E><U005D><U002E><U002A>"
++copy "es_ES"
+ END LC_MESSAGES
+ 
+ LC_MONETARY
+@@ -70,9 +69,7 @@ n_sign_posn          1
+ END LC_MONETARY
+ 
+ LC_NUMERIC
+-decimal_point        "<U002E>"
+-thousands_sep        ""
+-grouping             0;0
++copy "es_ES"
+ END LC_NUMERIC
+ 
+ LC_TIME
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_PA
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_PA
++++ glibc-2.12-2-gc4ccff1/localedata/locales/es_PA
+@@ -56,8 +56,7 @@ copy "es_ES"
+ END LC_CTYPE
+ 
+ LC_MESSAGES
+-yesexpr "<U005E><U005B><U0073><U0053><U0079><U0059><U005D><U002E><U002A>"
+-noexpr  "<U005E><U005B><U006E><U004E><U005D><U002E><U002A>"
++copy "es_ES"
+ END LC_MESSAGES
+ 
+ LC_MONETARY
+@@ -79,41 +78,39 @@ n_sign_posn          1
+ END LC_MONETARY
+ 
+ LC_NUMERIC
+-decimal_point        "<U002E>"
+-thousands_sep        ""
+-grouping             0;0
++copy "es_ES"
+ END LC_NUMERIC
+ 
+ LC_TIME
+ abday   "<U0064><U006F><U006D>";"<U006C><U0075><U006E>";/
+-        "<U006D><U0061><U0072>";"<U006D><U0069><U00E9>";/
+-        "<U006A><U0075><U0065>";"<U0076><U0069><U0065>";/
+-        "<U0073><U00E1><U0062>"
++	"<U006D><U0061><U0072>";"<U006D><U0069><U00E9>";/
++	"<U006A><U0075><U0065>";"<U0076><U0069><U0065>";/
++	"<U0073><U00E1><U0062>"
+ day     "<U0064><U006F><U006D><U0069><U006E><U0067><U006F>";/
+-        "<U006C><U0075><U006E><U0065><U0073>";/
+-        "<U006D><U0061><U0072><U0074><U0065><U0073>";/
+-        "<U006D><U0069><U00E9><U0072><U0063><U006F><U006C><U0065><U0073>";/
+-        "<U006A><U0075><U0065><U0076><U0065><U0073>";/
+-        "<U0076><U0069><U0065><U0072><U006E><U0065><U0073>";/
+-        "<U0073><U00E1><U0062><U0061><U0064><U006F>"
++	"<U006C><U0075><U006E><U0065><U0073>";/
++	"<U006D><U0061><U0072><U0074><U0065><U0073>";/
++	"<U006D><U0069><U00E9><U0072><U0063><U006F><U006C><U0065><U0073>";/
++	"<U006A><U0075><U0065><U0076><U0065><U0073>";/
++	"<U0076><U0069><U0065><U0072><U006E><U0065><U0073>";/
++	"<U0073><U00E1><U0062><U0061><U0064><U006F>"
+ abmon   "<U0065><U006E><U0065>";"<U0066><U0065><U0062>";/
+-        "<U006D><U0061><U0072>";"<U0061><U0062><U0072>";/
+-        "<U006D><U0061><U0079>";"<U006A><U0075><U006E>";/
+-        "<U006A><U0075><U006C>";"<U0061><U0067><U006F>";/
+-        "<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
+-        "<U006E><U006F><U0076>";"<U0064><U0069><U0063>"
++	"<U006D><U0061><U0072>";"<U0061><U0062><U0072>";/
++	"<U006D><U0061><U0079>";"<U006A><U0075><U006E>";/
++	"<U006A><U0075><U006C>";"<U0061><U0067><U006F>";/
++	"<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
++	"<U006E><U006F><U0076>";"<U0064><U0069><U0063>"
+ mon     "<U0065><U006E><U0065><U0072><U006F>";/
+-        "<U0066><U0065><U0062><U0072><U0065><U0072><U006F>";/
+-        "<U006D><U0061><U0072><U007A><U006F>";/
+-        "<U0061><U0062><U0072><U0069><U006C>";/
+-        "<U006D><U0061><U0079><U006F>";/
+-        "<U006A><U0075><U006E><U0069><U006F>";/
+-        "<U006A><U0075><U006C><U0069><U006F>";/
+-        "<U0061><U0067><U006F><U0073><U0074><U006F>";/
+-        "<U0073><U0065><U0070><U0074><U0069><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U006F><U0063><U0074><U0075><U0062><U0072><U0065>";/
+-        "<U006E><U006F><U0076><U0069><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U0064><U0069><U0063><U0069><U0065><U006D><U0062><U0072><U0065>"
++	"<U0066><U0065><U0062><U0072><U0065><U0072><U006F>";/
++	"<U006D><U0061><U0072><U007A><U006F>";/
++	"<U0061><U0062><U0072><U0069><U006C>";/
++	"<U006D><U0061><U0079><U006F>";/
++	"<U006A><U0075><U006E><U0069><U006F>";/
++	"<U006A><U0075><U006C><U0069><U006F>";/
++	"<U0061><U0067><U006F><U0073><U0074><U006F>";/
++	"<U0073><U0065><U0070><U0074><U0069><U0065><U006D><U0062><U0072><U0065>";/
++	"<U006F><U0063><U0074><U0075><U0062><U0072><U0065>";/
++	"<U006E><U006F><U0076><U0069><U0065><U006D><U0062><U0072><U0065>";/
++	"<U0064><U0069><U0063><U0069><U0065><U006D><U0062><U0072><U0065>"
+ d_t_fmt "<U0025><U0061><U0020><U0025><U0064><U0020><U0025><U0062><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
+ d_fmt   "<U0025><U0064><U002F><U0025><U006D><U002F><U0025><U0079>"
+ t_fmt   "<U0025><U0054>"
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_PE
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_PE
++++ glibc-2.12-2-gc4ccff1/localedata/locales/es_PE
+@@ -56,8 +56,7 @@ copy "es_ES"
+ END LC_CTYPE
+ 
+ LC_MESSAGES
+-yesexpr "<U005E><U005B><U0073><U0053><U0079><U0059><U005D><U002E><U002A>"
+-noexpr  "<U005E><U005B><U006E><U004E><U005D><U002E><U002A>"
++copy "es_ES"
+ END LC_MESSAGES
+ 
+ LC_MONETARY
+@@ -79,41 +78,39 @@ n_sign_posn          1
+ END LC_MONETARY
+ 
+ LC_NUMERIC
+-decimal_point        "<U002E>"
+-thousands_sep        ""
+-grouping             0;0
++copy "es_ES"
+ END LC_NUMERIC
+ 
+ LC_TIME
+ abday   "<U0064><U006F><U006D>";"<U006C><U0075><U006E>";/
+-        "<U006D><U0061><U0072>";"<U006D><U0069><U00E9>";/
+-        "<U006A><U0075><U0065>";"<U0076><U0069><U0065>";/
+-        "<U0073><U00E1><U0062>"
++	"<U006D><U0061><U0072>";"<U006D><U0069><U00E9>";/
++	"<U006A><U0075><U0065>";"<U0076><U0069><U0065>";/
++	"<U0073><U00E1><U0062>"
+ day     "<U0064><U006F><U006D><U0069><U006E><U0067><U006F>";/
+-        "<U006C><U0075><U006E><U0065><U0073>";/
+-        "<U006D><U0061><U0072><U0074><U0065><U0073>";/
+-        "<U006D><U0069><U00E9><U0072><U0063><U006F><U006C><U0065><U0073>";/
+-        "<U006A><U0075><U0065><U0076><U0065><U0073>";/
+-        "<U0076><U0069><U0065><U0072><U006E><U0065><U0073>";/
+-        "<U0073><U00E1><U0062><U0061><U0064><U006F>"
++	"<U006C><U0075><U006E><U0065><U0073>";/
++	"<U006D><U0061><U0072><U0074><U0065><U0073>";/
++	"<U006D><U0069><U00E9><U0072><U0063><U006F><U006C><U0065><U0073>";/
++	"<U006A><U0075><U0065><U0076><U0065><U0073>";/
++	"<U0076><U0069><U0065><U0072><U006E><U0065><U0073>";/
++	"<U0073><U00E1><U0062><U0061><U0064><U006F>"
+ abmon   "<U0065><U006E><U0065>";"<U0066><U0065><U0062>";/
+-        "<U006D><U0061><U0072>";"<U0061><U0062><U0072>";/
+-        "<U006D><U0061><U0079>";"<U006A><U0075><U006E>";/
+-        "<U006A><U0075><U006C>";"<U0061><U0067><U006F>";/
+-        "<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
+-        "<U006E><U006F><U0076>";"<U0064><U0069><U0063>"
++	"<U006D><U0061><U0072>";"<U0061><U0062><U0072>";/
++	"<U006D><U0061><U0079>";"<U006A><U0075><U006E>";/
++	"<U006A><U0075><U006C>";"<U0061><U0067><U006F>";/
++	"<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
++	"<U006E><U006F><U0076>";"<U0064><U0069><U0063>"
+ mon     "<U0065><U006E><U0065><U0072><U006F>";/
+-        "<U0066><U0065><U0062><U0072><U0065><U0072><U006F>";/
+-        "<U006D><U0061><U0072><U007A><U006F>";/
+-        "<U0061><U0062><U0072><U0069><U006C>";/
+-        "<U006D><U0061><U0079><U006F>";/
+-        "<U006A><U0075><U006E><U0069><U006F>";/
+-        "<U006A><U0075><U006C><U0069><U006F>";/
+-        "<U0061><U0067><U006F><U0073><U0074><U006F>";/
+-        "<U0073><U0065><U0070><U0074><U0069><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U006F><U0063><U0074><U0075><U0062><U0072><U0065>";/
+-        "<U006E><U006F><U0076><U0069><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U0064><U0069><U0063><U0069><U0065><U006D><U0062><U0072><U0065>"
++	"<U0066><U0065><U0062><U0072><U0065><U0072><U006F>";/
++	"<U006D><U0061><U0072><U007A><U006F>";/
++	"<U0061><U0062><U0072><U0069><U006C>";/
++	"<U006D><U0061><U0079><U006F>";/
++	"<U006A><U0075><U006E><U0069><U006F>";/
++	"<U006A><U0075><U006C><U0069><U006F>";/
++	"<U0061><U0067><U006F><U0073><U0074><U006F>";/
++	"<U0073><U0065><U0070><U0074><U0069><U0065><U006D><U0062><U0072><U0065>";/
++	"<U006F><U0063><U0074><U0075><U0062><U0072><U0065>";/
++	"<U006E><U006F><U0076><U0069><U0065><U006D><U0062><U0072><U0065>";/
++	"<U0064><U0069><U0063><U0069><U0065><U006D><U0062><U0072><U0065>"
+ d_t_fmt "<U0025><U0061><U0020><U0025><U0064><U0020><U0025><U0062><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
+ d_fmt   "<U0025><U0064><U002F><U0025><U006D><U002F><U0025><U0079>"
+ t_fmt   "<U0025><U0054>"
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_PR
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_PR
++++ glibc-2.12-2-gc4ccff1/localedata/locales/es_PR
+@@ -47,8 +47,7 @@ copy "es_ES"
+ END LC_CTYPE
+ 
+ LC_MESSAGES
+-yesexpr "<U005E><U005B><U0073><U0053><U0079><U0059><U005D><U002E><U002A>"
+-noexpr  "<U005E><U005B><U006E><U004E><U005D><U002E><U002A>"
++copy "es_ES"
+ END LC_MESSAGES
+ 
+ LC_MONETARY
+@@ -70,41 +69,39 @@ n_sign_posn          1
+ END LC_MONETARY
+ 
+ LC_NUMERIC
+-decimal_point        "<U002E>"
+-thousands_sep        ""
+-grouping             0;0
++copy "es_ES"
+ END LC_NUMERIC
+ 
+ LC_TIME
+ abday   "<U0064><U006F><U006D>";"<U006C><U0075><U006E>";/
+-        "<U006D><U0061><U0072>";"<U006D><U0069><U00E9>";/
+-        "<U006A><U0075><U0065>";"<U0076><U0069><U0065>";/
+-        "<U0073><U00E1><U0062>"
++	"<U006D><U0061><U0072>";"<U006D><U0069><U00E9>";/
++	"<U006A><U0075><U0065>";"<U0076><U0069><U0065>";/
++	"<U0073><U00E1><U0062>"
+ day     "<U0064><U006F><U006D><U0069><U006E><U0067><U006F>";/
+-        "<U006C><U0075><U006E><U0065><U0073>";/
+-        "<U006D><U0061><U0072><U0074><U0065><U0073>";/
+-        "<U006D><U0069><U00E9><U0072><U0063><U006F><U006C><U0065><U0073>";/
+-        "<U006A><U0075><U0065><U0076><U0065><U0073>";/
+-        "<U0076><U0069><U0065><U0072><U006E><U0065><U0073>";/
+-        "<U0073><U00E1><U0062><U0061><U0064><U006F>"
++	"<U006C><U0075><U006E><U0065><U0073>";/
++	"<U006D><U0061><U0072><U0074><U0065><U0073>";/
++	"<U006D><U0069><U00E9><U0072><U0063><U006F><U006C><U0065><U0073>";/
++	"<U006A><U0075><U0065><U0076><U0065><U0073>";/
++	"<U0076><U0069><U0065><U0072><U006E><U0065><U0073>";/
++	"<U0073><U00E1><U0062><U0061><U0064><U006F>"
+ abmon   "<U0065><U006E><U0065>";"<U0066><U0065><U0062>";/
+-        "<U006D><U0061><U0072>";"<U0061><U0062><U0072>";/
+-        "<U006D><U0061><U0079>";"<U006A><U0075><U006E>";/
+-        "<U006A><U0075><U006C>";"<U0061><U0067><U006F>";/
+-        "<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
+-        "<U006E><U006F><U0076>";"<U0064><U0069><U0063>"
++	"<U006D><U0061><U0072>";"<U0061><U0062><U0072>";/
++	"<U006D><U0061><U0079>";"<U006A><U0075><U006E>";/
++	"<U006A><U0075><U006C>";"<U0061><U0067><U006F>";/
++	"<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
++	"<U006E><U006F><U0076>";"<U0064><U0069><U0063>"
+ mon     "<U0065><U006E><U0065><U0072><U006F>";/
+-        "<U0066><U0065><U0062><U0072><U0065><U0072><U006F>";/
+-        "<U006D><U0061><U0072><U007A><U006F>";/
+-        "<U0061><U0062><U0072><U0069><U006C>";/
+-        "<U006D><U0061><U0079><U006F>";/
+-        "<U006A><U0075><U006E><U0069><U006F>";/
+-        "<U006A><U0075><U006C><U0069><U006F>";/
+-        "<U0061><U0067><U006F><U0073><U0074><U006F>";/
+-        "<U0073><U0065><U0070><U0074><U0069><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U006F><U0063><U0074><U0075><U0062><U0072><U0065>";/
+-        "<U006E><U006F><U0076><U0069><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U0064><U0069><U0063><U0069><U0065><U006D><U0062><U0072><U0065>"
++	"<U0066><U0065><U0062><U0072><U0065><U0072><U006F>";/
++	"<U006D><U0061><U0072><U007A><U006F>";/
++	"<U0061><U0062><U0072><U0069><U006C>";/
++	"<U006D><U0061><U0079><U006F>";/
++	"<U006A><U0075><U006E><U0069><U006F>";/
++	"<U006A><U0075><U006C><U0069><U006F>";/
++	"<U0061><U0067><U006F><U0073><U0074><U006F>";/
++	"<U0073><U0065><U0070><U0074><U0069><U0065><U006D><U0062><U0072><U0065>";/
++	"<U006F><U0063><U0074><U0075><U0062><U0072><U0065>";/
++	"<U006E><U006F><U0076><U0069><U0065><U006D><U0062><U0072><U0065>";/
++	"<U0064><U0069><U0063><U0069><U0065><U006D><U0062><U0072><U0065>"
+ d_t_fmt "<U0025><U0061><U0020><U0025><U0064><U0020><U0025><U0062><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
+ d_fmt   "<U0025><U0064><U002F><U0025><U006D><U002F><U0025><U0079>"
+ t_fmt   "<U0025><U0054>"
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_PY
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_PY
++++ glibc-2.12-2-gc4ccff1/localedata/locales/es_PY
+@@ -56,8 +56,7 @@ copy "es_ES"
+ END LC_CTYPE
+ 
+ LC_MESSAGES
+-yesexpr "<U005E><U005B><U0073><U0053><U0079><U0059><U005D><U002E><U002A>"
+-noexpr  "<U005E><U005B><U006E><U004E><U005D><U002E><U002A>"
++copy "es_ES"
+ END LC_MESSAGES
+ 
+ LC_MONETARY
+@@ -79,41 +78,39 @@ n_sign_posn          1
+ END LC_MONETARY
+ 
+ LC_NUMERIC
+-decimal_point        "<U002C>"
+-thousands_sep        ""
+-grouping             0;0
++copy "es_ES"
+ END LC_NUMERIC
+ 
+ LC_TIME
+ abday   "<U0064><U006F><U006D>";"<U006C><U0075><U006E>";/
+-        "<U006D><U0061><U0072>";"<U006D><U0069><U00E9>";/
+-        "<U006A><U0075><U0065>";"<U0076><U0069><U0065>";/
+-        "<U0073><U00E1><U0062>"
++	"<U006D><U0061><U0072>";"<U006D><U0069><U00E9>";/
++	"<U006A><U0075><U0065>";"<U0076><U0069><U0065>";/
++	"<U0073><U00E1><U0062>"
+ day     "<U0064><U006F><U006D><U0069><U006E><U0067><U006F>";/
+-        "<U006C><U0075><U006E><U0065><U0073>";/
+-        "<U006D><U0061><U0072><U0074><U0065><U0073>";/
+-        "<U006D><U0069><U00E9><U0072><U0063><U006F><U006C><U0065><U0073>";/
+-        "<U006A><U0075><U0065><U0076><U0065><U0073>";/
+-        "<U0076><U0069><U0065><U0072><U006E><U0065><U0073>";/
+-        "<U0073><U00E1><U0062><U0061><U0064><U006F>"
++	"<U006C><U0075><U006E><U0065><U0073>";/
++	"<U006D><U0061><U0072><U0074><U0065><U0073>";/
++	"<U006D><U0069><U00E9><U0072><U0063><U006F><U006C><U0065><U0073>";/
++	"<U006A><U0075><U0065><U0076><U0065><U0073>";/
++	"<U0076><U0069><U0065><U0072><U006E><U0065><U0073>";/
++	"<U0073><U00E1><U0062><U0061><U0064><U006F>"
+ abmon   "<U0065><U006E><U0065>";"<U0066><U0065><U0062>";/
+-        "<U006D><U0061><U0072>";"<U0061><U0062><U0072>";/
+-        "<U006D><U0061><U0079>";"<U006A><U0075><U006E>";/
+-        "<U006A><U0075><U006C>";"<U0061><U0067><U006F>";/
+-        "<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
+-        "<U006E><U006F><U0076>";"<U0064><U0069><U0063>"
++	"<U006D><U0061><U0072>";"<U0061><U0062><U0072>";/
++	"<U006D><U0061><U0079>";"<U006A><U0075><U006E>";/
++	"<U006A><U0075><U006C>";"<U0061><U0067><U006F>";/
++	"<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
++	"<U006E><U006F><U0076>";"<U0064><U0069><U0063>"
+ mon     "<U0065><U006E><U0065><U0072><U006F>";/
+-        "<U0066><U0065><U0062><U0072><U0065><U0072><U006F>";/
+-        "<U006D><U0061><U0072><U007A><U006F>";/
+-        "<U0061><U0062><U0072><U0069><U006C>";/
+-        "<U006D><U0061><U0079><U006F>";/
+-        "<U006A><U0075><U006E><U0069><U006F>";/
+-        "<U006A><U0075><U006C><U0069><U006F>";/
+-        "<U0061><U0067><U006F><U0073><U0074><U006F>";/
+-        "<U0073><U0065><U0070><U0074><U0069><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U006F><U0063><U0074><U0075><U0062><U0072><U0065>";/
+-        "<U006E><U006F><U0076><U0069><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U0064><U0069><U0063><U0069><U0065><U006D><U0062><U0072><U0065>"
++	"<U0066><U0065><U0062><U0072><U0065><U0072><U006F>";/
++	"<U006D><U0061><U0072><U007A><U006F>";/
++	"<U0061><U0062><U0072><U0069><U006C>";/
++	"<U006D><U0061><U0079><U006F>";/
++	"<U006A><U0075><U006E><U0069><U006F>";/
++	"<U006A><U0075><U006C><U0069><U006F>";/
++	"<U0061><U0067><U006F><U0073><U0074><U006F>";/
++	"<U0073><U0065><U0070><U0074><U0069><U0065><U006D><U0062><U0072><U0065>";/
++	"<U006F><U0063><U0074><U0075><U0062><U0072><U0065>";/
++	"<U006E><U006F><U0076><U0069><U0065><U006D><U0062><U0072><U0065>";/
++	"<U0064><U0069><U0063><U0069><U0065><U006D><U0062><U0072><U0065>"
+ d_t_fmt "<U0025><U0061><U0020><U0025><U0064><U0020><U0025><U0062><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
+ d_fmt   "<U0025><U0064><U002F><U0025><U006D><U002F><U0025><U0079>"
+ t_fmt   "<U0025><U0054>"
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_SV
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_SV
++++ glibc-2.12-2-gc4ccff1/localedata/locales/es_SV
+@@ -56,8 +56,7 @@ copy "es_ES"
+ END LC_CTYPE
+ 
+ LC_MESSAGES
+-yesexpr "<U005E><U005B><U0073><U0053><U0079><U0059><U005D><U002E><U002A>"
+-noexpr  "<U005E><U005B><U006E><U004E><U005D><U002E><U002A>"
++copy "es_ES"
+ END LC_MESSAGES
+ 
+ LC_MONETARY
+@@ -79,9 +78,7 @@ n_sign_posn          1
+ END LC_MONETARY
+ 
+ LC_NUMERIC
+-decimal_point        "<U002E>"
+-thousands_sep        ""
+-grouping             0;0
++copy "es_ES"
+ END LC_NUMERIC
+ 
+ LC_TIME
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_UY
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_UY
++++ glibc-2.12-2-gc4ccff1/localedata/locales/es_UY
+@@ -56,8 +56,7 @@ copy "es_ES"
+ END LC_CTYPE
+ 
+ LC_MESSAGES
+-yesexpr "<U005E><U005B><U0073><U0053><U0079><U0059><U005D><U002E><U002A>"
+-noexpr  "<U005E><U005B><U006E><U004E><U005D><U002E><U002A>"
++copy "es_ES"
+ END LC_MESSAGES
+ 
+ LC_MONETARY
+@@ -79,41 +78,39 @@ n_sign_posn          1
+ END LC_MONETARY
+ 
+ LC_NUMERIC
+-decimal_point        "<U002C>"
+-thousands_sep        ""
+-grouping             0;0
++copy "es_ES"
+ END LC_NUMERIC
+ 
+ LC_TIME
+ abday   "<U0064><U006F><U006D>";"<U006C><U0075><U006E>";/
+-        "<U006D><U0061><U0072>";"<U006D><U0069><U00E9>";/
+-        "<U006A><U0075><U0065>";"<U0076><U0069><U0065>";/
+-        "<U0073><U00E1><U0062>"
++	"<U006D><U0061><U0072>";"<U006D><U0069><U00E9>";/
++	"<U006A><U0075><U0065>";"<U0076><U0069><U0065>";/
++	"<U0073><U00E1><U0062>"
+ day     "<U0064><U006F><U006D><U0069><U006E><U0067><U006F>";/
+-        "<U006C><U0075><U006E><U0065><U0073>";/
+-        "<U006D><U0061><U0072><U0074><U0065><U0073>";/
+-        "<U006D><U0069><U00E9><U0072><U0063><U006F><U006C><U0065><U0073>";/
+-        "<U006A><U0075><U0065><U0076><U0065><U0073>";/
+-        "<U0076><U0069><U0065><U0072><U006E><U0065><U0073>";/
+-        "<U0073><U00E1><U0062><U0061><U0064><U006F>"
++	"<U006C><U0075><U006E><U0065><U0073>";/
++	"<U006D><U0061><U0072><U0074><U0065><U0073>";/
++	"<U006D><U0069><U00E9><U0072><U0063><U006F><U006C><U0065><U0073>";/
++	"<U006A><U0075><U0065><U0076><U0065><U0073>";/
++	"<U0076><U0069><U0065><U0072><U006E><U0065><U0073>";/
++	"<U0073><U00E1><U0062><U0061><U0064><U006F>"
+ abmon   "<U0065><U006E><U0065>";"<U0066><U0065><U0062>";/
+-        "<U006D><U0061><U0072>";"<U0061><U0062><U0072>";/
+-        "<U006D><U0061><U0079>";"<U006A><U0075><U006E>";/
+-        "<U006A><U0075><U006C>";"<U0061><U0067><U006F>";/
+-        "<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
+-        "<U006E><U006F><U0076>";"<U0064><U0069><U0063>"
++	"<U006D><U0061><U0072>";"<U0061><U0062><U0072>";/
++	"<U006D><U0061><U0079>";"<U006A><U0075><U006E>";/
++	"<U006A><U0075><U006C>";"<U0061><U0067><U006F>";/
++	"<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
++	"<U006E><U006F><U0076>";"<U0064><U0069><U0063>"
+ mon     "<U0065><U006E><U0065><U0072><U006F>";/
+-        "<U0066><U0065><U0062><U0072><U0065><U0072><U006F>";/
+-        "<U006D><U0061><U0072><U007A><U006F>";/
+-        "<U0061><U0062><U0072><U0069><U006C>";/
+-        "<U006D><U0061><U0079><U006F>";/
+-        "<U006A><U0075><U006E><U0069><U006F>";/
+-        "<U006A><U0075><U006C><U0069><U006F>";/
+-        "<U0061><U0067><U006F><U0073><U0074><U006F>";/
+-        "<U0073><U0065><U0070><U0074><U0069><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U006F><U0063><U0074><U0075><U0062><U0072><U0065>";/
+-        "<U006E><U006F><U0076><U0069><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U0064><U0069><U0063><U0069><U0065><U006D><U0062><U0072><U0065>"
++	"<U0066><U0065><U0062><U0072><U0065><U0072><U006F>";/
++	"<U006D><U0061><U0072><U007A><U006F>";/
++	"<U0061><U0062><U0072><U0069><U006C>";/
++	"<U006D><U0061><U0079><U006F>";/
++	"<U006A><U0075><U006E><U0069><U006F>";/
++	"<U006A><U0075><U006C><U0069><U006F>";/
++	"<U0061><U0067><U006F><U0073><U0074><U006F>";/
++	"<U0073><U0065><U0070><U0074><U0069><U0065><U006D><U0062><U0072><U0065>";/
++	"<U006F><U0063><U0074><U0075><U0062><U0072><U0065>";/
++	"<U006E><U006F><U0076><U0069><U0065><U006D><U0062><U0072><U0065>";/
++	"<U0064><U0069><U0063><U0069><U0065><U006D><U0062><U0072><U0065>"
+ d_t_fmt "<U0025><U0061><U0020><U0025><U0064><U0020><U0025><U0062><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
+ d_fmt   "<U0025><U0064><U002F><U0025><U006D><U002F><U0025><U0079>"
+ t_fmt   "<U0025><U0054>"
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/es_VE
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/es_VE
++++ glibc-2.12-2-gc4ccff1/localedata/locales/es_VE
+@@ -56,8 +56,7 @@ copy "es_ES"
+ END LC_CTYPE
+ 
+ LC_MESSAGES
+-yesexpr "<U005E><U005B><U0073><U0053><U0079><U0059><U005D><U002E><U002A>"
+-noexpr  "<U005E><U005B><U006E><U004E><U005D><U002E><U002A>"
++copy "es_ES"
+ END LC_MESSAGES
+ 
+ LC_MONETARY
+@@ -79,41 +78,39 @@ n_sign_posn          1
+ END LC_MONETARY
+ 
+ LC_NUMERIC
+-decimal_point        "<U002C>"
+-thousands_sep        ""
+-grouping             0;0
++copy "es_ES"
+ END LC_NUMERIC
+ 
+ LC_TIME
+ abday   "<U0064><U006F><U006D>";"<U006C><U0075><U006E>";/
+-        "<U006D><U0061><U0072>";"<U006D><U0069><U00E9>";/
+-        "<U006A><U0075><U0065>";"<U0076><U0069><U0065>";/
+-        "<U0073><U00E1><U0062>"
++	"<U006D><U0061><U0072>";"<U006D><U0069><U00E9>";/
++	"<U006A><U0075><U0065>";"<U0076><U0069><U0065>";/
++	"<U0073><U00E1><U0062>"
+ day     "<U0064><U006F><U006D><U0069><U006E><U0067><U006F>";/
+-        "<U006C><U0075><U006E><U0065><U0073>";/
+-        "<U006D><U0061><U0072><U0074><U0065><U0073>";/
+-        "<U006D><U0069><U00E9><U0072><U0063><U006F><U006C><U0065><U0073>";/
+-        "<U006A><U0075><U0065><U0076><U0065><U0073>";/
+-        "<U0076><U0069><U0065><U0072><U006E><U0065><U0073>";/
+-        "<U0073><U00E1><U0062><U0061><U0064><U006F>"
++	"<U006C><U0075><U006E><U0065><U0073>";/
++	"<U006D><U0061><U0072><U0074><U0065><U0073>";/
++	"<U006D><U0069><U00E9><U0072><U0063><U006F><U006C><U0065><U0073>";/
++	"<U006A><U0075><U0065><U0076><U0065><U0073>";/
++	"<U0076><U0069><U0065><U0072><U006E><U0065><U0073>";/
++	"<U0073><U00E1><U0062><U0061><U0064><U006F>"
+ abmon   "<U0065><U006E><U0065>";"<U0066><U0065><U0062>";/
+-        "<U006D><U0061><U0072>";"<U0061><U0062><U0072>";/
+-        "<U006D><U0061><U0079>";"<U006A><U0075><U006E>";/
+-        "<U006A><U0075><U006C>";"<U0061><U0067><U006F>";/
+-        "<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
+-        "<U006E><U006F><U0076>";"<U0064><U0069><U0063>"
++	"<U006D><U0061><U0072>";"<U0061><U0062><U0072>";/
++	"<U006D><U0061><U0079>";"<U006A><U0075><U006E>";/
++	"<U006A><U0075><U006C>";"<U0061><U0067><U006F>";/
++	"<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
++	"<U006E><U006F><U0076>";"<U0064><U0069><U0063>"
+ mon     "<U0065><U006E><U0065><U0072><U006F>";/
+-        "<U0066><U0065><U0062><U0072><U0065><U0072><U006F>";/
+-        "<U006D><U0061><U0072><U007A><U006F>";/
+-        "<U0061><U0062><U0072><U0069><U006C>";/
+-        "<U006D><U0061><U0079><U006F>";/
+-        "<U006A><U0075><U006E><U0069><U006F>";/
+-        "<U006A><U0075><U006C><U0069><U006F>";/
+-        "<U0061><U0067><U006F><U0073><U0074><U006F>";/
+-        "<U0073><U0065><U0070><U0074><U0069><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U006F><U0063><U0074><U0075><U0062><U0072><U0065>";/
+-        "<U006E><U006F><U0076><U0069><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U0064><U0069><U0063><U0069><U0065><U006D><U0062><U0072><U0065>"
++	"<U0066><U0065><U0062><U0072><U0065><U0072><U006F>";/
++	"<U006D><U0061><U0072><U007A><U006F>";/
++	"<U0061><U0062><U0072><U0069><U006C>";/
++	"<U006D><U0061><U0079><U006F>";/
++	"<U006A><U0075><U006E><U0069><U006F>";/
++	"<U006A><U0075><U006C><U0069><U006F>";/
++	"<U0061><U0067><U006F><U0073><U0074><U006F>";/
++	"<U0073><U0065><U0070><U0074><U0069><U0065><U006D><U0062><U0072><U0065>";/
++	"<U006F><U0063><U0074><U0075><U0062><U0072><U0065>";/
++	"<U006E><U006F><U0076><U0069><U0065><U006D><U0062><U0072><U0065>";/
++	"<U0064><U0069><U0063><U0069><U0065><U006D><U0062><U0072><U0065>"
+ d_t_fmt "<U0025><U0061><U0020><U0025><U0064><U0020><U0025><U0062><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
+ d_fmt   "<U0025><U0064><U002F><U0025><U006D><U002F><U0025><U0079>"
+ t_fmt   "<U0025><U0054>"
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/fr_BE
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/fr_BE
++++ glibc-2.12-2-gc4ccff1/localedata/locales/fr_BE
+@@ -79,7 +79,7 @@ END LC_MONETARY
+ LC_NUMERIC
+ decimal_point             "<U002C>"
+ thousands_sep             "<U002E>"
+-grouping                  0;0
++grouping                  3;3
+ END LC_NUMERIC
+ 
+ LC_TIME
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/fr_CA
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/fr_CA
++++ glibc-2.12-2-gc4ccff1/localedata/locales/fr_CA
+@@ -55,8 +55,7 @@ copy "en_CA"
+ END LC_COLLATE
+ 
+ LC_MESSAGES
+-yesexpr "<U005E><U005B><U006F><U004F><U0079><U0059><U005D><U002E><U002A>"
+-noexpr  "<U005E><U005B><U006E><U004E><U005D><U002E><U002A>"
++copy "fr_FR"
+ END LC_MESSAGES
+ 
+ LC_MONETARY
+@@ -78,41 +77,39 @@ n_sign_posn               0
+ END LC_MONETARY
+ 
+ LC_NUMERIC
+-decimal_point             "<U002C>"
+-thousands_sep             "<U0020>"
+-grouping                  0;0
++copy "fr_FR"
+ END LC_NUMERIC
+ 
+ LC_TIME
+ abday   "<U0064><U0069><U006D>";"<U006C><U0075><U006E>";/
+-        "<U006D><U0061><U0072>";"<U006D><U0065><U0072>";/
+-        "<U006A><U0065><U0075>";"<U0076><U0065><U006E>";/
+-        "<U0073><U0061><U006D>"
++	"<U006D><U0061><U0072>";"<U006D><U0065><U0072>";/
++	"<U006A><U0065><U0075>";"<U0076><U0065><U006E>";/
++	"<U0073><U0061><U006D>"
+ day     "<U0064><U0069><U006D><U0061><U006E><U0063><U0068><U0065>";/
+-        "<U006C><U0075><U006E><U0064><U0069>";/
+-        "<U006D><U0061><U0072><U0064><U0069>";/
+-        "<U006D><U0065><U0072><U0063><U0072><U0065><U0064><U0069>";/
+-        "<U006A><U0065><U0075><U0064><U0069>";/
+-        "<U0076><U0065><U006E><U0064><U0072><U0065><U0064><U0069>";/
+-        "<U0073><U0061><U006D><U0065><U0064><U0069>"
++	"<U006C><U0075><U006E><U0064><U0069>";/
++	"<U006D><U0061><U0072><U0064><U0069>";/
++	"<U006D><U0065><U0072><U0063><U0072><U0065><U0064><U0069>";/
++	"<U006A><U0065><U0075><U0064><U0069>";/
++	"<U0076><U0065><U006E><U0064><U0072><U0065><U0064><U0069>";/
++	"<U0073><U0061><U006D><U0065><U0064><U0069>"
+ abmon   "<U006A><U0061><U006E>";"<U0066><U00E9><U0076>";/
+-        "<U006D><U0061><U0072>";"<U0061><U0076><U0072>";/
+-        "<U006D><U0061><U0069>";"<U006A><U0075><U006E>";/
+-        "<U006A><U0075><U0069>";"<U0061><U006F><U00FB>";/
+-        "<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
+-        "<U006E><U006F><U0076>";"<U0064><U00E9><U0063>"
++	"<U006D><U0061><U0072>";"<U0061><U0076><U0072>";/
++	"<U006D><U0061><U0069>";"<U006A><U0075><U006E>";/
++	"<U006A><U0075><U0069>";"<U0061><U006F><U00FB>";/
++	"<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
++	"<U006E><U006F><U0076>";"<U0064><U00E9><U0063>"
+ mon     "<U006A><U0061><U006E><U0076><U0069><U0065><U0072>";/
+-        "<U0066><U00E9><U0076><U0072><U0069><U0065><U0072>";/
+-        "<U006D><U0061><U0072><U0073>";/
+-        "<U0061><U0076><U0072><U0069><U006C>";/
+-        "<U006D><U0061><U0069>";/
+-        "<U006A><U0075><U0069><U006E>";/
+-        "<U006A><U0075><U0069><U006C><U006C><U0065><U0074>";/
+-        "<U0061><U006F><U00FB><U0074>";/
+-        "<U0073><U0065><U0070><U0074><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U006F><U0063><U0074><U006F><U0062><U0072><U0065>";/
+-        "<U006E><U006F><U0076><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U0064><U00E9><U0063><U0065><U006D><U0062><U0072><U0065>"
++	"<U0066><U00E9><U0076><U0072><U0069><U0065><U0072>";/
++	"<U006D><U0061><U0072><U0073>";/
++	"<U0061><U0076><U0072><U0069><U006C>";/
++	"<U006D><U0061><U0069>";/
++	"<U006A><U0075><U0069><U006E>";/
++	"<U006A><U0075><U0069><U006C><U006C><U0065><U0074>";/
++	"<U0061><U006F><U00FB><U0074>";/
++	"<U0073><U0065><U0070><U0074><U0065><U006D><U0062><U0072><U0065>";/
++	"<U006F><U0063><U0074><U006F><U0062><U0072><U0065>";/
++	"<U006E><U006F><U0076><U0065><U006D><U0062><U0072><U0065>";/
++	"<U0064><U00E9><U0063><U0065><U006D><U0062><U0072><U0065>"
+ d_t_fmt "<U0025><U0061><U0020><U0025><U0064><U0020><U0025><U0062><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
+ d_fmt   "<U0025><U0059><U002D><U0025><U006D><U002D><U0025><U0064>"
+ t_fmt   "<U0025><U0054>"
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/fr_CH
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/fr_CH
++++ glibc-2.12-2-gc4ccff1/localedata/locales/fr_CH
+@@ -64,41 +64,39 @@ copy  "de_CH"
+ END LC_MONETARY
+ 
+ LC_NUMERIC
+-decimal_point             "<U002C>"
+-thousands_sep             ""
+-grouping                  0;0
++copy "de_CH"
+ END LC_NUMERIC
+ 
+ LC_TIME
+ abday   "<U0064><U0069><U006D>";"<U006C><U0075><U006E>";/
+-        "<U006D><U0061><U0072>";"<U006D><U0065><U0072>";/
+-        "<U006A><U0065><U0075>";"<U0076><U0065><U006E>";/
+-        "<U0073><U0061><U006D>"
++	"<U006D><U0061><U0072>";"<U006D><U0065><U0072>";/
++	"<U006A><U0065><U0075>";"<U0076><U0065><U006E>";/
++	"<U0073><U0061><U006D>"
+ day     "<U0064><U0069><U006D><U0061><U006E><U0063><U0068><U0065>";/
+-        "<U006C><U0075><U006E><U0064><U0069>";/
+-        "<U006D><U0061><U0072><U0064><U0069>";/
+-        "<U006D><U0065><U0072><U0063><U0072><U0065><U0064><U0069>";/
+-        "<U006A><U0065><U0075><U0064><U0069>";/
+-        "<U0076><U0065><U006E><U0064><U0072><U0065><U0064><U0069>";/
+-        "<U0073><U0061><U006D><U0065><U0064><U0069>"
++	"<U006C><U0075><U006E><U0064><U0069>";/
++	"<U006D><U0061><U0072><U0064><U0069>";/
++	"<U006D><U0065><U0072><U0063><U0072><U0065><U0064><U0069>";/
++	"<U006A><U0065><U0075><U0064><U0069>";/
++	"<U0076><U0065><U006E><U0064><U0072><U0065><U0064><U0069>";/
++	"<U0073><U0061><U006D><U0065><U0064><U0069>"
+ abmon   "<U006A><U0061><U006E>";"<U0066><U00E9><U0076>";/
+-        "<U006D><U0061><U0072>";"<U0061><U0076><U0072>";/
+-        "<U006D><U0061><U0069>";"<U006A><U0075><U006E>";/
+-        "<U006A><U0075><U0069>";"<U0061><U006F><U00FB>";/
+-        "<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
+-        "<U006E><U006F><U0076>";"<U0064><U00E9><U0063>"
++	"<U006D><U0061><U0072>";"<U0061><U0076><U0072>";/
++	"<U006D><U0061><U0069>";"<U006A><U0075><U006E>";/
++	"<U006A><U0075><U0069>";"<U0061><U006F><U00FB>";/
++	"<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
++	"<U006E><U006F><U0076>";"<U0064><U00E9><U0063>"
+ mon     "<U006A><U0061><U006E><U0076><U0069><U0065><U0072>";/
+-        "<U0066><U00E9><U0076><U0072><U0069><U0065><U0072>";/
+-        "<U006D><U0061><U0072><U0073>";/
+-        "<U0061><U0076><U0072><U0069><U006C>";/
+-        "<U006D><U0061><U0069>";/
+-        "<U006A><U0075><U0069><U006E>";/
+-        "<U006A><U0075><U0069><U006C><U006C><U0065><U0074>";/
+-        "<U0061><U006F><U00FB><U0074>";/
+-        "<U0073><U0065><U0070><U0074><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U006F><U0063><U0074><U006F><U0062><U0072><U0065>";/
+-        "<U006E><U006F><U0076><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U0064><U00E9><U0063><U0065><U006D><U0062><U0072><U0065>"
++	"<U0066><U00E9><U0076><U0072><U0069><U0065><U0072>";/
++	"<U006D><U0061><U0072><U0073>";/
++	"<U0061><U0076><U0072><U0069><U006C>";/
++	"<U006D><U0061><U0069>";/
++	"<U006A><U0075><U0069><U006E>";/
++	"<U006A><U0075><U0069><U006C><U006C><U0065><U0074>";/
++	"<U0061><U006F><U00FB><U0074>";/
++	"<U0073><U0065><U0070><U0074><U0065><U006D><U0062><U0072><U0065>";/
++	"<U006F><U0063><U0074><U006F><U0062><U0072><U0065>";/
++	"<U006E><U006F><U0076><U0065><U006D><U0062><U0072><U0065>";/
++	"<U0064><U00E9><U0063><U0065><U006D><U0062><U0072><U0065>"
+ d_t_fmt "<U0025><U0061><U0020><U0025><U0064><U0020><U0025><U0062><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
+ d_fmt   "<U0025><U0064><U002E><U0020><U0025><U006D><U002E><U0020><U0025><U0079>"
+ t_fmt   "<U0025><U0054>"
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/fr_LU
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/fr_LU
++++ glibc-2.12-2-gc4ccff1/localedata/locales/fr_LU
+@@ -78,40 +78,40 @@ END LC_MONETARY
+ 
+ LC_NUMERIC
+ decimal_point             "<U002C>"
+-thousands_sep             ""
+-grouping                  0;0
++thousands_sep             "<U0020>"
++grouping                  3;3
+ END LC_NUMERIC
+ 
+ LC_TIME
+ abday   "<U0064><U0069><U006D>";"<U006C><U0075><U006E>";/
+-        "<U006D><U0061><U0072>";"<U006D><U0065><U0072>";/
+-        "<U006A><U0065><U0075>";"<U0076><U0065><U006E>";/
+-        "<U0073><U0061><U006D>"
++	"<U006D><U0061><U0072>";"<U006D><U0065><U0072>";/
++	"<U006A><U0065><U0075>";"<U0076><U0065><U006E>";/
++	"<U0073><U0061><U006D>"
+ day     "<U0064><U0069><U006D><U0061><U006E><U0063><U0068><U0065>";/
+-        "<U006C><U0075><U006E><U0064><U0069>";/
+-        "<U006D><U0061><U0072><U0064><U0069>";/
+-        "<U006D><U0065><U0072><U0063><U0072><U0065><U0064><U0069>";/
+-        "<U006A><U0065><U0075><U0064><U0069>";/
+-        "<U0076><U0065><U006E><U0064><U0072><U0065><U0064><U0069>";/
+-        "<U0073><U0061><U006D><U0065><U0064><U0069>"
++	"<U006C><U0075><U006E><U0064><U0069>";/
++	"<U006D><U0061><U0072><U0064><U0069>";/
++	"<U006D><U0065><U0072><U0063><U0072><U0065><U0064><U0069>";/
++	"<U006A><U0065><U0075><U0064><U0069>";/
++	"<U0076><U0065><U006E><U0064><U0072><U0065><U0064><U0069>";/
++	"<U0073><U0061><U006D><U0065><U0064><U0069>"
+ abmon   "<U006A><U0061><U006E>";"<U0066><U00E9><U0076>";/
+-        "<U006D><U0061><U0072>";"<U0061><U0076><U0072>";/
+-        "<U006D><U0061><U0069>";"<U006A><U0075><U006E>";/
+-        "<U006A><U0075><U0069>";"<U0061><U006F><U00FB>";/
+-        "<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
+-        "<U006E><U006F><U0076>";"<U0064><U00E9><U0063>"
++	"<U006D><U0061><U0072>";"<U0061><U0076><U0072>";/
++	"<U006D><U0061><U0069>";"<U006A><U0075><U006E>";/
++	"<U006A><U0075><U0069>";"<U0061><U006F><U00FB>";/
++	"<U0073><U0065><U0070>";"<U006F><U0063><U0074>";/
++	"<U006E><U006F><U0076>";"<U0064><U00E9><U0063>"
+ mon     "<U006A><U0061><U006E><U0076><U0069><U0065><U0072>";/
+-        "<U0066><U00E9><U0076><U0072><U0069><U0065><U0072>";/
+-        "<U006D><U0061><U0072><U0073>";/
+-        "<U0061><U0076><U0072><U0069><U006C>";/
+-        "<U006D><U0061><U0069>";/
+-        "<U006A><U0075><U0069><U006E>";/
+-        "<U006A><U0075><U0069><U006C><U006C><U0065><U0074>";/
+-        "<U0061><U006F><U00FB><U0074>";/
+-        "<U0073><U0065><U0070><U0074><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U006F><U0063><U0074><U006F><U0062><U0072><U0065>";/
+-        "<U006E><U006F><U0076><U0065><U006D><U0062><U0072><U0065>";/
+-        "<U0064><U00E9><U0063><U0065><U006D><U0062><U0072><U0065>"
++	"<U0066><U00E9><U0076><U0072><U0069><U0065><U0072>";/
++	"<U006D><U0061><U0072><U0073>";/
++	"<U0061><U0076><U0072><U0069><U006C>";/
++	"<U006D><U0061><U0069>";/
++	"<U006A><U0075><U0069><U006E>";/
++	"<U006A><U0075><U0069><U006C><U006C><U0065><U0074>";/
++	"<U0061><U006F><U00FB><U0074>";/
++	"<U0073><U0065><U0070><U0074><U0065><U006D><U0062><U0072><U0065>";/
++	"<U006F><U0063><U0074><U006F><U0062><U0072><U0065>";/
++	"<U006E><U006F><U0076><U0065><U006D><U0062><U0072><U0065>";/
++	"<U0064><U00E9><U0063><U0065><U006D><U0062><U0072><U0065>"
+ d_t_fmt "<U0025><U0061><U0020><U0025><U0064><U0020><U0025><U0062><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
+ d_fmt   "<U0025><U0064><U002E><U0025><U006D><U002E><U0025><U0059>"
+ t_fmt   "<U0025><U0054>"
diff --git a/SOURCES/glibc-rh688980.patch b/SOURCES/glibc-rh688980.patch
new file mode 100644
index 0000000..ce98926
--- /dev/null
+++ b/SOURCES/glibc-rh688980.patch
@@ -0,0 +1,20 @@
+2011-05-11  Ulrich Drepper  <drepper@gmail.com>
+
+	[BZ #12625]
+	* misc/mntent_r.c (addmntent): Flush the stream after the output
+
+Index: glibc-2.12-2-gc4ccff1/misc/mntent_r.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/misc/mntent_r.c
++++ glibc-2.12-2-gc4ccff1/misc/mntent_r.c
+@@ -263,8 +263,8 @@ __addmntent (FILE *stream, const struct 
+ 		   mntcopy.mnt_type,
+ 		   mntcopy.mnt_opts,
+ 		   mntcopy.mnt_freq,
+-		   mntcopy.mnt_passno)
+-	  < 0 ? 1 : 0);
++		   mntcopy.mnt_passno) < 0
++	  || fflush (stream) != 0);
+ }
+ weak_alias (__addmntent, addmntent)
+ 
diff --git a/SOURCES/glibc-rh689471.patch b/SOURCES/glibc-rh689471.patch
new file mode 100644
index 0000000..4c7fc8a
--- /dev/null
+++ b/SOURCES/glibc-rh689471.patch
@@ -0,0 +1,333 @@
+2011-03-20  H.J. Lu  <hongjiu.lu@intel.com>
+
+	[BZ #12597]
+	* string/test-strncmp.c (do_page_test): New function.
+	(check2): Likewise.
+	(test_main): Call check2.
+	* sysdeps/x86_64/multiarch/strcmp.S: Properly cross page boundary.
+
+Index: glibc-2.12-2-gc4ccff1/string/test-strncmp.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/string/test-strncmp.c
++++ glibc-2.12-2-gc4ccff1/string/test-strncmp.c
+@@ -200,6 +200,27 @@ do_test (size_t align1, size_t align2, s
+ }
+ 
+ static void
++do_page_test (size_t offset1, size_t offset2, char *s2)
++{
++  char *s1;
++  int exp_result;
++
++  if (offset1 >= page_size || offset2 >= page_size)
++    return;
++
++  s1 = (char *) (buf1 + offset1);
++  s2 += offset2;
++
++  exp_result= *s1;
++  
++  FOR_EACH_IMPL (impl, 0)
++    {
++      check_result (impl, s1, s2, page_size, -exp_result);
++      check_result (impl, s2, s1, page_size, exp_result);
++    }
++}
++
++static void
+ do_random_tests (void)
+ {
+   size_t i, j, n, align1, align2, pos, len1, len2, size;
+@@ -312,6 +333,25 @@ check1 (void)
+     }
+ }
+ 
++static void
++check2 (void)
++{
++  size_t i;
++  char *s1, *s2;
++
++  s1 = (char *) buf1;
++  for (i = 0; i < page_size - 1; i++)
++    s1[i] = 23;
++  s1[i] = 0;
++
++  s2 = strdup (s1);
++
++  for (i = 0; i < 64; ++i)
++    do_page_test (3990 + i, 2635, s2);
++
++  free (s2);
++}
++
+ int
+ test_main (void)
+ {
+@@ -320,6 +360,7 @@ test_main (void)
+   test_init ();
+ 
+   check1 ();
++  check2 ();
+ 
+   printf ("%23s", "");
+   FOR_EACH_IMPL (impl, 0)
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strcmp.S
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/multiarch/strcmp.S
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strcmp.S
+@@ -452,6 +452,7 @@ LABEL(loop_ashr_1_use_sse4_2):
+ 	add	$16, %r10
+ 	jg	LABEL(nibble_ashr_1_use_sse4_2)
+ 
++LABEL(nibble_ashr_1_use_sse4_2_restart):
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $1, -16(%rdi, %rdx), %xmm0
+ # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
+@@ -499,7 +500,7 @@ LABEL(nibble_ashr_1_use_sse4_2):
+ 	jae	LABEL(nibble_ashr_use_sse4_2_exit)
+ # endif
+ 	cmp	$14, %ecx
+-	ja	LABEL(loop_ashr_1_use_sse4_2)
++	ja	LABEL(nibble_ashr_1_use_sse4_2_restart)
+ 
+ 	jmp	LABEL(nibble_ashr_use_sse4_2_exit)
+ 
+@@ -544,6 +545,7 @@ LABEL(loop_ashr_2_use_sse4_2):
+ 	add	$16, %r10
+ 	jg	LABEL(nibble_ashr_2_use_sse4_2)
+ 
++LABEL(nibble_ashr_2_use_sse4_2_restart):
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $2, -16(%rdi, %rdx), %xmm0
+ # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
+@@ -591,7 +593,7 @@ LABEL(nibble_ashr_2_use_sse4_2):
+ 	jae	LABEL(nibble_ashr_use_sse4_2_exit)
+ # endif
+ 	cmp	$13, %ecx
+-	ja	LABEL(loop_ashr_2_use_sse4_2)
++	ja	LABEL(nibble_ashr_2_use_sse4_2_restart)
+ 
+ 	jmp	LABEL(nibble_ashr_use_sse4_2_exit)
+ 
+@@ -636,6 +638,7 @@ LABEL(loop_ashr_3_use_sse4_2):
+ 	add	$16, %r10
+ 	jg	LABEL(nibble_ashr_3_use_sse4_2)
+ 
++LABEL(nibble_ashr_3_use_sse4_2_restart):
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $3, -16(%rdi, %rdx), %xmm0
+ # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
+@@ -683,7 +686,7 @@ LABEL(nibble_ashr_3_use_sse4_2):
+ 	jae	LABEL(nibble_ashr_use_sse4_2_exit)
+ # endif
+ 	cmp	$12, %ecx
+-	ja	LABEL(loop_ashr_3_use_sse4_2)
++	ja	LABEL(nibble_ashr_3_use_sse4_2_restart)
+ 
+ 	jmp	LABEL(nibble_ashr_use_sse4_2_exit)
+ 
+@@ -729,6 +732,7 @@ LABEL(loop_ashr_4_use_sse4_2):
+ 	add	$16, %r10
+ 	jg	LABEL(nibble_ashr_4_use_sse4_2)
+ 
++LABEL(nibble_ashr_4_use_sse4_2_restart):
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $4, -16(%rdi, %rdx), %xmm0
+ # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
+@@ -776,7 +780,7 @@ LABEL(nibble_ashr_4_use_sse4_2):
+ 	jae	LABEL(nibble_ashr_use_sse4_2_exit)
+ # endif
+ 	cmp	$11, %ecx
+-	ja	LABEL(loop_ashr_4_use_sse4_2)
++	ja	LABEL(nibble_ashr_4_use_sse4_2_restart)
+ 
+ 	jmp	LABEL(nibble_ashr_use_sse4_2_exit)
+ 
+@@ -822,6 +826,7 @@ LABEL(loop_ashr_5_use_sse4_2):
+ 	add	$16, %r10
+ 	jg	LABEL(nibble_ashr_5_use_sse4_2)
+ 
++LABEL(nibble_ashr_5_use_sse4_2_restart):
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $5, -16(%rdi, %rdx), %xmm0
+ # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
+@@ -870,7 +875,7 @@ LABEL(nibble_ashr_5_use_sse4_2):
+ 	jae	LABEL(nibble_ashr_use_sse4_2_exit)
+ # endif
+ 	cmp	$10, %ecx
+-	ja	LABEL(loop_ashr_5_use_sse4_2)
++	ja	LABEL(nibble_ashr_5_use_sse4_2_restart)
+ 
+ 	jmp	LABEL(nibble_ashr_use_sse4_2_exit)
+ 
+@@ -916,6 +921,7 @@ LABEL(loop_ashr_6_use_sse4_2):
+ 	add	$16, %r10
+ 	jg	LABEL(nibble_ashr_6_use_sse4_2)
+ 
++LABEL(nibble_ashr_6_use_sse4_2_restart):
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $6, -16(%rdi, %rdx), %xmm0
+ # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
+@@ -963,7 +969,7 @@ LABEL(nibble_ashr_6_use_sse4_2):
+ 	jae	LABEL(nibble_ashr_use_sse4_2_exit)
+ # endif
+ 	cmp	$9, %ecx
+-	ja	LABEL(loop_ashr_6_use_sse4_2)
++	ja	LABEL(nibble_ashr_6_use_sse4_2_restart)
+ 
+ 	jmp	LABEL(nibble_ashr_use_sse4_2_exit)
+ 
+@@ -1009,6 +1015,7 @@ LABEL(loop_ashr_7_use_sse4_2):
+ 	add	$16, %r10
+ 	jg	LABEL(nibble_ashr_7_use_sse4_2)
+ 
++LABEL(nibble_ashr_7_use_sse4_2_restart):
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $7, -16(%rdi, %rdx), %xmm0
+ # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
+@@ -1056,7 +1063,7 @@ LABEL(nibble_ashr_7_use_sse4_2):
+ 	jae	LABEL(nibble_ashr_use_sse4_2_exit)
+ # endif
+ 	cmp	$8, %ecx
+-	ja	LABEL(loop_ashr_7_use_sse4_2)
++	ja	LABEL(nibble_ashr_7_use_sse4_2_restart)
+ 
+ 	jmp	LABEL(nibble_ashr_use_sse4_2_exit)
+ 
+@@ -1102,6 +1109,7 @@ LABEL(loop_ashr_8_use_sse4_2):
+ 	add	$16, %r10
+ 	jg	LABEL(nibble_ashr_8_use_sse4_2)
+ 
++LABEL(nibble_ashr_8_use_sse4_2_restart):
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $8, -16(%rdi, %rdx), %xmm0
+ # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
+@@ -1149,7 +1157,7 @@ LABEL(nibble_ashr_8_use_sse4_2):
+ 	jae	LABEL(nibble_ashr_use_sse4_2_exit)
+ # endif
+ 	cmp	$7, %ecx
+-	ja	LABEL(loop_ashr_8_use_sse4_2)
++	ja	LABEL(nibble_ashr_8_use_sse4_2_restart)
+ 
+ 	jmp	LABEL(nibble_ashr_use_sse4_2_exit)
+ 
+@@ -1195,6 +1203,7 @@ LABEL(loop_ashr_9_use_sse4_2):
+ 	add	$16, %r10
+ 	jg	LABEL(nibble_ashr_9_use_sse4_2)
+ 
++LABEL(nibble_ashr_9_use_sse4_2_restart):
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 
+ 	palignr $9, -16(%rdi, %rdx), %xmm0
+@@ -1243,7 +1252,7 @@ LABEL(nibble_ashr_9_use_sse4_2):
+ 	jae	LABEL(nibble_ashr_use_sse4_2_exit)
+ # endif
+ 	cmp	$6, %ecx
+-	ja	LABEL(loop_ashr_9_use_sse4_2)
++	ja	LABEL(nibble_ashr_9_use_sse4_2_restart)
+ 
+ 	jmp	LABEL(nibble_ashr_use_sse4_2_exit)
+ 
+@@ -1289,6 +1298,7 @@ LABEL(loop_ashr_10_use_sse4_2):
+ 	add	$16, %r10
+ 	jg	LABEL(nibble_ashr_10_use_sse4_2)
+ 
++LABEL(nibble_ashr_10_use_sse4_2_restart):
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $10, -16(%rdi, %rdx), %xmm0
+ # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
+@@ -1336,7 +1346,7 @@ LABEL(nibble_ashr_10_use_sse4_2):
+ 	jae	LABEL(nibble_ashr_use_sse4_2_exit)
+ # endif
+ 	cmp	$5, %ecx
+-	ja	LABEL(loop_ashr_10_use_sse4_2)
++	ja	LABEL(nibble_ashr_10_use_sse4_2_restart)
+ 
+ 	jmp	LABEL(nibble_ashr_use_sse4_2_exit)
+ 
+@@ -1382,6 +1392,7 @@ LABEL(loop_ashr_11_use_sse4_2):
+ 	add	$16, %r10
+ 	jg	LABEL(nibble_ashr_11_use_sse4_2)
+ 
++LABEL(nibble_ashr_11_use_sse4_2_restart):
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $11, -16(%rdi, %rdx), %xmm0
+ # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
+@@ -1429,7 +1440,7 @@ LABEL(nibble_ashr_11_use_sse4_2):
+ 	jae	LABEL(nibble_ashr_use_sse4_2_exit)
+ # endif
+ 	cmp	$4, %ecx
+-	ja	LABEL(loop_ashr_11_use_sse4_2)
++	ja	LABEL(nibble_ashr_11_use_sse4_2_restart)
+ 
+ 	jmp	LABEL(nibble_ashr_use_sse4_2_exit)
+ 
+@@ -1475,6 +1486,7 @@ LABEL(loop_ashr_12_use_sse4_2):
+ 	add	$16, %r10
+ 	jg	LABEL(nibble_ashr_12_use_sse4_2)
+ 
++LABEL(nibble_ashr_12_use_sse4_2_restart):
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $12, -16(%rdi, %rdx), %xmm0
+ # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
+@@ -1522,7 +1534,7 @@ LABEL(nibble_ashr_12_use_sse4_2):
+ 	jae	LABEL(nibble_ashr_use_sse4_2_exit)
+ # endif
+ 	cmp	$3, %ecx
+-	ja	LABEL(loop_ashr_12_use_sse4_2)
++	ja	LABEL(nibble_ashr_12_use_sse4_2_restart)
+ 
+ 	jmp	LABEL(nibble_ashr_use_sse4_2_exit)
+ 
+@@ -1569,6 +1581,7 @@ LABEL(loop_ashr_13_use_sse4_2):
+ 	add	$16, %r10
+ 	jg	LABEL(nibble_ashr_13_use_sse4_2)
+ 
++LABEL(nibble_ashr_13_use_sse4_2_restart):
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $13, -16(%rdi, %rdx), %xmm0
+ # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
+@@ -1616,7 +1629,7 @@ LABEL(nibble_ashr_13_use_sse4_2):
+ 	jae	LABEL(nibble_ashr_use_sse4_2_exit)
+ # endif
+ 	cmp	$2, %ecx
+-	ja	LABEL(loop_ashr_13_use_sse4_2)
++	ja	LABEL(nibble_ashr_13_use_sse4_2_restart)
+ 
+ 	jmp	LABEL(nibble_ashr_use_sse4_2_exit)
+ 
+@@ -1663,6 +1676,7 @@ LABEL(loop_ashr_14_use_sse4_2):
+ 	add	$16, %r10
+ 	jg	LABEL(nibble_ashr_14_use_sse4_2)
+ 
++LABEL(nibble_ashr_14_use_sse4_2_restart):
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $14, -16(%rdi, %rdx), %xmm0
+ # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
+@@ -1710,7 +1724,7 @@ LABEL(nibble_ashr_14_use_sse4_2):
+ 	jae	LABEL(nibble_ashr_use_sse4_2_exit)
+ # endif
+ 	cmp	$1, %ecx
+-	ja	LABEL(loop_ashr_14_use_sse4_2)
++	ja	LABEL(nibble_ashr_14_use_sse4_2_restart)
+ 
+ 	jmp	LABEL(nibble_ashr_use_sse4_2_exit)
+ 
+@@ -1759,6 +1773,7 @@ LABEL(loop_ashr_15_use_sse4_2):
+ 	add	$16, %r10
+ 	jg	LABEL(nibble_ashr_15_use_sse4_2)
+ 
++LABEL(nibble_ashr_15_use_sse4_2_restart):
+ 	movdqa	(%rdi, %rdx), %xmm0
+ 	palignr $15, -16(%rdi, %rdx), %xmm0
+ # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
+@@ -1806,7 +1821,7 @@ LABEL(nibble_ashr_15_use_sse4_2):
+ 	jae	LABEL(nibble_ashr_use_sse4_2_exit)
+ # endif
+ 	cmp	$0, %ecx
+-	ja	LABEL(loop_ashr_15_use_sse4_2)
++	ja	LABEL(nibble_ashr_15_use_sse4_2_restart)
+ 
+ LABEL(nibble_ashr_use_sse4_2_exit):
+ # if !defined USE_AS_STRCASECMP_L && !defined USE_AS_STRNCASECMP_L
diff --git a/SOURCES/glibc-rh692177.patch b/SOURCES/glibc-rh692177.patch
new file mode 100644
index 0000000..1036769
--- /dev/null
+++ b/SOURCES/glibc-rh692177.patch
@@ -0,0 +1,137 @@
+2011-03-22  Ulrich Drepper  <drepper@gmail.com>
+
+	* sysdeps/unix/sysv/linux/i386/sysconf.c (intel_check_word): Increment
+	round counter.
+	* sysdeps/x86_64/cacheinfo.c (intel_check_word): Likewise.
+
+2011-03-20  Ulrich Drepper  <drepper@gmail.com>
+
+	[BZ #12587]
+	* sysdeps/unix/sysv/linux/i386/sysconf.c (intel_check_word):
+	Handle cache information in CPU leaf 4.
+	* sysdeps/x86_64/cacheinfo.c (intel_check_word): Likewise.
+
+Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/i386/sysconf.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/i386/sysconf.c
++++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/i386/sysconf.c
+@@ -186,6 +186,57 @@ intel_check_word (int name, unsigned int
+ 	    /* No need to look further.  */
+ 	    break;
+ 	}
++      else if (byte == 0xff)
++	{
++	  /* CPUID leaf 0x4 contains all the information.  We need to
++	     iterate over it.  */
++	  unsigned int eax;
++	  unsigned int ebx;
++	  unsigned int ecx;
++	  unsigned int edx;
++
++	  unsigned int round = 0;
++	  while (1)
++	    {
++	      asm volatile ("xchgl %%ebx, %1; cpuid; xchgl %%ebx, %1"
++			    : "=a" (eax), "=r" (ebx), "=c" (ecx), "=d" (edx)
++			    : "0" (4), "2" (round));
++
++	      enum { null = 0, data = 1, inst = 2, uni = 3 } type = eax & 0x1f;
++	      if (type == null)
++		/* That was the end.  */
++		break;
++
++	      unsigned int level = (eax >> 5) & 0x7;
++
++	      if ((level == 1 && type == data
++		   && folded_rel_name == M(_SC_LEVEL1_DCACHE_SIZE))
++		  || (level == 1 && type == inst
++		      && folded_rel_name == M(_SC_LEVEL1_ICACHE_SIZE))
++		  || (level == 2 && folded_rel_name == M(_SC_LEVEL2_CACHE_SIZE))
++		  || (level == 3 && folded_rel_name == M(_SC_LEVEL3_CACHE_SIZE))
++		  || (level == 4 && folded_rel_name == M(_SC_LEVEL4_CACHE_SIZE)))
++		{
++		  unsigned int offset = M(name) - folded_rel_name;
++
++		  if (offset == 0)
++		    /* Cache size.  */
++		    return (((ebx >> 22) + 1)
++			    * (((ebx >> 12) & 0x3ff) + 1)
++			    * ((ebx & 0xfff) + 1)
++			    * (ecx + 1));
++		  if (offset == 1)
++		    return (ebx >> 22) + 1;
++
++		  assert (offset == 2);
++		  return (ebx & 0xfff) + 1;
++		}
++
++	      ++round;
++	    }
++	  /* There is no other cache information anywhere else.  */
++	  break;
++	}
+       else
+ 	{
+ 	  if (byte == 0x49 && folded_rel_name == M(_SC_LEVEL3_CACHE_SIZE))
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/cacheinfo.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/cacheinfo.c
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/cacheinfo.c
+@@ -181,6 +181,57 @@ intel_check_word (int name, unsigned int
+ 	    /* No need to look further.  */
+ 	    break;
+ 	}
++      else if (byte == 0xff)
++	{
++	  /* CPUID leaf 0x4 contains all the information.  We need to
++	     iterate over it.  */
++	  unsigned int eax;
++	  unsigned int ebx;
++	  unsigned int ecx;
++	  unsigned int edx;
++
++	  unsigned int round = 0;
++	  while (1)
++	    {
++	      asm volatile ("xchgl %%ebx, %1; cpuid; xchgl %%ebx, %1"
++			    : "=a" (eax), "=r" (ebx), "=c" (ecx), "=d" (edx)
++			    : "0" (4), "2" (round));
++
++	      enum { null = 0, data = 1, inst = 2, uni = 3 } type = eax & 0x1f;
++	      if (type == null)
++		/* That was the end.  */
++		break;
++
++	      unsigned int level = (eax >> 5) & 0x7;
++
++	      if ((level == 1 && type == data
++		   && folded_rel_name == M(_SC_LEVEL1_DCACHE_SIZE))
++		  || (level == 1 && type == inst
++		      && folded_rel_name == M(_SC_LEVEL1_ICACHE_SIZE))
++		  || (level == 2 && folded_rel_name == M(_SC_LEVEL2_CACHE_SIZE))
++		  || (level == 3 && folded_rel_name == M(_SC_LEVEL3_CACHE_SIZE))
++		  || (level == 4 && folded_rel_name == M(_SC_LEVEL4_CACHE_SIZE)))
++		{
++		  unsigned int offset = M(name) - folded_rel_name;
++
++		  if (offset == 0)
++		    /* Cache size.  */
++		    return (((ebx >> 22) + 1)
++			    * (((ebx >> 12) & 0x3ff) + 1)
++			    * ((ebx & 0xfff) + 1)
++			    * (ecx + 1));
++		  if (offset == 1)
++		    return (ebx >> 22) + 1;
++
++		  assert (offset == 2);
++		  return (ebx & 0xfff) + 1;
++		}
++
++	      ++round;
++	    }
++	  /* There is no other cache information anywhere else.  */
++	  break;
++	}
+       else
+ 	{
+ 	  if (byte == 0x49 && folded_rel_name == M(_SC_LEVEL3_CACHE_SIZE))
diff --git a/SOURCES/glibc-rh692838.patch b/SOURCES/glibc-rh692838.patch
new file mode 100644
index 0000000..aa2adf1
--- /dev/null
+++ b/SOURCES/glibc-rh692838.patch
@@ -0,0 +1,6165 @@
+2011-05-09  Ulrich Drepper  <drepper@gmail.com>
+
+	[BZ #12541]
+	* locales/ar_IN: Update currency_symbol.
+	* locales/as_IN: Likewise.
+	* locales/bn_IN: Likewise.
+	* locales/en_IN: Likewise.
+	* locales/gu_IN: Likewise.
+	* locales/hi_IN: Likewise.
+	* locales/kn_IN: Likewise.
+	* locales/kok_IN: Likewise.
+	* locales/ks_IN: Likewise.
+	* locales/ml_IN: Likewise.
+	* locales/mr_IN: Likewise.
+	* locales/or_IN: Likewise.
+	* locales/pa_IN: Likewise.
+	* locales/sa_IN: Likewise.
+	* locales/sd_IN: Likewise.
+	* locales/ta_IN: Likewise.
+	* locales/te_IN: Likewise.
+	Patch by pravin.d.s@gmail.com.
+
+2011-05-09  Ulrich Drepper  <drepper@gmail.com>
+
+	[BZ #12711]
+	* locale/C-translit.h.in: Add entry for U20B9.
+	Patch by pravin.d.s@gmail.com.
+
+Index: glibc-2.12-2-gc4ccff1/locale/C-translit.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/locale/C-translit.h
++++ glibc-2.12-2-gc4ccff1/locale/C-translit.h
+@@ -1,4 +1,4 @@
+-#define NTRANSLIT 1353
++#define NTRANSLIT 1354
+ static const uint32_t translit_from_idx[] =
+ {
+      0,    2,    4,    6,    8,   10,   12,   14,   16,   18,   20,   22,
+@@ -113,7 +113,7 @@ static const uint32_t translit_from_idx[
+   2616, 2618, 2620, 2622, 2624, 2626, 2628, 2630, 2632, 2634, 2636, 2638,
+   2640, 2642, 2644, 2646, 2648, 2650, 2652, 2654, 2656, 2658, 2660, 2662,
+   2664, 2666, 2668, 2670, 2672, 2674, 2676, 2678, 2680, 2682, 2684, 2686,
+-  2688, 2690, 2692, 2694, 2696, 2698, 2700, 2702, 2704
++  2688, 2690, 2692, 2694, 2696, 2698, 2700, 2702, 2704, 2706
+ };
+ static const wchar_t translit_from_tbl[] =
+   L"\x00a0" L"\0" L"\x00a9" L"\0" L"\x00ab" L"\0" L"\x00ad" L"\0" L"\x00ae"
+@@ -134,334 +134,334 @@ static const wchar_t translit_from_tbl[]
+   L"\0" L"\x2035" L"\0" L"\x2036" L"\0" L"\x2037" L"\0" L"\x2039" L"\0"
+   L"\x203a" L"\0" L"\x203c" L"\0" L"\x2044" L"\0" L"\x2047" L"\0" L"\x2048"
+   L"\0" L"\x2049" L"\0" L"\x205f" L"\0" L"\x2060" L"\0" L"\x2061" L"\0"
+-  L"\x2062" L"\0" L"\x2063" L"\0" L"\x20a8" L"\0" L"\x20ac" L"\0" L"\x2100"
+-  L"\0" L"\x2101" L"\0" L"\x2102" L"\0" L"\x2105" L"\0" L"\x2106" L"\0"
+-  L"\x210a" L"\0" L"\x210b" L"\0" L"\x210c" L"\0" L"\x210d" L"\0" L"\x210e"
+-  L"\0" L"\x2110" L"\0" L"\x2111" L"\0" L"\x2112" L"\0" L"\x2113" L"\0"
+-  L"\x2115" L"\0" L"\x2116" L"\0" L"\x2119" L"\0" L"\x211a" L"\0" L"\x211b"
+-  L"\0" L"\x211c" L"\0" L"\x211d" L"\0" L"\x2121" L"\0" L"\x2122" L"\0"
+-  L"\x2124" L"\0" L"\x2126" L"\0" L"\x2128" L"\0" L"\x212c" L"\0" L"\x212d"
+-  L"\0" L"\x212e" L"\0" L"\x212f" L"\0" L"\x2130" L"\0" L"\x2131" L"\0"
+-  L"\x2133" L"\0" L"\x2134" L"\0" L"\x2139" L"\0" L"\x2145" L"\0" L"\x2146"
+-  L"\0" L"\x2147" L"\0" L"\x2148" L"\0" L"\x2149" L"\0" L"\x2153" L"\0"
+-  L"\x2154" L"\0" L"\x2155" L"\0" L"\x2156" L"\0" L"\x2157" L"\0" L"\x2158"
+-  L"\0" L"\x2159" L"\0" L"\x215a" L"\0" L"\x215b" L"\0" L"\x215c" L"\0"
+-  L"\x215d" L"\0" L"\x215e" L"\0" L"\x215f" L"\0" L"\x2160" L"\0" L"\x2161"
+-  L"\0" L"\x2162" L"\0" L"\x2163" L"\0" L"\x2164" L"\0" L"\x2165" L"\0"
+-  L"\x2166" L"\0" L"\x2167" L"\0" L"\x2168" L"\0" L"\x2169" L"\0" L"\x216a"
+-  L"\0" L"\x216b" L"\0" L"\x216c" L"\0" L"\x216d" L"\0" L"\x216e" L"\0"
+-  L"\x216f" L"\0" L"\x2170" L"\0" L"\x2171" L"\0" L"\x2172" L"\0" L"\x2173"
+-  L"\0" L"\x2174" L"\0" L"\x2175" L"\0" L"\x2176" L"\0" L"\x2177" L"\0"
+-  L"\x2178" L"\0" L"\x2179" L"\0" L"\x217a" L"\0" L"\x217b" L"\0" L"\x217c"
+-  L"\0" L"\x217d" L"\0" L"\x217e" L"\0" L"\x217f" L"\0" L"\x2190" L"\0"
+-  L"\x2192" L"\0" L"\x2194" L"\0" L"\x21d0" L"\0" L"\x21d2" L"\0" L"\x21d4"
+-  L"\0" L"\x2212" L"\0" L"\x2215" L"\0" L"\x2216" L"\0" L"\x2217" L"\0"
+-  L"\x2223" L"\0" L"\x2236" L"\0" L"\x223c" L"\0" L"\x2264" L"\0" L"\x2265"
+-  L"\0" L"\x226a" L"\0" L"\x226b" L"\0" L"\x22d8" L"\0" L"\x22d9" L"\0"
+-  L"\x2400" L"\0" L"\x2401" L"\0" L"\x2402" L"\0" L"\x2403" L"\0" L"\x2404"
+-  L"\0" L"\x2405" L"\0" L"\x2406" L"\0" L"\x2407" L"\0" L"\x2408" L"\0"
+-  L"\x2409" L"\0" L"\x240a" L"\0" L"\x240b" L"\0" L"\x240c" L"\0" L"\x240d"
+-  L"\0" L"\x240e" L"\0" L"\x240f" L"\0" L"\x2410" L"\0" L"\x2411" L"\0"
+-  L"\x2412" L"\0" L"\x2413" L"\0" L"\x2414" L"\0" L"\x2415" L"\0" L"\x2416"
+-  L"\0" L"\x2417" L"\0" L"\x2418" L"\0" L"\x2419" L"\0" L"\x241a" L"\0"
+-  L"\x241b" L"\0" L"\x241c" L"\0" L"\x241d" L"\0" L"\x241e" L"\0" L"\x241f"
+-  L"\0" L"\x2420" L"\0" L"\x2421" L"\0" L"\x2423" L"\0" L"\x2424" L"\0"
+-  L"\x2460" L"\0" L"\x2461" L"\0" L"\x2462" L"\0" L"\x2463" L"\0" L"\x2464"
+-  L"\0" L"\x2465" L"\0" L"\x2466" L"\0" L"\x2467" L"\0" L"\x2468" L"\0"
+-  L"\x2469" L"\0" L"\x246a" L"\0" L"\x246b" L"\0" L"\x246c" L"\0" L"\x246d"
+-  L"\0" L"\x246e" L"\0" L"\x246f" L"\0" L"\x2470" L"\0" L"\x2471" L"\0"
+-  L"\x2472" L"\0" L"\x2473" L"\0" L"\x2474" L"\0" L"\x2475" L"\0" L"\x2476"
+-  L"\0" L"\x2477" L"\0" L"\x2478" L"\0" L"\x2479" L"\0" L"\x247a" L"\0"
+-  L"\x247b" L"\0" L"\x247c" L"\0" L"\x247d" L"\0" L"\x247e" L"\0" L"\x247f"
+-  L"\0" L"\x2480" L"\0" L"\x2481" L"\0" L"\x2482" L"\0" L"\x2483" L"\0"
+-  L"\x2484" L"\0" L"\x2485" L"\0" L"\x2486" L"\0" L"\x2487" L"\0" L"\x2488"
+-  L"\0" L"\x2489" L"\0" L"\x248a" L"\0" L"\x248b" L"\0" L"\x248c" L"\0"
+-  L"\x248d" L"\0" L"\x248e" L"\0" L"\x248f" L"\0" L"\x2490" L"\0" L"\x2491"
+-  L"\0" L"\x2492" L"\0" L"\x2493" L"\0" L"\x2494" L"\0" L"\x2495" L"\0"
+-  L"\x2496" L"\0" L"\x2497" L"\0" L"\x2498" L"\0" L"\x2499" L"\0" L"\x249a"
+-  L"\0" L"\x249b" L"\0" L"\x249c" L"\0" L"\x249d" L"\0" L"\x249e" L"\0"
+-  L"\x249f" L"\0" L"\x24a0" L"\0" L"\x24a1" L"\0" L"\x24a2" L"\0" L"\x24a3"
+-  L"\0" L"\x24a4" L"\0" L"\x24a5" L"\0" L"\x24a6" L"\0" L"\x24a7" L"\0"
+-  L"\x24a8" L"\0" L"\x24a9" L"\0" L"\x24aa" L"\0" L"\x24ab" L"\0" L"\x24ac"
+-  L"\0" L"\x24ad" L"\0" L"\x24ae" L"\0" L"\x24af" L"\0" L"\x24b0" L"\0"
+-  L"\x24b1" L"\0" L"\x24b2" L"\0" L"\x24b3" L"\0" L"\x24b4" L"\0" L"\x24b5"
+-  L"\0" L"\x24b6" L"\0" L"\x24b7" L"\0" L"\x24b8" L"\0" L"\x24b9" L"\0"
+-  L"\x24ba" L"\0" L"\x24bb" L"\0" L"\x24bc" L"\0" L"\x24bd" L"\0" L"\x24be"
+-  L"\0" L"\x24bf" L"\0" L"\x24c0" L"\0" L"\x24c1" L"\0" L"\x24c2" L"\0"
+-  L"\x24c3" L"\0" L"\x24c4" L"\0" L"\x24c5" L"\0" L"\x24c6" L"\0" L"\x24c7"
+-  L"\0" L"\x24c8" L"\0" L"\x24c9" L"\0" L"\x24ca" L"\0" L"\x24cb" L"\0"
+-  L"\x24cc" L"\0" L"\x24cd" L"\0" L"\x24ce" L"\0" L"\x24cf" L"\0" L"\x24d0"
+-  L"\0" L"\x24d1" L"\0" L"\x24d2" L"\0" L"\x24d3" L"\0" L"\x24d4" L"\0"
+-  L"\x24d5" L"\0" L"\x24d6" L"\0" L"\x24d7" L"\0" L"\x24d8" L"\0" L"\x24d9"
+-  L"\0" L"\x24da" L"\0" L"\x24db" L"\0" L"\x24dc" L"\0" L"\x24dd" L"\0"
+-  L"\x24de" L"\0" L"\x24df" L"\0" L"\x24e0" L"\0" L"\x24e1" L"\0" L"\x24e2"
+-  L"\0" L"\x24e3" L"\0" L"\x24e4" L"\0" L"\x24e5" L"\0" L"\x24e6" L"\0"
+-  L"\x24e7" L"\0" L"\x24e8" L"\0" L"\x24e9" L"\0" L"\x24ea" L"\0" L"\x2500"
+-  L"\0" L"\x2502" L"\0" L"\x250c" L"\0" L"\x2510" L"\0" L"\x2514" L"\0"
+-  L"\x2518" L"\0" L"\x251c" L"\0" L"\x2524" L"\0" L"\x252c" L"\0" L"\x2534"
+-  L"\0" L"\x253c" L"\0" L"\x25e6" L"\0" L"\x2a74" L"\0" L"\x2a75" L"\0"
+-  L"\x2a76" L"\0" L"\x3000" L"\0" L"\x30a0" L"\0" L"\x3251" L"\0" L"\x3252"
+-  L"\0" L"\x3253" L"\0" L"\x3254" L"\0" L"\x3255" L"\0" L"\x3256" L"\0"
+-  L"\x3257" L"\0" L"\x3258" L"\0" L"\x3259" L"\0" L"\x325a" L"\0" L"\x325b"
+-  L"\0" L"\x325c" L"\0" L"\x325d" L"\0" L"\x325e" L"\0" L"\x325f" L"\0"
+-  L"\x32b1" L"\0" L"\x32b2" L"\0" L"\x32b3" L"\0" L"\x32b4" L"\0" L"\x32b5"
+-  L"\0" L"\x32b6" L"\0" L"\x32b7" L"\0" L"\x32b8" L"\0" L"\x32b9" L"\0"
+-  L"\x32ba" L"\0" L"\x32bb" L"\0" L"\x32bc" L"\0" L"\x32bd" L"\0" L"\x32be"
+-  L"\0" L"\x32bf" L"\0" L"\x3371" L"\0" L"\x3372" L"\0" L"\x3373" L"\0"
+-  L"\x3374" L"\0" L"\x3375" L"\0" L"\x3376" L"\0" L"\x3380" L"\0" L"\x3381"
+-  L"\0" L"\x3382" L"\0" L"\x3383" L"\0" L"\x3384" L"\0" L"\x3385" L"\0"
+-  L"\x3386" L"\0" L"\x3387" L"\0" L"\x3388" L"\0" L"\x3389" L"\0" L"\x338a"
+-  L"\0" L"\x338b" L"\0" L"\x338c" L"\0" L"\x338d" L"\0" L"\x338e" L"\0"
+-  L"\x338f" L"\0" L"\x3390" L"\0" L"\x3391" L"\0" L"\x3392" L"\0" L"\x3393"
+-  L"\0" L"\x3394" L"\0" L"\x3395" L"\0" L"\x3396" L"\0" L"\x3397" L"\0"
+-  L"\x3398" L"\0" L"\x3399" L"\0" L"\x339a" L"\0" L"\x339b" L"\0" L"\x339c"
+-  L"\0" L"\x339d" L"\0" L"\x339e" L"\0" L"\x339f" L"\0" L"\x33a0" L"\0"
+-  L"\x33a1" L"\0" L"\x33a2" L"\0" L"\x33a3" L"\0" L"\x33a4" L"\0" L"\x33a5"
+-  L"\0" L"\x33a6" L"\0" L"\x33a7" L"\0" L"\x33a8" L"\0" L"\x33a9" L"\0"
+-  L"\x33aa" L"\0" L"\x33ab" L"\0" L"\x33ac" L"\0" L"\x33ad" L"\0" L"\x33ae"
+-  L"\0" L"\x33af" L"\0" L"\x33b0" L"\0" L"\x33b1" L"\0" L"\x33b2" L"\0"
+-  L"\x33b3" L"\0" L"\x33b4" L"\0" L"\x33b5" L"\0" L"\x33b6" L"\0" L"\x33b7"
+-  L"\0" L"\x33b8" L"\0" L"\x33b9" L"\0" L"\x33ba" L"\0" L"\x33bb" L"\0"
+-  L"\x33bc" L"\0" L"\x33bd" L"\0" L"\x33be" L"\0" L"\x33bf" L"\0" L"\x33c2"
+-  L"\0" L"\x33c3" L"\0" L"\x33c4" L"\0" L"\x33c5" L"\0" L"\x33c6" L"\0"
+-  L"\x33c7" L"\0" L"\x33c8" L"\0" L"\x33c9" L"\0" L"\x33ca" L"\0" L"\x33cb"
+-  L"\0" L"\x33cc" L"\0" L"\x33cd" L"\0" L"\x33ce" L"\0" L"\x33cf" L"\0"
+-  L"\x33d0" L"\0" L"\x33d1" L"\0" L"\x33d2" L"\0" L"\x33d3" L"\0" L"\x33d4"
+-  L"\0" L"\x33d5" L"\0" L"\x33d6" L"\0" L"\x33d7" L"\0" L"\x33d8" L"\0"
+-  L"\x33d9" L"\0" L"\x33da" L"\0" L"\x33db" L"\0" L"\x33dc" L"\0" L"\x33dd"
+-  L"\0" L"\xfb00" L"\0" L"\xfb01" L"\0" L"\xfb02" L"\0" L"\xfb03" L"\0"
+-  L"\xfb04" L"\0" L"\xfb06" L"\0" L"\xfb29" L"\0" L"\xfe00" L"\0" L"\xfe01"
+-  L"\0" L"\xfe02" L"\0" L"\xfe03" L"\0" L"\xfe04" L"\0" L"\xfe05" L"\0"
+-  L"\xfe06" L"\0" L"\xfe07" L"\0" L"\xfe08" L"\0" L"\xfe09" L"\0" L"\xfe0a"
+-  L"\0" L"\xfe0b" L"\0" L"\xfe0c" L"\0" L"\xfe0d" L"\0" L"\xfe0e" L"\0"
+-  L"\xfe0f" L"\0" L"\xfe4d" L"\0" L"\xfe4e" L"\0" L"\xfe4f" L"\0" L"\xfe50"
+-  L"\0" L"\xfe52" L"\0" L"\xfe54" L"\0" L"\xfe55" L"\0" L"\xfe56" L"\0"
+-  L"\xfe57" L"\0" L"\xfe59" L"\0" L"\xfe5a" L"\0" L"\xfe5b" L"\0" L"\xfe5c"
+-  L"\0" L"\xfe5f" L"\0" L"\xfe60" L"\0" L"\xfe61" L"\0" L"\xfe62" L"\0"
+-  L"\xfe63" L"\0" L"\xfe64" L"\0" L"\xfe65" L"\0" L"\xfe66" L"\0" L"\xfe68"
+-  L"\0" L"\xfe69" L"\0" L"\xfe6a" L"\0" L"\xfe6b" L"\0" L"\xfeff" L"\0"
+-  L"\xff01" L"\0" L"\xff02" L"\0" L"\xff03" L"\0" L"\xff04" L"\0" L"\xff05"
+-  L"\0" L"\xff06" L"\0" L"\xff07" L"\0" L"\xff08" L"\0" L"\xff09" L"\0"
+-  L"\xff0a" L"\0" L"\xff0b" L"\0" L"\xff0c" L"\0" L"\xff0d" L"\0" L"\xff0e"
+-  L"\0" L"\xff0f" L"\0" L"\xff10" L"\0" L"\xff11" L"\0" L"\xff12" L"\0"
+-  L"\xff13" L"\0" L"\xff14" L"\0" L"\xff15" L"\0" L"\xff16" L"\0" L"\xff17"
+-  L"\0" L"\xff18" L"\0" L"\xff19" L"\0" L"\xff1a" L"\0" L"\xff1b" L"\0"
+-  L"\xff1c" L"\0" L"\xff1d" L"\0" L"\xff1e" L"\0" L"\xff1f" L"\0" L"\xff20"
+-  L"\0" L"\xff21" L"\0" L"\xff22" L"\0" L"\xff23" L"\0" L"\xff24" L"\0"
+-  L"\xff25" L"\0" L"\xff26" L"\0" L"\xff27" L"\0" L"\xff28" L"\0" L"\xff29"
+-  L"\0" L"\xff2a" L"\0" L"\xff2b" L"\0" L"\xff2c" L"\0" L"\xff2d" L"\0"
+-  L"\xff2e" L"\0" L"\xff2f" L"\0" L"\xff30" L"\0" L"\xff31" L"\0" L"\xff32"
+-  L"\0" L"\xff33" L"\0" L"\xff34" L"\0" L"\xff35" L"\0" L"\xff36" L"\0"
+-  L"\xff37" L"\0" L"\xff38" L"\0" L"\xff39" L"\0" L"\xff3a" L"\0" L"\xff3b"
+-  L"\0" L"\xff3c" L"\0" L"\xff3d" L"\0" L"\xff3e" L"\0" L"\xff3f" L"\0"
+-  L"\xff40" L"\0" L"\xff41" L"\0" L"\xff42" L"\0" L"\xff43" L"\0" L"\xff44"
+-  L"\0" L"\xff45" L"\0" L"\xff46" L"\0" L"\xff47" L"\0" L"\xff48" L"\0"
+-  L"\xff49" L"\0" L"\xff4a" L"\0" L"\xff4b" L"\0" L"\xff4c" L"\0" L"\xff4d"
+-  L"\0" L"\xff4e" L"\0" L"\xff4f" L"\0" L"\xff50" L"\0" L"\xff51" L"\0"
+-  L"\xff52" L"\0" L"\xff53" L"\0" L"\xff54" L"\0" L"\xff55" L"\0" L"\xff56"
+-  L"\0" L"\xff57" L"\0" L"\xff58" L"\0" L"\xff59" L"\0" L"\xff5a" L"\0"
+-  L"\xff5b" L"\0" L"\xff5c" L"\0" L"\xff5d" L"\0" L"\xff5e" L"\0"
+-  L"\x0001d400" L"\0" L"\x0001d401" L"\0" L"\x0001d402" L"\0" L"\x0001d403"
+-  L"\0" L"\x0001d404" L"\0" L"\x0001d405" L"\0" L"\x0001d406" L"\0"
+-  L"\x0001d407" L"\0" L"\x0001d408" L"\0" L"\x0001d409" L"\0" L"\x0001d40a"
+-  L"\0" L"\x0001d40b" L"\0" L"\x0001d40c" L"\0" L"\x0001d40d" L"\0"
+-  L"\x0001d40e" L"\0" L"\x0001d40f" L"\0" L"\x0001d410" L"\0" L"\x0001d411"
+-  L"\0" L"\x0001d412" L"\0" L"\x0001d413" L"\0" L"\x0001d414" L"\0"
+-  L"\x0001d415" L"\0" L"\x0001d416" L"\0" L"\x0001d417" L"\0" L"\x0001d418"
+-  L"\0" L"\x0001d419" L"\0" L"\x0001d41a" L"\0" L"\x0001d41b" L"\0"
+-  L"\x0001d41c" L"\0" L"\x0001d41d" L"\0" L"\x0001d41e" L"\0" L"\x0001d41f"
+-  L"\0" L"\x0001d420" L"\0" L"\x0001d421" L"\0" L"\x0001d422" L"\0"
+-  L"\x0001d423" L"\0" L"\x0001d424" L"\0" L"\x0001d425" L"\0" L"\x0001d426"
+-  L"\0" L"\x0001d427" L"\0" L"\x0001d428" L"\0" L"\x0001d429" L"\0"
+-  L"\x0001d42a" L"\0" L"\x0001d42b" L"\0" L"\x0001d42c" L"\0" L"\x0001d42d"
+-  L"\0" L"\x0001d42e" L"\0" L"\x0001d42f" L"\0" L"\x0001d430" L"\0"
+-  L"\x0001d431" L"\0" L"\x0001d432" L"\0" L"\x0001d433" L"\0" L"\x0001d434"
+-  L"\0" L"\x0001d435" L"\0" L"\x0001d436" L"\0" L"\x0001d437" L"\0"
+-  L"\x0001d438" L"\0" L"\x0001d439" L"\0" L"\x0001d43a" L"\0" L"\x0001d43b"
+-  L"\0" L"\x0001d43c" L"\0" L"\x0001d43d" L"\0" L"\x0001d43e" L"\0"
+-  L"\x0001d43f" L"\0" L"\x0001d440" L"\0" L"\x0001d441" L"\0" L"\x0001d442"
+-  L"\0" L"\x0001d443" L"\0" L"\x0001d444" L"\0" L"\x0001d445" L"\0"
+-  L"\x0001d446" L"\0" L"\x0001d447" L"\0" L"\x0001d448" L"\0" L"\x0001d449"
+-  L"\0" L"\x0001d44a" L"\0" L"\x0001d44b" L"\0" L"\x0001d44c" L"\0"
+-  L"\x0001d44d" L"\0" L"\x0001d44e" L"\0" L"\x0001d44f" L"\0" L"\x0001d450"
+-  L"\0" L"\x0001d451" L"\0" L"\x0001d452" L"\0" L"\x0001d453" L"\0"
+-  L"\x0001d454" L"\0" L"\x0001d456" L"\0" L"\x0001d457" L"\0" L"\x0001d458"
+-  L"\0" L"\x0001d459" L"\0" L"\x0001d45a" L"\0" L"\x0001d45b" L"\0"
+-  L"\x0001d45c" L"\0" L"\x0001d45d" L"\0" L"\x0001d45e" L"\0" L"\x0001d45f"
+-  L"\0" L"\x0001d460" L"\0" L"\x0001d461" L"\0" L"\x0001d462" L"\0"
+-  L"\x0001d463" L"\0" L"\x0001d464" L"\0" L"\x0001d465" L"\0" L"\x0001d466"
+-  L"\0" L"\x0001d467" L"\0" L"\x0001d468" L"\0" L"\x0001d469" L"\0"
+-  L"\x0001d46a" L"\0" L"\x0001d46b" L"\0" L"\x0001d46c" L"\0" L"\x0001d46d"
+-  L"\0" L"\x0001d46e" L"\0" L"\x0001d46f" L"\0" L"\x0001d470" L"\0"
+-  L"\x0001d471" L"\0" L"\x0001d472" L"\0" L"\x0001d473" L"\0" L"\x0001d474"
+-  L"\0" L"\x0001d475" L"\0" L"\x0001d476" L"\0" L"\x0001d477" L"\0"
+-  L"\x0001d478" L"\0" L"\x0001d479" L"\0" L"\x0001d47a" L"\0" L"\x0001d47b"
+-  L"\0" L"\x0001d47c" L"\0" L"\x0001d47d" L"\0" L"\x0001d47e" L"\0"
+-  L"\x0001d47f" L"\0" L"\x0001d480" L"\0" L"\x0001d481" L"\0" L"\x0001d482"
+-  L"\0" L"\x0001d483" L"\0" L"\x0001d484" L"\0" L"\x0001d485" L"\0"
+-  L"\x0001d486" L"\0" L"\x0001d487" L"\0" L"\x0001d488" L"\0" L"\x0001d489"
+-  L"\0" L"\x0001d48a" L"\0" L"\x0001d48b" L"\0" L"\x0001d48c" L"\0"
+-  L"\x0001d48d" L"\0" L"\x0001d48e" L"\0" L"\x0001d48f" L"\0" L"\x0001d490"
+-  L"\0" L"\x0001d491" L"\0" L"\x0001d492" L"\0" L"\x0001d493" L"\0"
+-  L"\x0001d494" L"\0" L"\x0001d495" L"\0" L"\x0001d496" L"\0" L"\x0001d497"
+-  L"\0" L"\x0001d498" L"\0" L"\x0001d499" L"\0" L"\x0001d49a" L"\0"
+-  L"\x0001d49b" L"\0" L"\x0001d49c" L"\0" L"\x0001d49e" L"\0" L"\x0001d49f"
+-  L"\0" L"\x0001d4a2" L"\0" L"\x0001d4a5" L"\0" L"\x0001d4a6" L"\0"
+-  L"\x0001d4a9" L"\0" L"\x0001d4aa" L"\0" L"\x0001d4ab" L"\0" L"\x0001d4ac"
+-  L"\0" L"\x0001d4ae" L"\0" L"\x0001d4af" L"\0" L"\x0001d4b0" L"\0"
+-  L"\x0001d4b1" L"\0" L"\x0001d4b2" L"\0" L"\x0001d4b3" L"\0" L"\x0001d4b4"
+-  L"\0" L"\x0001d4b5" L"\0" L"\x0001d4b6" L"\0" L"\x0001d4b7" L"\0"
+-  L"\x0001d4b8" L"\0" L"\x0001d4b9" L"\0" L"\x0001d4bb" L"\0" L"\x0001d4bd"
+-  L"\0" L"\x0001d4be" L"\0" L"\x0001d4bf" L"\0" L"\x0001d4c0" L"\0"
+-  L"\x0001d4c2" L"\0" L"\x0001d4c3" L"\0" L"\x0001d4c5" L"\0" L"\x0001d4c6"
+-  L"\0" L"\x0001d4c7" L"\0" L"\x0001d4c8" L"\0" L"\x0001d4c9" L"\0"
+-  L"\x0001d4ca" L"\0" L"\x0001d4cb" L"\0" L"\x0001d4cc" L"\0" L"\x0001d4cd"
+-  L"\0" L"\x0001d4ce" L"\0" L"\x0001d4cf" L"\0" L"\x0001d4d0" L"\0"
+-  L"\x0001d4d1" L"\0" L"\x0001d4d2" L"\0" L"\x0001d4d3" L"\0" L"\x0001d4d4"
+-  L"\0" L"\x0001d4d5" L"\0" L"\x0001d4d6" L"\0" L"\x0001d4d7" L"\0"
+-  L"\x0001d4d8" L"\0" L"\x0001d4d9" L"\0" L"\x0001d4da" L"\0" L"\x0001d4db"
+-  L"\0" L"\x0001d4dc" L"\0" L"\x0001d4dd" L"\0" L"\x0001d4de" L"\0"
+-  L"\x0001d4df" L"\0" L"\x0001d4e0" L"\0" L"\x0001d4e1" L"\0" L"\x0001d4e2"
+-  L"\0" L"\x0001d4e3" L"\0" L"\x0001d4e4" L"\0" L"\x0001d4e5" L"\0"
+-  L"\x0001d4e6" L"\0" L"\x0001d4e7" L"\0" L"\x0001d4e8" L"\0" L"\x0001d4e9"
+-  L"\0" L"\x0001d4ea" L"\0" L"\x0001d4eb" L"\0" L"\x0001d4ec" L"\0"
+-  L"\x0001d4ed" L"\0" L"\x0001d4ee" L"\0" L"\x0001d4ef" L"\0" L"\x0001d4f0"
+-  L"\0" L"\x0001d4f1" L"\0" L"\x0001d4f2" L"\0" L"\x0001d4f3" L"\0"
+-  L"\x0001d4f4" L"\0" L"\x0001d4f5" L"\0" L"\x0001d4f6" L"\0" L"\x0001d4f7"
+-  L"\0" L"\x0001d4f8" L"\0" L"\x0001d4f9" L"\0" L"\x0001d4fa" L"\0"
+-  L"\x0001d4fb" L"\0" L"\x0001d4fc" L"\0" L"\x0001d4fd" L"\0" L"\x0001d4fe"
+-  L"\0" L"\x0001d4ff" L"\0" L"\x0001d500" L"\0" L"\x0001d501" L"\0"
+-  L"\x0001d502" L"\0" L"\x0001d503" L"\0" L"\x0001d504" L"\0" L"\x0001d505"
+-  L"\0" L"\x0001d507" L"\0" L"\x0001d508" L"\0" L"\x0001d509" L"\0"
+-  L"\x0001d50a" L"\0" L"\x0001d50d" L"\0" L"\x0001d50e" L"\0" L"\x0001d50f"
+-  L"\0" L"\x0001d510" L"\0" L"\x0001d511" L"\0" L"\x0001d512" L"\0"
+-  L"\x0001d513" L"\0" L"\x0001d514" L"\0" L"\x0001d516" L"\0" L"\x0001d517"
+-  L"\0" L"\x0001d518" L"\0" L"\x0001d519" L"\0" L"\x0001d51a" L"\0"
+-  L"\x0001d51b" L"\0" L"\x0001d51c" L"\0" L"\x0001d51e" L"\0" L"\x0001d51f"
+-  L"\0" L"\x0001d520" L"\0" L"\x0001d521" L"\0" L"\x0001d522" L"\0"
+-  L"\x0001d523" L"\0" L"\x0001d524" L"\0" L"\x0001d525" L"\0" L"\x0001d526"
+-  L"\0" L"\x0001d527" L"\0" L"\x0001d528" L"\0" L"\x0001d529" L"\0"
+-  L"\x0001d52a" L"\0" L"\x0001d52b" L"\0" L"\x0001d52c" L"\0" L"\x0001d52d"
+-  L"\0" L"\x0001d52e" L"\0" L"\x0001d52f" L"\0" L"\x0001d530" L"\0"
+-  L"\x0001d531" L"\0" L"\x0001d532" L"\0" L"\x0001d533" L"\0" L"\x0001d534"
+-  L"\0" L"\x0001d535" L"\0" L"\x0001d536" L"\0" L"\x0001d537" L"\0"
+-  L"\x0001d538" L"\0" L"\x0001d539" L"\0" L"\x0001d53b" L"\0" L"\x0001d53c"
+-  L"\0" L"\x0001d53d" L"\0" L"\x0001d53e" L"\0" L"\x0001d540" L"\0"
+-  L"\x0001d541" L"\0" L"\x0001d542" L"\0" L"\x0001d543" L"\0" L"\x0001d544"
+-  L"\0" L"\x0001d546" L"\0" L"\x0001d54a" L"\0" L"\x0001d54b" L"\0"
+-  L"\x0001d54c" L"\0" L"\x0001d54d" L"\0" L"\x0001d54e" L"\0" L"\x0001d54f"
+-  L"\0" L"\x0001d550" L"\0" L"\x0001d552" L"\0" L"\x0001d553" L"\0"
+-  L"\x0001d554" L"\0" L"\x0001d555" L"\0" L"\x0001d556" L"\0" L"\x0001d557"
+-  L"\0" L"\x0001d558" L"\0" L"\x0001d559" L"\0" L"\x0001d55a" L"\0"
+-  L"\x0001d55b" L"\0" L"\x0001d55c" L"\0" L"\x0001d55d" L"\0" L"\x0001d55e"
+-  L"\0" L"\x0001d55f" L"\0" L"\x0001d560" L"\0" L"\x0001d561" L"\0"
+-  L"\x0001d562" L"\0" L"\x0001d563" L"\0" L"\x0001d564" L"\0" L"\x0001d565"
+-  L"\0" L"\x0001d566" L"\0" L"\x0001d567" L"\0" L"\x0001d568" L"\0"
+-  L"\x0001d569" L"\0" L"\x0001d56a" L"\0" L"\x0001d56b" L"\0" L"\x0001d56c"
+-  L"\0" L"\x0001d56d" L"\0" L"\x0001d56e" L"\0" L"\x0001d56f" L"\0"
+-  L"\x0001d570" L"\0" L"\x0001d571" L"\0" L"\x0001d572" L"\0" L"\x0001d573"
+-  L"\0" L"\x0001d574" L"\0" L"\x0001d575" L"\0" L"\x0001d576" L"\0"
+-  L"\x0001d577" L"\0" L"\x0001d578" L"\0" L"\x0001d579" L"\0" L"\x0001d57a"
+-  L"\0" L"\x0001d57b" L"\0" L"\x0001d57c" L"\0" L"\x0001d57d" L"\0"
+-  L"\x0001d57e" L"\0" L"\x0001d57f" L"\0" L"\x0001d580" L"\0" L"\x0001d581"
+-  L"\0" L"\x0001d582" L"\0" L"\x0001d583" L"\0" L"\x0001d584" L"\0"
+-  L"\x0001d585" L"\0" L"\x0001d586" L"\0" L"\x0001d587" L"\0" L"\x0001d588"
+-  L"\0" L"\x0001d589" L"\0" L"\x0001d58a" L"\0" L"\x0001d58b" L"\0"
+-  L"\x0001d58c" L"\0" L"\x0001d58d" L"\0" L"\x0001d58e" L"\0" L"\x0001d58f"
+-  L"\0" L"\x0001d590" L"\0" L"\x0001d591" L"\0" L"\x0001d592" L"\0"
+-  L"\x0001d593" L"\0" L"\x0001d594" L"\0" L"\x0001d595" L"\0" L"\x0001d596"
+-  L"\0" L"\x0001d597" L"\0" L"\x0001d598" L"\0" L"\x0001d599" L"\0"
+-  L"\x0001d59a" L"\0" L"\x0001d59b" L"\0" L"\x0001d59c" L"\0" L"\x0001d59d"
+-  L"\0" L"\x0001d59e" L"\0" L"\x0001d59f" L"\0" L"\x0001d5a0" L"\0"
+-  L"\x0001d5a1" L"\0" L"\x0001d5a2" L"\0" L"\x0001d5a3" L"\0" L"\x0001d5a4"
+-  L"\0" L"\x0001d5a5" L"\0" L"\x0001d5a6" L"\0" L"\x0001d5a7" L"\0"
+-  L"\x0001d5a8" L"\0" L"\x0001d5a9" L"\0" L"\x0001d5aa" L"\0" L"\x0001d5ab"
+-  L"\0" L"\x0001d5ac" L"\0" L"\x0001d5ad" L"\0" L"\x0001d5ae" L"\0"
+-  L"\x0001d5af" L"\0" L"\x0001d5b0" L"\0" L"\x0001d5b1" L"\0" L"\x0001d5b2"
+-  L"\0" L"\x0001d5b3" L"\0" L"\x0001d5b4" L"\0" L"\x0001d5b5" L"\0"
+-  L"\x0001d5b6" L"\0" L"\x0001d5b7" L"\0" L"\x0001d5b8" L"\0" L"\x0001d5b9"
+-  L"\0" L"\x0001d5ba" L"\0" L"\x0001d5bb" L"\0" L"\x0001d5bc" L"\0"
+-  L"\x0001d5bd" L"\0" L"\x0001d5be" L"\0" L"\x0001d5bf" L"\0" L"\x0001d5c0"
+-  L"\0" L"\x0001d5c1" L"\0" L"\x0001d5c2" L"\0" L"\x0001d5c3" L"\0"
+-  L"\x0001d5c4" L"\0" L"\x0001d5c5" L"\0" L"\x0001d5c6" L"\0" L"\x0001d5c7"
+-  L"\0" L"\x0001d5c8" L"\0" L"\x0001d5c9" L"\0" L"\x0001d5ca" L"\0"
+-  L"\x0001d5cb" L"\0" L"\x0001d5cc" L"\0" L"\x0001d5cd" L"\0" L"\x0001d5ce"
+-  L"\0" L"\x0001d5cf" L"\0" L"\x0001d5d0" L"\0" L"\x0001d5d1" L"\0"
+-  L"\x0001d5d2" L"\0" L"\x0001d5d3" L"\0" L"\x0001d5d4" L"\0" L"\x0001d5d5"
+-  L"\0" L"\x0001d5d6" L"\0" L"\x0001d5d7" L"\0" L"\x0001d5d8" L"\0"
+-  L"\x0001d5d9" L"\0" L"\x0001d5da" L"\0" L"\x0001d5db" L"\0" L"\x0001d5dc"
+-  L"\0" L"\x0001d5dd" L"\0" L"\x0001d5de" L"\0" L"\x0001d5df" L"\0"
+-  L"\x0001d5e0" L"\0" L"\x0001d5e1" L"\0" L"\x0001d5e2" L"\0" L"\x0001d5e3"
+-  L"\0" L"\x0001d5e4" L"\0" L"\x0001d5e5" L"\0" L"\x0001d5e6" L"\0"
+-  L"\x0001d5e7" L"\0" L"\x0001d5e8" L"\0" L"\x0001d5e9" L"\0" L"\x0001d5ea"
+-  L"\0" L"\x0001d5eb" L"\0" L"\x0001d5ec" L"\0" L"\x0001d5ed" L"\0"
+-  L"\x0001d5ee" L"\0" L"\x0001d5ef" L"\0" L"\x0001d5f0" L"\0" L"\x0001d5f1"
+-  L"\0" L"\x0001d5f2" L"\0" L"\x0001d5f3" L"\0" L"\x0001d5f4" L"\0"
+-  L"\x0001d5f5" L"\0" L"\x0001d5f6" L"\0" L"\x0001d5f7" L"\0" L"\x0001d5f8"
+-  L"\0" L"\x0001d5f9" L"\0" L"\x0001d5fa" L"\0" L"\x0001d5fb" L"\0"
+-  L"\x0001d5fc" L"\0" L"\x0001d5fd" L"\0" L"\x0001d5fe" L"\0" L"\x0001d5ff"
+-  L"\0" L"\x0001d600" L"\0" L"\x0001d601" L"\0" L"\x0001d602" L"\0"
+-  L"\x0001d603" L"\0" L"\x0001d604" L"\0" L"\x0001d605" L"\0" L"\x0001d606"
+-  L"\0" L"\x0001d607" L"\0" L"\x0001d608" L"\0" L"\x0001d609" L"\0"
+-  L"\x0001d60a" L"\0" L"\x0001d60b" L"\0" L"\x0001d60c" L"\0" L"\x0001d60d"
+-  L"\0" L"\x0001d60e" L"\0" L"\x0001d60f" L"\0" L"\x0001d610" L"\0"
+-  L"\x0001d611" L"\0" L"\x0001d612" L"\0" L"\x0001d613" L"\0" L"\x0001d614"
+-  L"\0" L"\x0001d615" L"\0" L"\x0001d616" L"\0" L"\x0001d617" L"\0"
+-  L"\x0001d618" L"\0" L"\x0001d619" L"\0" L"\x0001d61a" L"\0" L"\x0001d61b"
+-  L"\0" L"\x0001d61c" L"\0" L"\x0001d61d" L"\0" L"\x0001d61e" L"\0"
+-  L"\x0001d61f" L"\0" L"\x0001d620" L"\0" L"\x0001d621" L"\0" L"\x0001d622"
+-  L"\0" L"\x0001d623" L"\0" L"\x0001d624" L"\0" L"\x0001d625" L"\0"
+-  L"\x0001d626" L"\0" L"\x0001d627" L"\0" L"\x0001d628" L"\0" L"\x0001d629"
+-  L"\0" L"\x0001d62a" L"\0" L"\x0001d62b" L"\0" L"\x0001d62c" L"\0"
+-  L"\x0001d62d" L"\0" L"\x0001d62e" L"\0" L"\x0001d62f" L"\0" L"\x0001d630"
+-  L"\0" L"\x0001d631" L"\0" L"\x0001d632" L"\0" L"\x0001d633" L"\0"
+-  L"\x0001d634" L"\0" L"\x0001d635" L"\0" L"\x0001d636" L"\0" L"\x0001d637"
+-  L"\0" L"\x0001d638" L"\0" L"\x0001d639" L"\0" L"\x0001d63a" L"\0"
+-  L"\x0001d63b" L"\0" L"\x0001d63c" L"\0" L"\x0001d63d" L"\0" L"\x0001d63e"
+-  L"\0" L"\x0001d63f" L"\0" L"\x0001d640" L"\0" L"\x0001d641" L"\0"
+-  L"\x0001d642" L"\0" L"\x0001d643" L"\0" L"\x0001d644" L"\0" L"\x0001d645"
+-  L"\0" L"\x0001d646" L"\0" L"\x0001d647" L"\0" L"\x0001d648" L"\0"
+-  L"\x0001d649" L"\0" L"\x0001d64a" L"\0" L"\x0001d64b" L"\0" L"\x0001d64c"
+-  L"\0" L"\x0001d64d" L"\0" L"\x0001d64e" L"\0" L"\x0001d64f" L"\0"
+-  L"\x0001d650" L"\0" L"\x0001d651" L"\0" L"\x0001d652" L"\0" L"\x0001d653"
+-  L"\0" L"\x0001d654" L"\0" L"\x0001d655" L"\0" L"\x0001d656" L"\0"
+-  L"\x0001d657" L"\0" L"\x0001d658" L"\0" L"\x0001d659" L"\0" L"\x0001d65a"
+-  L"\0" L"\x0001d65b" L"\0" L"\x0001d65c" L"\0" L"\x0001d65d" L"\0"
+-  L"\x0001d65e" L"\0" L"\x0001d65f" L"\0" L"\x0001d660" L"\0" L"\x0001d661"
+-  L"\0" L"\x0001d662" L"\0" L"\x0001d663" L"\0" L"\x0001d664" L"\0"
+-  L"\x0001d665" L"\0" L"\x0001d666" L"\0" L"\x0001d667" L"\0" L"\x0001d668"
+-  L"\0" L"\x0001d669" L"\0" L"\x0001d66a" L"\0" L"\x0001d66b" L"\0"
+-  L"\x0001d66c" L"\0" L"\x0001d66d" L"\0" L"\x0001d66e" L"\0" L"\x0001d66f"
+-  L"\0" L"\x0001d670" L"\0" L"\x0001d671" L"\0" L"\x0001d672" L"\0"
+-  L"\x0001d673" L"\0" L"\x0001d674" L"\0" L"\x0001d675" L"\0" L"\x0001d676"
+-  L"\0" L"\x0001d677" L"\0" L"\x0001d678" L"\0" L"\x0001d679" L"\0"
+-  L"\x0001d67a" L"\0" L"\x0001d67b" L"\0" L"\x0001d67c" L"\0" L"\x0001d67d"
+-  L"\0" L"\x0001d67e" L"\0" L"\x0001d67f" L"\0" L"\x0001d680" L"\0"
+-  L"\x0001d681" L"\0" L"\x0001d682" L"\0" L"\x0001d683" L"\0" L"\x0001d684"
+-  L"\0" L"\x0001d685" L"\0" L"\x0001d686" L"\0" L"\x0001d687" L"\0"
+-  L"\x0001d688" L"\0" L"\x0001d689" L"\0" L"\x0001d68a" L"\0" L"\x0001d68b"
+-  L"\0" L"\x0001d68c" L"\0" L"\x0001d68d" L"\0" L"\x0001d68e" L"\0"
+-  L"\x0001d68f" L"\0" L"\x0001d690" L"\0" L"\x0001d691" L"\0" L"\x0001d692"
+-  L"\0" L"\x0001d693" L"\0" L"\x0001d694" L"\0" L"\x0001d695" L"\0"
+-  L"\x0001d696" L"\0" L"\x0001d697" L"\0" L"\x0001d698" L"\0" L"\x0001d699"
+-  L"\0" L"\x0001d69a" L"\0" L"\x0001d69b" L"\0" L"\x0001d69c" L"\0"
+-  L"\x0001d69d" L"\0" L"\x0001d69e" L"\0" L"\x0001d69f" L"\0" L"\x0001d6a0"
+-  L"\0" L"\x0001d6a1" L"\0" L"\x0001d6a2" L"\0" L"\x0001d6a3" L"\0"
+-  L"\x0001d7ce" L"\0" L"\x0001d7cf" L"\0" L"\x0001d7d0" L"\0" L"\x0001d7d1"
+-  L"\0" L"\x0001d7d2" L"\0" L"\x0001d7d3" L"\0" L"\x0001d7d4" L"\0"
+-  L"\x0001d7d5" L"\0" L"\x0001d7d6" L"\0" L"\x0001d7d7" L"\0" L"\x0001d7d8"
+-  L"\0" L"\x0001d7d9" L"\0" L"\x0001d7da" L"\0" L"\x0001d7db" L"\0"
+-  L"\x0001d7dc" L"\0" L"\x0001d7dd" L"\0" L"\x0001d7de" L"\0" L"\x0001d7df"
+-  L"\0" L"\x0001d7e0" L"\0" L"\x0001d7e1" L"\0" L"\x0001d7e2" L"\0"
+-  L"\x0001d7e3" L"\0" L"\x0001d7e4" L"\0" L"\x0001d7e5" L"\0" L"\x0001d7e6"
+-  L"\0" L"\x0001d7e7" L"\0" L"\x0001d7e8" L"\0" L"\x0001d7e9" L"\0"
+-  L"\x0001d7ea" L"\0" L"\x0001d7eb" L"\0" L"\x0001d7ec" L"\0" L"\x0001d7ed"
+-  L"\0" L"\x0001d7ee" L"\0" L"\x0001d7ef" L"\0" L"\x0001d7f0" L"\0"
+-  L"\x0001d7f1" L"\0" L"\x0001d7f2" L"\0" L"\x0001d7f3" L"\0" L"\x0001d7f4"
+-  L"\0" L"\x0001d7f5" L"\0" L"\x0001d7f6" L"\0" L"\x0001d7f7" L"\0"
+-  L"\x0001d7f8" L"\0" L"\x0001d7f9" L"\0" L"\x0001d7fa" L"\0" L"\x0001d7fb"
+-  L"\0" L"\x0001d7fc" L"\0" L"\x0001d7fd" L"\0" L"\x0001d7fe" L"\0"
+-  L"\x0001d7ff";
++  L"\x2062" L"\0" L"\x2063" L"\0" L"\x20a8" L"\0" L"\x20ac" L"\0" L"\x20b9"
++  L"\0" L"\x2100" L"\0" L"\x2101" L"\0" L"\x2102" L"\0" L"\x2105" L"\0"
++  L"\x2106" L"\0" L"\x210a" L"\0" L"\x210b" L"\0" L"\x210c" L"\0" L"\x210d"
++  L"\0" L"\x210e" L"\0" L"\x2110" L"\0" L"\x2111" L"\0" L"\x2112" L"\0"
++  L"\x2113" L"\0" L"\x2115" L"\0" L"\x2116" L"\0" L"\x2119" L"\0" L"\x211a"
++  L"\0" L"\x211b" L"\0" L"\x211c" L"\0" L"\x211d" L"\0" L"\x2121" L"\0"
++  L"\x2122" L"\0" L"\x2124" L"\0" L"\x2126" L"\0" L"\x2128" L"\0" L"\x212c"
++  L"\0" L"\x212d" L"\0" L"\x212e" L"\0" L"\x212f" L"\0" L"\x2130" L"\0"
++  L"\x2131" L"\0" L"\x2133" L"\0" L"\x2134" L"\0" L"\x2139" L"\0" L"\x2145"
++  L"\0" L"\x2146" L"\0" L"\x2147" L"\0" L"\x2148" L"\0" L"\x2149" L"\0"
++  L"\x2153" L"\0" L"\x2154" L"\0" L"\x2155" L"\0" L"\x2156" L"\0" L"\x2157"
++  L"\0" L"\x2158" L"\0" L"\x2159" L"\0" L"\x215a" L"\0" L"\x215b" L"\0"
++  L"\x215c" L"\0" L"\x215d" L"\0" L"\x215e" L"\0" L"\x215f" L"\0" L"\x2160"
++  L"\0" L"\x2161" L"\0" L"\x2162" L"\0" L"\x2163" L"\0" L"\x2164" L"\0"
++  L"\x2165" L"\0" L"\x2166" L"\0" L"\x2167" L"\0" L"\x2168" L"\0" L"\x2169"
++  L"\0" L"\x216a" L"\0" L"\x216b" L"\0" L"\x216c" L"\0" L"\x216d" L"\0"
++  L"\x216e" L"\0" L"\x216f" L"\0" L"\x2170" L"\0" L"\x2171" L"\0" L"\x2172"
++  L"\0" L"\x2173" L"\0" L"\x2174" L"\0" L"\x2175" L"\0" L"\x2176" L"\0"
++  L"\x2177" L"\0" L"\x2178" L"\0" L"\x2179" L"\0" L"\x217a" L"\0" L"\x217b"
++  L"\0" L"\x217c" L"\0" L"\x217d" L"\0" L"\x217e" L"\0" L"\x217f" L"\0"
++  L"\x2190" L"\0" L"\x2192" L"\0" L"\x2194" L"\0" L"\x21d0" L"\0" L"\x21d2"
++  L"\0" L"\x21d4" L"\0" L"\x2212" L"\0" L"\x2215" L"\0" L"\x2216" L"\0"
++  L"\x2217" L"\0" L"\x2223" L"\0" L"\x2236" L"\0" L"\x223c" L"\0" L"\x2264"
++  L"\0" L"\x2265" L"\0" L"\x226a" L"\0" L"\x226b" L"\0" L"\x22d8" L"\0"
++  L"\x22d9" L"\0" L"\x2400" L"\0" L"\x2401" L"\0" L"\x2402" L"\0" L"\x2403"
++  L"\0" L"\x2404" L"\0" L"\x2405" L"\0" L"\x2406" L"\0" L"\x2407" L"\0"
++  L"\x2408" L"\0" L"\x2409" L"\0" L"\x240a" L"\0" L"\x240b" L"\0" L"\x240c"
++  L"\0" L"\x240d" L"\0" L"\x240e" L"\0" L"\x240f" L"\0" L"\x2410" L"\0"
++  L"\x2411" L"\0" L"\x2412" L"\0" L"\x2413" L"\0" L"\x2414" L"\0" L"\x2415"
++  L"\0" L"\x2416" L"\0" L"\x2417" L"\0" L"\x2418" L"\0" L"\x2419" L"\0"
++  L"\x241a" L"\0" L"\x241b" L"\0" L"\x241c" L"\0" L"\x241d" L"\0" L"\x241e"
++  L"\0" L"\x241f" L"\0" L"\x2420" L"\0" L"\x2421" L"\0" L"\x2423" L"\0"
++  L"\x2424" L"\0" L"\x2460" L"\0" L"\x2461" L"\0" L"\x2462" L"\0" L"\x2463"
++  L"\0" L"\x2464" L"\0" L"\x2465" L"\0" L"\x2466" L"\0" L"\x2467" L"\0"
++  L"\x2468" L"\0" L"\x2469" L"\0" L"\x246a" L"\0" L"\x246b" L"\0" L"\x246c"
++  L"\0" L"\x246d" L"\0" L"\x246e" L"\0" L"\x246f" L"\0" L"\x2470" L"\0"
++  L"\x2471" L"\0" L"\x2472" L"\0" L"\x2473" L"\0" L"\x2474" L"\0" L"\x2475"
++  L"\0" L"\x2476" L"\0" L"\x2477" L"\0" L"\x2478" L"\0" L"\x2479" L"\0"
++  L"\x247a" L"\0" L"\x247b" L"\0" L"\x247c" L"\0" L"\x247d" L"\0" L"\x247e"
++  L"\0" L"\x247f" L"\0" L"\x2480" L"\0" L"\x2481" L"\0" L"\x2482" L"\0"
++  L"\x2483" L"\0" L"\x2484" L"\0" L"\x2485" L"\0" L"\x2486" L"\0" L"\x2487"
++  L"\0" L"\x2488" L"\0" L"\x2489" L"\0" L"\x248a" L"\0" L"\x248b" L"\0"
++  L"\x248c" L"\0" L"\x248d" L"\0" L"\x248e" L"\0" L"\x248f" L"\0" L"\x2490"
++  L"\0" L"\x2491" L"\0" L"\x2492" L"\0" L"\x2493" L"\0" L"\x2494" L"\0"
++  L"\x2495" L"\0" L"\x2496" L"\0" L"\x2497" L"\0" L"\x2498" L"\0" L"\x2499"
++  L"\0" L"\x249a" L"\0" L"\x249b" L"\0" L"\x249c" L"\0" L"\x249d" L"\0"
++  L"\x249e" L"\0" L"\x249f" L"\0" L"\x24a0" L"\0" L"\x24a1" L"\0" L"\x24a2"
++  L"\0" L"\x24a3" L"\0" L"\x24a4" L"\0" L"\x24a5" L"\0" L"\x24a6" L"\0"
++  L"\x24a7" L"\0" L"\x24a8" L"\0" L"\x24a9" L"\0" L"\x24aa" L"\0" L"\x24ab"
++  L"\0" L"\x24ac" L"\0" L"\x24ad" L"\0" L"\x24ae" L"\0" L"\x24af" L"\0"
++  L"\x24b0" L"\0" L"\x24b1" L"\0" L"\x24b2" L"\0" L"\x24b3" L"\0" L"\x24b4"
++  L"\0" L"\x24b5" L"\0" L"\x24b6" L"\0" L"\x24b7" L"\0" L"\x24b8" L"\0"
++  L"\x24b9" L"\0" L"\x24ba" L"\0" L"\x24bb" L"\0" L"\x24bc" L"\0" L"\x24bd"
++  L"\0" L"\x24be" L"\0" L"\x24bf" L"\0" L"\x24c0" L"\0" L"\x24c1" L"\0"
++  L"\x24c2" L"\0" L"\x24c3" L"\0" L"\x24c4" L"\0" L"\x24c5" L"\0" L"\x24c6"
++  L"\0" L"\x24c7" L"\0" L"\x24c8" L"\0" L"\x24c9" L"\0" L"\x24ca" L"\0"
++  L"\x24cb" L"\0" L"\x24cc" L"\0" L"\x24cd" L"\0" L"\x24ce" L"\0" L"\x24cf"
++  L"\0" L"\x24d0" L"\0" L"\x24d1" L"\0" L"\x24d2" L"\0" L"\x24d3" L"\0"
++  L"\x24d4" L"\0" L"\x24d5" L"\0" L"\x24d6" L"\0" L"\x24d7" L"\0" L"\x24d8"
++  L"\0" L"\x24d9" L"\0" L"\x24da" L"\0" L"\x24db" L"\0" L"\x24dc" L"\0"
++  L"\x24dd" L"\0" L"\x24de" L"\0" L"\x24df" L"\0" L"\x24e0" L"\0" L"\x24e1"
++  L"\0" L"\x24e2" L"\0" L"\x24e3" L"\0" L"\x24e4" L"\0" L"\x24e5" L"\0"
++  L"\x24e6" L"\0" L"\x24e7" L"\0" L"\x24e8" L"\0" L"\x24e9" L"\0" L"\x24ea"
++  L"\0" L"\x2500" L"\0" L"\x2502" L"\0" L"\x250c" L"\0" L"\x2510" L"\0"
++  L"\x2514" L"\0" L"\x2518" L"\0" L"\x251c" L"\0" L"\x2524" L"\0" L"\x252c"
++  L"\0" L"\x2534" L"\0" L"\x253c" L"\0" L"\x25e6" L"\0" L"\x2a74" L"\0"
++  L"\x2a75" L"\0" L"\x2a76" L"\0" L"\x3000" L"\0" L"\x30a0" L"\0" L"\x3251"
++  L"\0" L"\x3252" L"\0" L"\x3253" L"\0" L"\x3254" L"\0" L"\x3255" L"\0"
++  L"\x3256" L"\0" L"\x3257" L"\0" L"\x3258" L"\0" L"\x3259" L"\0" L"\x325a"
++  L"\0" L"\x325b" L"\0" L"\x325c" L"\0" L"\x325d" L"\0" L"\x325e" L"\0"
++  L"\x325f" L"\0" L"\x32b1" L"\0" L"\x32b2" L"\0" L"\x32b3" L"\0" L"\x32b4"
++  L"\0" L"\x32b5" L"\0" L"\x32b6" L"\0" L"\x32b7" L"\0" L"\x32b8" L"\0"
++  L"\x32b9" L"\0" L"\x32ba" L"\0" L"\x32bb" L"\0" L"\x32bc" L"\0" L"\x32bd"
++  L"\0" L"\x32be" L"\0" L"\x32bf" L"\0" L"\x3371" L"\0" L"\x3372" L"\0"
++  L"\x3373" L"\0" L"\x3374" L"\0" L"\x3375" L"\0" L"\x3376" L"\0" L"\x3380"
++  L"\0" L"\x3381" L"\0" L"\x3382" L"\0" L"\x3383" L"\0" L"\x3384" L"\0"
++  L"\x3385" L"\0" L"\x3386" L"\0" L"\x3387" L"\0" L"\x3388" L"\0" L"\x3389"
++  L"\0" L"\x338a" L"\0" L"\x338b" L"\0" L"\x338c" L"\0" L"\x338d" L"\0"
++  L"\x338e" L"\0" L"\x338f" L"\0" L"\x3390" L"\0" L"\x3391" L"\0" L"\x3392"
++  L"\0" L"\x3393" L"\0" L"\x3394" L"\0" L"\x3395" L"\0" L"\x3396" L"\0"
++  L"\x3397" L"\0" L"\x3398" L"\0" L"\x3399" L"\0" L"\x339a" L"\0" L"\x339b"
++  L"\0" L"\x339c" L"\0" L"\x339d" L"\0" L"\x339e" L"\0" L"\x339f" L"\0"
++  L"\x33a0" L"\0" L"\x33a1" L"\0" L"\x33a2" L"\0" L"\x33a3" L"\0" L"\x33a4"
++  L"\0" L"\x33a5" L"\0" L"\x33a6" L"\0" L"\x33a7" L"\0" L"\x33a8" L"\0"
++  L"\x33a9" L"\0" L"\x33aa" L"\0" L"\x33ab" L"\0" L"\x33ac" L"\0" L"\x33ad"
++  L"\0" L"\x33ae" L"\0" L"\x33af" L"\0" L"\x33b0" L"\0" L"\x33b1" L"\0"
++  L"\x33b2" L"\0" L"\x33b3" L"\0" L"\x33b4" L"\0" L"\x33b5" L"\0" L"\x33b6"
++  L"\0" L"\x33b7" L"\0" L"\x33b8" L"\0" L"\x33b9" L"\0" L"\x33ba" L"\0"
++  L"\x33bb" L"\0" L"\x33bc" L"\0" L"\x33bd" L"\0" L"\x33be" L"\0" L"\x33bf"
++  L"\0" L"\x33c2" L"\0" L"\x33c3" L"\0" L"\x33c4" L"\0" L"\x33c5" L"\0"
++  L"\x33c6" L"\0" L"\x33c7" L"\0" L"\x33c8" L"\0" L"\x33c9" L"\0" L"\x33ca"
++  L"\0" L"\x33cb" L"\0" L"\x33cc" L"\0" L"\x33cd" L"\0" L"\x33ce" L"\0"
++  L"\x33cf" L"\0" L"\x33d0" L"\0" L"\x33d1" L"\0" L"\x33d2" L"\0" L"\x33d3"
++  L"\0" L"\x33d4" L"\0" L"\x33d5" L"\0" L"\x33d6" L"\0" L"\x33d7" L"\0"
++  L"\x33d8" L"\0" L"\x33d9" L"\0" L"\x33da" L"\0" L"\x33db" L"\0" L"\x33dc"
++  L"\0" L"\x33dd" L"\0" L"\xfb00" L"\0" L"\xfb01" L"\0" L"\xfb02" L"\0"
++  L"\xfb03" L"\0" L"\xfb04" L"\0" L"\xfb06" L"\0" L"\xfb29" L"\0" L"\xfe00"
++  L"\0" L"\xfe01" L"\0" L"\xfe02" L"\0" L"\xfe03" L"\0" L"\xfe04" L"\0"
++  L"\xfe05" L"\0" L"\xfe06" L"\0" L"\xfe07" L"\0" L"\xfe08" L"\0" L"\xfe09"
++  L"\0" L"\xfe0a" L"\0" L"\xfe0b" L"\0" L"\xfe0c" L"\0" L"\xfe0d" L"\0"
++  L"\xfe0e" L"\0" L"\xfe0f" L"\0" L"\xfe4d" L"\0" L"\xfe4e" L"\0" L"\xfe4f"
++  L"\0" L"\xfe50" L"\0" L"\xfe52" L"\0" L"\xfe54" L"\0" L"\xfe55" L"\0"
++  L"\xfe56" L"\0" L"\xfe57" L"\0" L"\xfe59" L"\0" L"\xfe5a" L"\0" L"\xfe5b"
++  L"\0" L"\xfe5c" L"\0" L"\xfe5f" L"\0" L"\xfe60" L"\0" L"\xfe61" L"\0"
++  L"\xfe62" L"\0" L"\xfe63" L"\0" L"\xfe64" L"\0" L"\xfe65" L"\0" L"\xfe66"
++  L"\0" L"\xfe68" L"\0" L"\xfe69" L"\0" L"\xfe6a" L"\0" L"\xfe6b" L"\0"
++  L"\xfeff" L"\0" L"\xff01" L"\0" L"\xff02" L"\0" L"\xff03" L"\0" L"\xff04"
++  L"\0" L"\xff05" L"\0" L"\xff06" L"\0" L"\xff07" L"\0" L"\xff08" L"\0"
++  L"\xff09" L"\0" L"\xff0a" L"\0" L"\xff0b" L"\0" L"\xff0c" L"\0" L"\xff0d"
++  L"\0" L"\xff0e" L"\0" L"\xff0f" L"\0" L"\xff10" L"\0" L"\xff11" L"\0"
++  L"\xff12" L"\0" L"\xff13" L"\0" L"\xff14" L"\0" L"\xff15" L"\0" L"\xff16"
++  L"\0" L"\xff17" L"\0" L"\xff18" L"\0" L"\xff19" L"\0" L"\xff1a" L"\0"
++  L"\xff1b" L"\0" L"\xff1c" L"\0" L"\xff1d" L"\0" L"\xff1e" L"\0" L"\xff1f"
++  L"\0" L"\xff20" L"\0" L"\xff21" L"\0" L"\xff22" L"\0" L"\xff23" L"\0"
++  L"\xff24" L"\0" L"\xff25" L"\0" L"\xff26" L"\0" L"\xff27" L"\0" L"\xff28"
++  L"\0" L"\xff29" L"\0" L"\xff2a" L"\0" L"\xff2b" L"\0" L"\xff2c" L"\0"
++  L"\xff2d" L"\0" L"\xff2e" L"\0" L"\xff2f" L"\0" L"\xff30" L"\0" L"\xff31"
++  L"\0" L"\xff32" L"\0" L"\xff33" L"\0" L"\xff34" L"\0" L"\xff35" L"\0"
++  L"\xff36" L"\0" L"\xff37" L"\0" L"\xff38" L"\0" L"\xff39" L"\0" L"\xff3a"
++  L"\0" L"\xff3b" L"\0" L"\xff3c" L"\0" L"\xff3d" L"\0" L"\xff3e" L"\0"
++  L"\xff3f" L"\0" L"\xff40" L"\0" L"\xff41" L"\0" L"\xff42" L"\0" L"\xff43"
++  L"\0" L"\xff44" L"\0" L"\xff45" L"\0" L"\xff46" L"\0" L"\xff47" L"\0"
++  L"\xff48" L"\0" L"\xff49" L"\0" L"\xff4a" L"\0" L"\xff4b" L"\0" L"\xff4c"
++  L"\0" L"\xff4d" L"\0" L"\xff4e" L"\0" L"\xff4f" L"\0" L"\xff50" L"\0"
++  L"\xff51" L"\0" L"\xff52" L"\0" L"\xff53" L"\0" L"\xff54" L"\0" L"\xff55"
++  L"\0" L"\xff56" L"\0" L"\xff57" L"\0" L"\xff58" L"\0" L"\xff59" L"\0"
++  L"\xff5a" L"\0" L"\xff5b" L"\0" L"\xff5c" L"\0" L"\xff5d" L"\0" L"\xff5e"
++  L"\0" L"\x0001d400" L"\0" L"\x0001d401" L"\0" L"\x0001d402" L"\0"
++  L"\x0001d403" L"\0" L"\x0001d404" L"\0" L"\x0001d405" L"\0" L"\x0001d406"
++  L"\0" L"\x0001d407" L"\0" L"\x0001d408" L"\0" L"\x0001d409" L"\0"
++  L"\x0001d40a" L"\0" L"\x0001d40b" L"\0" L"\x0001d40c" L"\0" L"\x0001d40d"
++  L"\0" L"\x0001d40e" L"\0" L"\x0001d40f" L"\0" L"\x0001d410" L"\0"
++  L"\x0001d411" L"\0" L"\x0001d412" L"\0" L"\x0001d413" L"\0" L"\x0001d414"
++  L"\0" L"\x0001d415" L"\0" L"\x0001d416" L"\0" L"\x0001d417" L"\0"
++  L"\x0001d418" L"\0" L"\x0001d419" L"\0" L"\x0001d41a" L"\0" L"\x0001d41b"
++  L"\0" L"\x0001d41c" L"\0" L"\x0001d41d" L"\0" L"\x0001d41e" L"\0"
++  L"\x0001d41f" L"\0" L"\x0001d420" L"\0" L"\x0001d421" L"\0" L"\x0001d422"
++  L"\0" L"\x0001d423" L"\0" L"\x0001d424" L"\0" L"\x0001d425" L"\0"
++  L"\x0001d426" L"\0" L"\x0001d427" L"\0" L"\x0001d428" L"\0" L"\x0001d429"
++  L"\0" L"\x0001d42a" L"\0" L"\x0001d42b" L"\0" L"\x0001d42c" L"\0"
++  L"\x0001d42d" L"\0" L"\x0001d42e" L"\0" L"\x0001d42f" L"\0" L"\x0001d430"
++  L"\0" L"\x0001d431" L"\0" L"\x0001d432" L"\0" L"\x0001d433" L"\0"
++  L"\x0001d434" L"\0" L"\x0001d435" L"\0" L"\x0001d436" L"\0" L"\x0001d437"
++  L"\0" L"\x0001d438" L"\0" L"\x0001d439" L"\0" L"\x0001d43a" L"\0"
++  L"\x0001d43b" L"\0" L"\x0001d43c" L"\0" L"\x0001d43d" L"\0" L"\x0001d43e"
++  L"\0" L"\x0001d43f" L"\0" L"\x0001d440" L"\0" L"\x0001d441" L"\0"
++  L"\x0001d442" L"\0" L"\x0001d443" L"\0" L"\x0001d444" L"\0" L"\x0001d445"
++  L"\0" L"\x0001d446" L"\0" L"\x0001d447" L"\0" L"\x0001d448" L"\0"
++  L"\x0001d449" L"\0" L"\x0001d44a" L"\0" L"\x0001d44b" L"\0" L"\x0001d44c"
++  L"\0" L"\x0001d44d" L"\0" L"\x0001d44e" L"\0" L"\x0001d44f" L"\0"
++  L"\x0001d450" L"\0" L"\x0001d451" L"\0" L"\x0001d452" L"\0" L"\x0001d453"
++  L"\0" L"\x0001d454" L"\0" L"\x0001d456" L"\0" L"\x0001d457" L"\0"
++  L"\x0001d458" L"\0" L"\x0001d459" L"\0" L"\x0001d45a" L"\0" L"\x0001d45b"
++  L"\0" L"\x0001d45c" L"\0" L"\x0001d45d" L"\0" L"\x0001d45e" L"\0"
++  L"\x0001d45f" L"\0" L"\x0001d460" L"\0" L"\x0001d461" L"\0" L"\x0001d462"
++  L"\0" L"\x0001d463" L"\0" L"\x0001d464" L"\0" L"\x0001d465" L"\0"
++  L"\x0001d466" L"\0" L"\x0001d467" L"\0" L"\x0001d468" L"\0" L"\x0001d469"
++  L"\0" L"\x0001d46a" L"\0" L"\x0001d46b" L"\0" L"\x0001d46c" L"\0"
++  L"\x0001d46d" L"\0" L"\x0001d46e" L"\0" L"\x0001d46f" L"\0" L"\x0001d470"
++  L"\0" L"\x0001d471" L"\0" L"\x0001d472" L"\0" L"\x0001d473" L"\0"
++  L"\x0001d474" L"\0" L"\x0001d475" L"\0" L"\x0001d476" L"\0" L"\x0001d477"
++  L"\0" L"\x0001d478" L"\0" L"\x0001d479" L"\0" L"\x0001d47a" L"\0"
++  L"\x0001d47b" L"\0" L"\x0001d47c" L"\0" L"\x0001d47d" L"\0" L"\x0001d47e"
++  L"\0" L"\x0001d47f" L"\0" L"\x0001d480" L"\0" L"\x0001d481" L"\0"
++  L"\x0001d482" L"\0" L"\x0001d483" L"\0" L"\x0001d484" L"\0" L"\x0001d485"
++  L"\0" L"\x0001d486" L"\0" L"\x0001d487" L"\0" L"\x0001d488" L"\0"
++  L"\x0001d489" L"\0" L"\x0001d48a" L"\0" L"\x0001d48b" L"\0" L"\x0001d48c"
++  L"\0" L"\x0001d48d" L"\0" L"\x0001d48e" L"\0" L"\x0001d48f" L"\0"
++  L"\x0001d490" L"\0" L"\x0001d491" L"\0" L"\x0001d492" L"\0" L"\x0001d493"
++  L"\0" L"\x0001d494" L"\0" L"\x0001d495" L"\0" L"\x0001d496" L"\0"
++  L"\x0001d497" L"\0" L"\x0001d498" L"\0" L"\x0001d499" L"\0" L"\x0001d49a"
++  L"\0" L"\x0001d49b" L"\0" L"\x0001d49c" L"\0" L"\x0001d49e" L"\0"
++  L"\x0001d49f" L"\0" L"\x0001d4a2" L"\0" L"\x0001d4a5" L"\0" L"\x0001d4a6"
++  L"\0" L"\x0001d4a9" L"\0" L"\x0001d4aa" L"\0" L"\x0001d4ab" L"\0"
++  L"\x0001d4ac" L"\0" L"\x0001d4ae" L"\0" L"\x0001d4af" L"\0" L"\x0001d4b0"
++  L"\0" L"\x0001d4b1" L"\0" L"\x0001d4b2" L"\0" L"\x0001d4b3" L"\0"
++  L"\x0001d4b4" L"\0" L"\x0001d4b5" L"\0" L"\x0001d4b6" L"\0" L"\x0001d4b7"
++  L"\0" L"\x0001d4b8" L"\0" L"\x0001d4b9" L"\0" L"\x0001d4bb" L"\0"
++  L"\x0001d4bd" L"\0" L"\x0001d4be" L"\0" L"\x0001d4bf" L"\0" L"\x0001d4c0"
++  L"\0" L"\x0001d4c2" L"\0" L"\x0001d4c3" L"\0" L"\x0001d4c5" L"\0"
++  L"\x0001d4c6" L"\0" L"\x0001d4c7" L"\0" L"\x0001d4c8" L"\0" L"\x0001d4c9"
++  L"\0" L"\x0001d4ca" L"\0" L"\x0001d4cb" L"\0" L"\x0001d4cc" L"\0"
++  L"\x0001d4cd" L"\0" L"\x0001d4ce" L"\0" L"\x0001d4cf" L"\0" L"\x0001d4d0"
++  L"\0" L"\x0001d4d1" L"\0" L"\x0001d4d2" L"\0" L"\x0001d4d3" L"\0"
++  L"\x0001d4d4" L"\0" L"\x0001d4d5" L"\0" L"\x0001d4d6" L"\0" L"\x0001d4d7"
++  L"\0" L"\x0001d4d8" L"\0" L"\x0001d4d9" L"\0" L"\x0001d4da" L"\0"
++  L"\x0001d4db" L"\0" L"\x0001d4dc" L"\0" L"\x0001d4dd" L"\0" L"\x0001d4de"
++  L"\0" L"\x0001d4df" L"\0" L"\x0001d4e0" L"\0" L"\x0001d4e1" L"\0"
++  L"\x0001d4e2" L"\0" L"\x0001d4e3" L"\0" L"\x0001d4e4" L"\0" L"\x0001d4e5"
++  L"\0" L"\x0001d4e6" L"\0" L"\x0001d4e7" L"\0" L"\x0001d4e8" L"\0"
++  L"\x0001d4e9" L"\0" L"\x0001d4ea" L"\0" L"\x0001d4eb" L"\0" L"\x0001d4ec"
++  L"\0" L"\x0001d4ed" L"\0" L"\x0001d4ee" L"\0" L"\x0001d4ef" L"\0"
++  L"\x0001d4f0" L"\0" L"\x0001d4f1" L"\0" L"\x0001d4f2" L"\0" L"\x0001d4f3"
++  L"\0" L"\x0001d4f4" L"\0" L"\x0001d4f5" L"\0" L"\x0001d4f6" L"\0"
++  L"\x0001d4f7" L"\0" L"\x0001d4f8" L"\0" L"\x0001d4f9" L"\0" L"\x0001d4fa"
++  L"\0" L"\x0001d4fb" L"\0" L"\x0001d4fc" L"\0" L"\x0001d4fd" L"\0"
++  L"\x0001d4fe" L"\0" L"\x0001d4ff" L"\0" L"\x0001d500" L"\0" L"\x0001d501"
++  L"\0" L"\x0001d502" L"\0" L"\x0001d503" L"\0" L"\x0001d504" L"\0"
++  L"\x0001d505" L"\0" L"\x0001d507" L"\0" L"\x0001d508" L"\0" L"\x0001d509"
++  L"\0" L"\x0001d50a" L"\0" L"\x0001d50d" L"\0" L"\x0001d50e" L"\0"
++  L"\x0001d50f" L"\0" L"\x0001d510" L"\0" L"\x0001d511" L"\0" L"\x0001d512"
++  L"\0" L"\x0001d513" L"\0" L"\x0001d514" L"\0" L"\x0001d516" L"\0"
++  L"\x0001d517" L"\0" L"\x0001d518" L"\0" L"\x0001d519" L"\0" L"\x0001d51a"
++  L"\0" L"\x0001d51b" L"\0" L"\x0001d51c" L"\0" L"\x0001d51e" L"\0"
++  L"\x0001d51f" L"\0" L"\x0001d520" L"\0" L"\x0001d521" L"\0" L"\x0001d522"
++  L"\0" L"\x0001d523" L"\0" L"\x0001d524" L"\0" L"\x0001d525" L"\0"
++  L"\x0001d526" L"\0" L"\x0001d527" L"\0" L"\x0001d528" L"\0" L"\x0001d529"
++  L"\0" L"\x0001d52a" L"\0" L"\x0001d52b" L"\0" L"\x0001d52c" L"\0"
++  L"\x0001d52d" L"\0" L"\x0001d52e" L"\0" L"\x0001d52f" L"\0" L"\x0001d530"
++  L"\0" L"\x0001d531" L"\0" L"\x0001d532" L"\0" L"\x0001d533" L"\0"
++  L"\x0001d534" L"\0" L"\x0001d535" L"\0" L"\x0001d536" L"\0" L"\x0001d537"
++  L"\0" L"\x0001d538" L"\0" L"\x0001d539" L"\0" L"\x0001d53b" L"\0"
++  L"\x0001d53c" L"\0" L"\x0001d53d" L"\0" L"\x0001d53e" L"\0" L"\x0001d540"
++  L"\0" L"\x0001d541" L"\0" L"\x0001d542" L"\0" L"\x0001d543" L"\0"
++  L"\x0001d544" L"\0" L"\x0001d546" L"\0" L"\x0001d54a" L"\0" L"\x0001d54b"
++  L"\0" L"\x0001d54c" L"\0" L"\x0001d54d" L"\0" L"\x0001d54e" L"\0"
++  L"\x0001d54f" L"\0" L"\x0001d550" L"\0" L"\x0001d552" L"\0" L"\x0001d553"
++  L"\0" L"\x0001d554" L"\0" L"\x0001d555" L"\0" L"\x0001d556" L"\0"
++  L"\x0001d557" L"\0" L"\x0001d558" L"\0" L"\x0001d559" L"\0" L"\x0001d55a"
++  L"\0" L"\x0001d55b" L"\0" L"\x0001d55c" L"\0" L"\x0001d55d" L"\0"
++  L"\x0001d55e" L"\0" L"\x0001d55f" L"\0" L"\x0001d560" L"\0" L"\x0001d561"
++  L"\0" L"\x0001d562" L"\0" L"\x0001d563" L"\0" L"\x0001d564" L"\0"
++  L"\x0001d565" L"\0" L"\x0001d566" L"\0" L"\x0001d567" L"\0" L"\x0001d568"
++  L"\0" L"\x0001d569" L"\0" L"\x0001d56a" L"\0" L"\x0001d56b" L"\0"
++  L"\x0001d56c" L"\0" L"\x0001d56d" L"\0" L"\x0001d56e" L"\0" L"\x0001d56f"
++  L"\0" L"\x0001d570" L"\0" L"\x0001d571" L"\0" L"\x0001d572" L"\0"
++  L"\x0001d573" L"\0" L"\x0001d574" L"\0" L"\x0001d575" L"\0" L"\x0001d576"
++  L"\0" L"\x0001d577" L"\0" L"\x0001d578" L"\0" L"\x0001d579" L"\0"
++  L"\x0001d57a" L"\0" L"\x0001d57b" L"\0" L"\x0001d57c" L"\0" L"\x0001d57d"
++  L"\0" L"\x0001d57e" L"\0" L"\x0001d57f" L"\0" L"\x0001d580" L"\0"
++  L"\x0001d581" L"\0" L"\x0001d582" L"\0" L"\x0001d583" L"\0" L"\x0001d584"
++  L"\0" L"\x0001d585" L"\0" L"\x0001d586" L"\0" L"\x0001d587" L"\0"
++  L"\x0001d588" L"\0" L"\x0001d589" L"\0" L"\x0001d58a" L"\0" L"\x0001d58b"
++  L"\0" L"\x0001d58c" L"\0" L"\x0001d58d" L"\0" L"\x0001d58e" L"\0"
++  L"\x0001d58f" L"\0" L"\x0001d590" L"\0" L"\x0001d591" L"\0" L"\x0001d592"
++  L"\0" L"\x0001d593" L"\0" L"\x0001d594" L"\0" L"\x0001d595" L"\0"
++  L"\x0001d596" L"\0" L"\x0001d597" L"\0" L"\x0001d598" L"\0" L"\x0001d599"
++  L"\0" L"\x0001d59a" L"\0" L"\x0001d59b" L"\0" L"\x0001d59c" L"\0"
++  L"\x0001d59d" L"\0" L"\x0001d59e" L"\0" L"\x0001d59f" L"\0" L"\x0001d5a0"
++  L"\0" L"\x0001d5a1" L"\0" L"\x0001d5a2" L"\0" L"\x0001d5a3" L"\0"
++  L"\x0001d5a4" L"\0" L"\x0001d5a5" L"\0" L"\x0001d5a6" L"\0" L"\x0001d5a7"
++  L"\0" L"\x0001d5a8" L"\0" L"\x0001d5a9" L"\0" L"\x0001d5aa" L"\0"
++  L"\x0001d5ab" L"\0" L"\x0001d5ac" L"\0" L"\x0001d5ad" L"\0" L"\x0001d5ae"
++  L"\0" L"\x0001d5af" L"\0" L"\x0001d5b0" L"\0" L"\x0001d5b1" L"\0"
++  L"\x0001d5b2" L"\0" L"\x0001d5b3" L"\0" L"\x0001d5b4" L"\0" L"\x0001d5b5"
++  L"\0" L"\x0001d5b6" L"\0" L"\x0001d5b7" L"\0" L"\x0001d5b8" L"\0"
++  L"\x0001d5b9" L"\0" L"\x0001d5ba" L"\0" L"\x0001d5bb" L"\0" L"\x0001d5bc"
++  L"\0" L"\x0001d5bd" L"\0" L"\x0001d5be" L"\0" L"\x0001d5bf" L"\0"
++  L"\x0001d5c0" L"\0" L"\x0001d5c1" L"\0" L"\x0001d5c2" L"\0" L"\x0001d5c3"
++  L"\0" L"\x0001d5c4" L"\0" L"\x0001d5c5" L"\0" L"\x0001d5c6" L"\0"
++  L"\x0001d5c7" L"\0" L"\x0001d5c8" L"\0" L"\x0001d5c9" L"\0" L"\x0001d5ca"
++  L"\0" L"\x0001d5cb" L"\0" L"\x0001d5cc" L"\0" L"\x0001d5cd" L"\0"
++  L"\x0001d5ce" L"\0" L"\x0001d5cf" L"\0" L"\x0001d5d0" L"\0" L"\x0001d5d1"
++  L"\0" L"\x0001d5d2" L"\0" L"\x0001d5d3" L"\0" L"\x0001d5d4" L"\0"
++  L"\x0001d5d5" L"\0" L"\x0001d5d6" L"\0" L"\x0001d5d7" L"\0" L"\x0001d5d8"
++  L"\0" L"\x0001d5d9" L"\0" L"\x0001d5da" L"\0" L"\x0001d5db" L"\0"
++  L"\x0001d5dc" L"\0" L"\x0001d5dd" L"\0" L"\x0001d5de" L"\0" L"\x0001d5df"
++  L"\0" L"\x0001d5e0" L"\0" L"\x0001d5e1" L"\0" L"\x0001d5e2" L"\0"
++  L"\x0001d5e3" L"\0" L"\x0001d5e4" L"\0" L"\x0001d5e5" L"\0" L"\x0001d5e6"
++  L"\0" L"\x0001d5e7" L"\0" L"\x0001d5e8" L"\0" L"\x0001d5e9" L"\0"
++  L"\x0001d5ea" L"\0" L"\x0001d5eb" L"\0" L"\x0001d5ec" L"\0" L"\x0001d5ed"
++  L"\0" L"\x0001d5ee" L"\0" L"\x0001d5ef" L"\0" L"\x0001d5f0" L"\0"
++  L"\x0001d5f1" L"\0" L"\x0001d5f2" L"\0" L"\x0001d5f3" L"\0" L"\x0001d5f4"
++  L"\0" L"\x0001d5f5" L"\0" L"\x0001d5f6" L"\0" L"\x0001d5f7" L"\0"
++  L"\x0001d5f8" L"\0" L"\x0001d5f9" L"\0" L"\x0001d5fa" L"\0" L"\x0001d5fb"
++  L"\0" L"\x0001d5fc" L"\0" L"\x0001d5fd" L"\0" L"\x0001d5fe" L"\0"
++  L"\x0001d5ff" L"\0" L"\x0001d600" L"\0" L"\x0001d601" L"\0" L"\x0001d602"
++  L"\0" L"\x0001d603" L"\0" L"\x0001d604" L"\0" L"\x0001d605" L"\0"
++  L"\x0001d606" L"\0" L"\x0001d607" L"\0" L"\x0001d608" L"\0" L"\x0001d609"
++  L"\0" L"\x0001d60a" L"\0" L"\x0001d60b" L"\0" L"\x0001d60c" L"\0"
++  L"\x0001d60d" L"\0" L"\x0001d60e" L"\0" L"\x0001d60f" L"\0" L"\x0001d610"
++  L"\0" L"\x0001d611" L"\0" L"\x0001d612" L"\0" L"\x0001d613" L"\0"
++  L"\x0001d614" L"\0" L"\x0001d615" L"\0" L"\x0001d616" L"\0" L"\x0001d617"
++  L"\0" L"\x0001d618" L"\0" L"\x0001d619" L"\0" L"\x0001d61a" L"\0"
++  L"\x0001d61b" L"\0" L"\x0001d61c" L"\0" L"\x0001d61d" L"\0" L"\x0001d61e"
++  L"\0" L"\x0001d61f" L"\0" L"\x0001d620" L"\0" L"\x0001d621" L"\0"
++  L"\x0001d622" L"\0" L"\x0001d623" L"\0" L"\x0001d624" L"\0" L"\x0001d625"
++  L"\0" L"\x0001d626" L"\0" L"\x0001d627" L"\0" L"\x0001d628" L"\0"
++  L"\x0001d629" L"\0" L"\x0001d62a" L"\0" L"\x0001d62b" L"\0" L"\x0001d62c"
++  L"\0" L"\x0001d62d" L"\0" L"\x0001d62e" L"\0" L"\x0001d62f" L"\0"
++  L"\x0001d630" L"\0" L"\x0001d631" L"\0" L"\x0001d632" L"\0" L"\x0001d633"
++  L"\0" L"\x0001d634" L"\0" L"\x0001d635" L"\0" L"\x0001d636" L"\0"
++  L"\x0001d637" L"\0" L"\x0001d638" L"\0" L"\x0001d639" L"\0" L"\x0001d63a"
++  L"\0" L"\x0001d63b" L"\0" L"\x0001d63c" L"\0" L"\x0001d63d" L"\0"
++  L"\x0001d63e" L"\0" L"\x0001d63f" L"\0" L"\x0001d640" L"\0" L"\x0001d641"
++  L"\0" L"\x0001d642" L"\0" L"\x0001d643" L"\0" L"\x0001d644" L"\0"
++  L"\x0001d645" L"\0" L"\x0001d646" L"\0" L"\x0001d647" L"\0" L"\x0001d648"
++  L"\0" L"\x0001d649" L"\0" L"\x0001d64a" L"\0" L"\x0001d64b" L"\0"
++  L"\x0001d64c" L"\0" L"\x0001d64d" L"\0" L"\x0001d64e" L"\0" L"\x0001d64f"
++  L"\0" L"\x0001d650" L"\0" L"\x0001d651" L"\0" L"\x0001d652" L"\0"
++  L"\x0001d653" L"\0" L"\x0001d654" L"\0" L"\x0001d655" L"\0" L"\x0001d656"
++  L"\0" L"\x0001d657" L"\0" L"\x0001d658" L"\0" L"\x0001d659" L"\0"
++  L"\x0001d65a" L"\0" L"\x0001d65b" L"\0" L"\x0001d65c" L"\0" L"\x0001d65d"
++  L"\0" L"\x0001d65e" L"\0" L"\x0001d65f" L"\0" L"\x0001d660" L"\0"
++  L"\x0001d661" L"\0" L"\x0001d662" L"\0" L"\x0001d663" L"\0" L"\x0001d664"
++  L"\0" L"\x0001d665" L"\0" L"\x0001d666" L"\0" L"\x0001d667" L"\0"
++  L"\x0001d668" L"\0" L"\x0001d669" L"\0" L"\x0001d66a" L"\0" L"\x0001d66b"
++  L"\0" L"\x0001d66c" L"\0" L"\x0001d66d" L"\0" L"\x0001d66e" L"\0"
++  L"\x0001d66f" L"\0" L"\x0001d670" L"\0" L"\x0001d671" L"\0" L"\x0001d672"
++  L"\0" L"\x0001d673" L"\0" L"\x0001d674" L"\0" L"\x0001d675" L"\0"
++  L"\x0001d676" L"\0" L"\x0001d677" L"\0" L"\x0001d678" L"\0" L"\x0001d679"
++  L"\0" L"\x0001d67a" L"\0" L"\x0001d67b" L"\0" L"\x0001d67c" L"\0"
++  L"\x0001d67d" L"\0" L"\x0001d67e" L"\0" L"\x0001d67f" L"\0" L"\x0001d680"
++  L"\0" L"\x0001d681" L"\0" L"\x0001d682" L"\0" L"\x0001d683" L"\0"
++  L"\x0001d684" L"\0" L"\x0001d685" L"\0" L"\x0001d686" L"\0" L"\x0001d687"
++  L"\0" L"\x0001d688" L"\0" L"\x0001d689" L"\0" L"\x0001d68a" L"\0"
++  L"\x0001d68b" L"\0" L"\x0001d68c" L"\0" L"\x0001d68d" L"\0" L"\x0001d68e"
++  L"\0" L"\x0001d68f" L"\0" L"\x0001d690" L"\0" L"\x0001d691" L"\0"
++  L"\x0001d692" L"\0" L"\x0001d693" L"\0" L"\x0001d694" L"\0" L"\x0001d695"
++  L"\0" L"\x0001d696" L"\0" L"\x0001d697" L"\0" L"\x0001d698" L"\0"
++  L"\x0001d699" L"\0" L"\x0001d69a" L"\0" L"\x0001d69b" L"\0" L"\x0001d69c"
++  L"\0" L"\x0001d69d" L"\0" L"\x0001d69e" L"\0" L"\x0001d69f" L"\0"
++  L"\x0001d6a0" L"\0" L"\x0001d6a1" L"\0" L"\x0001d6a2" L"\0" L"\x0001d6a3"
++  L"\0" L"\x0001d7ce" L"\0" L"\x0001d7cf" L"\0" L"\x0001d7d0" L"\0"
++  L"\x0001d7d1" L"\0" L"\x0001d7d2" L"\0" L"\x0001d7d3" L"\0" L"\x0001d7d4"
++  L"\0" L"\x0001d7d5" L"\0" L"\x0001d7d6" L"\0" L"\x0001d7d7" L"\0"
++  L"\x0001d7d8" L"\0" L"\x0001d7d9" L"\0" L"\x0001d7da" L"\0" L"\x0001d7db"
++  L"\0" L"\x0001d7dc" L"\0" L"\x0001d7dd" L"\0" L"\x0001d7de" L"\0"
++  L"\x0001d7df" L"\0" L"\x0001d7e0" L"\0" L"\x0001d7e1" L"\0" L"\x0001d7e2"
++  L"\0" L"\x0001d7e3" L"\0" L"\x0001d7e4" L"\0" L"\x0001d7e5" L"\0"
++  L"\x0001d7e6" L"\0" L"\x0001d7e7" L"\0" L"\x0001d7e8" L"\0" L"\x0001d7e9"
++  L"\0" L"\x0001d7ea" L"\0" L"\x0001d7eb" L"\0" L"\x0001d7ec" L"\0"
++  L"\x0001d7ed" L"\0" L"\x0001d7ee" L"\0" L"\x0001d7ef" L"\0" L"\x0001d7f0"
++  L"\0" L"\x0001d7f1" L"\0" L"\x0001d7f2" L"\0" L"\x0001d7f3" L"\0"
++  L"\x0001d7f4" L"\0" L"\x0001d7f5" L"\0" L"\x0001d7f6" L"\0" L"\x0001d7f7"
++  L"\0" L"\x0001d7f8" L"\0" L"\x0001d7f9" L"\0" L"\x0001d7fa" L"\0"
++  L"\x0001d7fb" L"\0" L"\x0001d7fc" L"\0" L"\x0001d7fd" L"\0" L"\x0001d7fe"
++  L"\0" L"\x0001d7ff";
+ static const uint32_t translit_to_idx[] =
+ {
+      0,    3,    8,   12,   15,   20,   23,   26,   30,   37,   44,   51,
+@@ -471,22 +471,22 @@ static const uint32_t translit_to_idx[] 
+    180,  183,  186,  189,  192,  196,  199,  202,  205,  208,  211,  214,
+    217,  221,  224,  227,  230,  233,  237,  242,  245,  248,  252,  257,
+    260,  263,  267,  270,  274,  278,  282,  285,  287,  289,  291,  293,
+-   297,  302,  307,  312,  315,  320,  325,  328,  331,  334,  337,  340,
+-   343,  346,  349,  352,  355,  359,  362,  365,  368,  371,  374,  379,
+-   385,  388,  393,  396,  399,  402,  405,  408,  411,  414,  417,  420,
+-   423,  426,  429,  432,  435,  438,  445,  452,  459,  466,  473,  480,
+-   487,  494,  501,  508,  515,  522,  527,  530,  534,  539,  543,  546,
+-   550,  555,  561,  565,  568,  572,  577,  580,  583,  586,  589,  592,
+-   596,  601,  605,  608,  612,  617,  623,  627,  630,  634,  639,  642,
+-   645,  648,  651,  655,  659,  664,  668,  672,  677,  680,  683,  686,
+-   689,  692,  695,  698,  702,  706,  710,  714,  719,  724,  729,  734,
+-   739,  744,  749,  754,  759,  764,  768,  772,  776,  780,  784,  788,
+-   792,  796,  801,  806,  811,  816,  821,  826,  831,  836,  841,  845,
+-   850,  855,  859,  863,  867,  871,  875,  880,  883,  887,  892,  897,
+-   902,  907,  912,  917,  922,  927,  932,  938,  944,  950,  956,  962,
+-   968,  974,  980,  986,  992,  998, 1003, 1008, 1013, 1018, 1023, 1028,
+-  1033, 1038, 1043, 1049, 1055, 1061, 1067, 1073, 1079, 1085, 1091, 1097,
+-  1103, 1109, 1113, 1117, 1121, 1125, 1129, 1133, 1137, 1141, 1145, 1150,
++   297,  302,  307,  312,  317,  320,  325,  330,  333,  336,  339,  342,
++   345,  348,  351,  354,  357,  360,  364,  367,  370,  373,  376,  379,
++   384,  390,  393,  398,  401,  404,  407,  410,  413,  416,  419,  422,
++   425,  428,  431,  434,  437,  440,  443,  450,  457,  464,  471,  478,
++   485,  492,  499,  506,  513,  520,  527,  532,  535,  539,  544,  548,
++   551,  555,  560,  566,  570,  573,  577,  582,  585,  588,  591,  594,
++   597,  601,  606,  610,  613,  617,  622,  628,  632,  635,  639,  644,
++   647,  650,  653,  656,  660,  664,  669,  673,  677,  682,  685,  688,
++   691,  694,  697,  700,  703,  707,  711,  715,  719,  724,  729,  734,
++   739,  744,  749,  754,  759,  764,  769,  773,  777,  781,  785,  789,
++   793,  797,  801,  806,  811,  816,  821,  826,  831,  836,  841,  846,
++   850,  855,  860,  864,  868,  872,  876,  880,  885,  888,  892,  897,
++   902,  907,  912,  917,  922,  927,  932,  937,  943,  949,  955,  961,
++   967,  973,  979,  985,  991,  997, 1003, 1008, 1013, 1018, 1023, 1028,
++  1033, 1038, 1043, 1048, 1054, 1060, 1066, 1072, 1078, 1084, 1090, 1096,
++  1102, 1108, 1114, 1118, 1122, 1126, 1130, 1134, 1138, 1142, 1146, 1150,
+   1155, 1160, 1165, 1170, 1175, 1180, 1185, 1190, 1195, 1200, 1205, 1210,
+   1215, 1220, 1225, 1230, 1235, 1240, 1245, 1250, 1255, 1260, 1265, 1270,
+   1275, 1280, 1285, 1290, 1295, 1300, 1305, 1310, 1315, 1320, 1325, 1330,
+@@ -494,89 +494,89 @@ static const uint32_t translit_to_idx[] 
+   1395, 1400, 1405, 1410, 1415, 1420, 1425, 1430, 1435, 1440, 1445, 1450,
+   1455, 1460, 1465, 1470, 1475, 1480, 1485, 1490, 1495, 1500, 1505, 1510,
+   1515, 1520, 1525, 1530, 1535, 1540, 1545, 1550, 1555, 1560, 1565, 1570,
+-  1575, 1580, 1585, 1590, 1595, 1598, 1601, 1604, 1607, 1610, 1613, 1616,
+-  1619, 1622, 1625, 1628, 1631, 1636, 1640, 1645, 1648, 1651, 1657, 1663,
+-  1669, 1675, 1681, 1687, 1693, 1699, 1705, 1711, 1717, 1723, 1729, 1735,
+-  1741, 1747, 1753, 1759, 1765, 1771, 1777, 1783, 1789, 1795, 1801, 1807,
+-  1813, 1819, 1825, 1831, 1836, 1840, 1844, 1849, 1853, 1857, 1861, 1865,
+-  1869, 1873, 1877, 1881, 1885, 1889, 1894, 1900, 1904, 1908, 1912, 1916,
+-  1920, 1924, 1928, 1933, 1938, 1943, 1948, 1952, 1956, 1960, 1964, 1968,
+-  1972, 1976, 1980, 1984, 1988, 1994, 2000, 2005, 2011, 2017, 2023, 2028,
+-  2034, 2039, 2046, 2050, 2055, 2060, 2065, 2070, 2077, 2086, 2090, 2094,
+-  2098, 2102, 2106, 2110, 2114, 2118, 2122, 2126, 2130, 2134, 2138, 2142,
+-  2146, 2150, 2156, 2160, 2164, 2168, 2174, 2179, 2183, 2187, 2191, 2195,
+-  2199, 2203, 2207, 2211, 2215, 2219, 2224, 2228, 2232, 2237, 2242, 2246,
+-  2252, 2257, 2261, 2265, 2269, 2273, 2277, 2281, 2285, 2290, 2295, 2299,
+-  2302, 2304, 2306, 2308, 2310, 2312, 2314, 2316, 2318, 2320, 2322, 2324,
+-  2326, 2328, 2330, 2332, 2334, 2337, 2340, 2343, 2346, 2349, 2352, 2355,
+-  2358, 2361, 2364, 2367, 2370, 2373, 2376, 2379, 2382, 2385, 2388, 2391,
+-  2394, 2397, 2400, 2403, 2406, 2409, 2411, 2414, 2417, 2420, 2423, 2426,
+-  2429, 2432, 2435, 2438, 2441, 2444, 2447, 2450, 2453, 2456, 2459, 2462,
+-  2465, 2468, 2471, 2474, 2477, 2480, 2483, 2486, 2489, 2492, 2495, 2498,
+-  2501, 2504, 2507, 2510, 2513, 2516, 2519, 2522, 2525, 2528, 2531, 2534,
+-  2537, 2540, 2543, 2546, 2549, 2552, 2555, 2558, 2561, 2564, 2567, 2570,
+-  2573, 2576, 2579, 2582, 2585, 2588, 2591, 2594, 2597, 2600, 2603, 2606,
+-  2609, 2612, 2615, 2618, 2621, 2624, 2627, 2630, 2633, 2636, 2639, 2642,
+-  2645, 2648, 2651, 2654, 2657, 2660, 2663, 2666, 2669, 2672, 2675, 2678,
+-  2681, 2684, 2687, 2690, 2693, 2696, 2699, 2702, 2705, 2708, 2711, 2714,
+-  2717, 2720, 2723, 2726, 2729, 2732, 2735, 2738, 2741, 2744, 2747, 2750,
+-  2753, 2756, 2759, 2762, 2765, 2768, 2771, 2774, 2777, 2780, 2783, 2786,
+-  2789, 2792, 2795, 2798, 2801, 2804, 2807, 2810, 2813, 2816, 2819, 2822,
+-  2825, 2828, 2831, 2834, 2837, 2840, 2843, 2846, 2849, 2852, 2855, 2858,
+-  2861, 2864, 2867, 2870, 2873, 2876, 2879, 2882, 2885, 2888, 2891, 2894,
+-  2897, 2900, 2903, 2906, 2909, 2912, 2915, 2918, 2921, 2924, 2927, 2930,
+-  2933, 2936, 2939, 2942, 2945, 2948, 2951, 2954, 2957, 2960, 2963, 2966,
+-  2969, 2972, 2975, 2978, 2981, 2984, 2987, 2990, 2993, 2996, 2999, 3002,
+-  3005, 3008, 3011, 3014, 3017, 3020, 3023, 3026, 3029, 3032, 3035, 3038,
+-  3041, 3044, 3047, 3050, 3053, 3056, 3059, 3062, 3065, 3068, 3071, 3074,
+-  3077, 3080, 3083, 3086, 3089, 3092, 3095, 3098, 3101, 3104, 3107, 3110,
+-  3113, 3116, 3119, 3122, 3125, 3128, 3131, 3134, 3137, 3140, 3143, 3146,
+-  3149, 3152, 3155, 3158, 3161, 3164, 3167, 3170, 3173, 3176, 3179, 3182,
+-  3185, 3188, 3191, 3194, 3197, 3200, 3203, 3206, 3209, 3212, 3215, 3218,
+-  3221, 3224, 3227, 3230, 3233, 3236, 3239, 3242, 3245, 3248, 3251, 3254,
+-  3257, 3260, 3263, 3266, 3269, 3272, 3275, 3278, 3281, 3284, 3287, 3290,
+-  3293, 3296, 3299, 3302, 3305, 3308, 3311, 3314, 3317, 3320, 3323, 3326,
+-  3329, 3332, 3335, 3338, 3341, 3344, 3347, 3350, 3353, 3356, 3359, 3362,
+-  3365, 3368, 3371, 3374, 3377, 3380, 3383, 3386, 3389, 3392, 3395, 3398,
+-  3401, 3404, 3407, 3410, 3413, 3416, 3419, 3422, 3425, 3428, 3431, 3434,
+-  3437, 3440, 3443, 3446, 3449, 3452, 3455, 3458, 3461, 3464, 3467, 3470,
+-  3473, 3476, 3479, 3482, 3485, 3488, 3491, 3494, 3497, 3500, 3503, 3506,
+-  3509, 3512, 3515, 3518, 3521, 3524, 3527, 3530, 3533, 3536, 3539, 3542,
+-  3545, 3548, 3551, 3554, 3557, 3560, 3563, 3566, 3569, 3572, 3575, 3578,
+-  3581, 3584, 3587, 3590, 3593, 3596, 3599, 3602, 3605, 3608, 3611, 3614,
+-  3617, 3620, 3623, 3626, 3629, 3632, 3635, 3638, 3641, 3644, 3647, 3650,
+-  3653, 3656, 3659, 3662, 3665, 3668, 3671, 3674, 3677, 3680, 3683, 3686,
+-  3689, 3692, 3695, 3698, 3701, 3704, 3707, 3710, 3713, 3716, 3719, 3722,
+-  3725, 3728, 3731, 3734, 3737, 3740, 3743, 3746, 3749, 3752, 3755, 3758,
+-  3761, 3764, 3767, 3770, 3773, 3776, 3779, 3782, 3785, 3788, 3791, 3794,
+-  3797, 3800, 3803, 3806, 3809, 3812, 3815, 3818, 3821, 3824, 3827, 3830,
+-  3833, 3836, 3839, 3842, 3845, 3848, 3851, 3854, 3857, 3860, 3863, 3866,
+-  3869, 3872, 3875, 3878, 3881, 3884, 3887, 3890, 3893, 3896, 3899, 3902,
+-  3905, 3908, 3911, 3914, 3917, 3920, 3923, 3926, 3929, 3932, 3935, 3938,
+-  3941, 3944, 3947, 3950, 3953, 3956, 3959, 3962, 3965, 3968, 3971, 3974,
+-  3977, 3980, 3983, 3986, 3989, 3992, 3995, 3998, 4001, 4004, 4007, 4010,
+-  4013, 4016, 4019, 4022, 4025, 4028, 4031, 4034, 4037, 4040, 4043, 4046,
+-  4049, 4052, 4055, 4058, 4061, 4064, 4067, 4070, 4073, 4076, 4079, 4082,
+-  4085, 4088, 4091, 4094, 4097, 4100, 4103, 4106, 4109, 4112, 4115, 4118,
+-  4121, 4124, 4127, 4130, 4133, 4136, 4139, 4142, 4145, 4148, 4151, 4154,
+-  4157, 4160, 4163, 4166, 4169, 4172, 4175, 4178, 4181, 4184, 4187, 4190,
+-  4193, 4196, 4199, 4202, 4205, 4208, 4211, 4214, 4217, 4220, 4223, 4226,
+-  4229, 4232, 4235, 4238, 4241, 4244, 4247, 4250, 4253, 4256, 4259, 4262,
+-  4265, 4268, 4271, 4274, 4277, 4280, 4283, 4286, 4289, 4292, 4295, 4298,
+-  4301, 4304, 4307, 4310, 4313, 4316, 4319, 4322, 4325, 4328, 4331, 4334,
+-  4337, 4340, 4343, 4346, 4349, 4352, 4355, 4358, 4361, 4364, 4367, 4370,
+-  4373, 4376, 4379, 4382, 4385, 4388, 4391, 4394, 4397, 4400, 4403, 4406,
+-  4409, 4412, 4415, 4418, 4421, 4424, 4427, 4430, 4433, 4436, 4439, 4442,
+-  4445, 4448, 4451, 4454, 4457, 4460, 4463, 4466, 4469, 4472, 4475, 4478,
+-  4481, 4484, 4487, 4490, 4493, 4496, 4499, 4502, 4505, 4508, 4511, 4514,
+-  4517, 4520, 4523, 4526, 4529, 4532, 4535, 4538, 4541, 4544, 4547, 4550,
+-  4553, 4556, 4559, 4562, 4565, 4568, 4571, 4574, 4577, 4580, 4583, 4586,
+-  4589, 4592, 4595, 4598, 4601, 4604, 4607, 4610, 4613, 4616, 4619, 4622,
+-  4625, 4628, 4631, 4634, 4637, 4640, 4643, 4646, 4649, 4652, 4655, 4658,
+-  4661, 4664, 4667, 4670, 4673, 4676, 4679, 4682, 4685, 4688, 4691, 4694,
+-  4697, 4700, 4703, 4706, 4709, 4712, 4715, 4718, 4721, 4724, 4727, 4730,
+-  4733, 4736, 4739, 4742, 4745, 4748, 4751, 4754, 4757, 4760, 4763, 4766,
+-  4769, 4772, 4775, 4778, 4781, 4784, 4787, 4790, 4793
++  1575, 1580, 1585, 1590, 1595, 1600, 1603, 1606, 1609, 1612, 1615, 1618,
++  1621, 1624, 1627, 1630, 1633, 1636, 1641, 1645, 1650, 1653, 1656, 1662,
++  1668, 1674, 1680, 1686, 1692, 1698, 1704, 1710, 1716, 1722, 1728, 1734,
++  1740, 1746, 1752, 1758, 1764, 1770, 1776, 1782, 1788, 1794, 1800, 1806,
++  1812, 1818, 1824, 1830, 1836, 1841, 1845, 1849, 1854, 1858, 1862, 1866,
++  1870, 1874, 1878, 1882, 1886, 1890, 1894, 1899, 1905, 1909, 1913, 1917,
++  1921, 1925, 1929, 1933, 1938, 1943, 1948, 1953, 1957, 1961, 1965, 1969,
++  1973, 1977, 1981, 1985, 1989, 1993, 1999, 2005, 2010, 2016, 2022, 2028,
++  2033, 2039, 2044, 2051, 2055, 2060, 2065, 2070, 2075, 2082, 2091, 2095,
++  2099, 2103, 2107, 2111, 2115, 2119, 2123, 2127, 2131, 2135, 2139, 2143,
++  2147, 2151, 2155, 2161, 2165, 2169, 2173, 2179, 2184, 2188, 2192, 2196,
++  2200, 2204, 2208, 2212, 2216, 2220, 2224, 2229, 2233, 2237, 2242, 2247,
++  2251, 2257, 2262, 2266, 2270, 2274, 2278, 2282, 2286, 2290, 2295, 2300,
++  2304, 2307, 2309, 2311, 2313, 2315, 2317, 2319, 2321, 2323, 2325, 2327,
++  2329, 2331, 2333, 2335, 2337, 2339, 2342, 2345, 2348, 2351, 2354, 2357,
++  2360, 2363, 2366, 2369, 2372, 2375, 2378, 2381, 2384, 2387, 2390, 2393,
++  2396, 2399, 2402, 2405, 2408, 2411, 2414, 2416, 2419, 2422, 2425, 2428,
++  2431, 2434, 2437, 2440, 2443, 2446, 2449, 2452, 2455, 2458, 2461, 2464,
++  2467, 2470, 2473, 2476, 2479, 2482, 2485, 2488, 2491, 2494, 2497, 2500,
++  2503, 2506, 2509, 2512, 2515, 2518, 2521, 2524, 2527, 2530, 2533, 2536,
++  2539, 2542, 2545, 2548, 2551, 2554, 2557, 2560, 2563, 2566, 2569, 2572,
++  2575, 2578, 2581, 2584, 2587, 2590, 2593, 2596, 2599, 2602, 2605, 2608,
++  2611, 2614, 2617, 2620, 2623, 2626, 2629, 2632, 2635, 2638, 2641, 2644,
++  2647, 2650, 2653, 2656, 2659, 2662, 2665, 2668, 2671, 2674, 2677, 2680,
++  2683, 2686, 2689, 2692, 2695, 2698, 2701, 2704, 2707, 2710, 2713, 2716,
++  2719, 2722, 2725, 2728, 2731, 2734, 2737, 2740, 2743, 2746, 2749, 2752,
++  2755, 2758, 2761, 2764, 2767, 2770, 2773, 2776, 2779, 2782, 2785, 2788,
++  2791, 2794, 2797, 2800, 2803, 2806, 2809, 2812, 2815, 2818, 2821, 2824,
++  2827, 2830, 2833, 2836, 2839, 2842, 2845, 2848, 2851, 2854, 2857, 2860,
++  2863, 2866, 2869, 2872, 2875, 2878, 2881, 2884, 2887, 2890, 2893, 2896,
++  2899, 2902, 2905, 2908, 2911, 2914, 2917, 2920, 2923, 2926, 2929, 2932,
++  2935, 2938, 2941, 2944, 2947, 2950, 2953, 2956, 2959, 2962, 2965, 2968,
++  2971, 2974, 2977, 2980, 2983, 2986, 2989, 2992, 2995, 2998, 3001, 3004,
++  3007, 3010, 3013, 3016, 3019, 3022, 3025, 3028, 3031, 3034, 3037, 3040,
++  3043, 3046, 3049, 3052, 3055, 3058, 3061, 3064, 3067, 3070, 3073, 3076,
++  3079, 3082, 3085, 3088, 3091, 3094, 3097, 3100, 3103, 3106, 3109, 3112,
++  3115, 3118, 3121, 3124, 3127, 3130, 3133, 3136, 3139, 3142, 3145, 3148,
++  3151, 3154, 3157, 3160, 3163, 3166, 3169, 3172, 3175, 3178, 3181, 3184,
++  3187, 3190, 3193, 3196, 3199, 3202, 3205, 3208, 3211, 3214, 3217, 3220,
++  3223, 3226, 3229, 3232, 3235, 3238, 3241, 3244, 3247, 3250, 3253, 3256,
++  3259, 3262, 3265, 3268, 3271, 3274, 3277, 3280, 3283, 3286, 3289, 3292,
++  3295, 3298, 3301, 3304, 3307, 3310, 3313, 3316, 3319, 3322, 3325, 3328,
++  3331, 3334, 3337, 3340, 3343, 3346, 3349, 3352, 3355, 3358, 3361, 3364,
++  3367, 3370, 3373, 3376, 3379, 3382, 3385, 3388, 3391, 3394, 3397, 3400,
++  3403, 3406, 3409, 3412, 3415, 3418, 3421, 3424, 3427, 3430, 3433, 3436,
++  3439, 3442, 3445, 3448, 3451, 3454, 3457, 3460, 3463, 3466, 3469, 3472,
++  3475, 3478, 3481, 3484, 3487, 3490, 3493, 3496, 3499, 3502, 3505, 3508,
++  3511, 3514, 3517, 3520, 3523, 3526, 3529, 3532, 3535, 3538, 3541, 3544,
++  3547, 3550, 3553, 3556, 3559, 3562, 3565, 3568, 3571, 3574, 3577, 3580,
++  3583, 3586, 3589, 3592, 3595, 3598, 3601, 3604, 3607, 3610, 3613, 3616,
++  3619, 3622, 3625, 3628, 3631, 3634, 3637, 3640, 3643, 3646, 3649, 3652,
++  3655, 3658, 3661, 3664, 3667, 3670, 3673, 3676, 3679, 3682, 3685, 3688,
++  3691, 3694, 3697, 3700, 3703, 3706, 3709, 3712, 3715, 3718, 3721, 3724,
++  3727, 3730, 3733, 3736, 3739, 3742, 3745, 3748, 3751, 3754, 3757, 3760,
++  3763, 3766, 3769, 3772, 3775, 3778, 3781, 3784, 3787, 3790, 3793, 3796,
++  3799, 3802, 3805, 3808, 3811, 3814, 3817, 3820, 3823, 3826, 3829, 3832,
++  3835, 3838, 3841, 3844, 3847, 3850, 3853, 3856, 3859, 3862, 3865, 3868,
++  3871, 3874, 3877, 3880, 3883, 3886, 3889, 3892, 3895, 3898, 3901, 3904,
++  3907, 3910, 3913, 3916, 3919, 3922, 3925, 3928, 3931, 3934, 3937, 3940,
++  3943, 3946, 3949, 3952, 3955, 3958, 3961, 3964, 3967, 3970, 3973, 3976,
++  3979, 3982, 3985, 3988, 3991, 3994, 3997, 4000, 4003, 4006, 4009, 4012,
++  4015, 4018, 4021, 4024, 4027, 4030, 4033, 4036, 4039, 4042, 4045, 4048,
++  4051, 4054, 4057, 4060, 4063, 4066, 4069, 4072, 4075, 4078, 4081, 4084,
++  4087, 4090, 4093, 4096, 4099, 4102, 4105, 4108, 4111, 4114, 4117, 4120,
++  4123, 4126, 4129, 4132, 4135, 4138, 4141, 4144, 4147, 4150, 4153, 4156,
++  4159, 4162, 4165, 4168, 4171, 4174, 4177, 4180, 4183, 4186, 4189, 4192,
++  4195, 4198, 4201, 4204, 4207, 4210, 4213, 4216, 4219, 4222, 4225, 4228,
++  4231, 4234, 4237, 4240, 4243, 4246, 4249, 4252, 4255, 4258, 4261, 4264,
++  4267, 4270, 4273, 4276, 4279, 4282, 4285, 4288, 4291, 4294, 4297, 4300,
++  4303, 4306, 4309, 4312, 4315, 4318, 4321, 4324, 4327, 4330, 4333, 4336,
++  4339, 4342, 4345, 4348, 4351, 4354, 4357, 4360, 4363, 4366, 4369, 4372,
++  4375, 4378, 4381, 4384, 4387, 4390, 4393, 4396, 4399, 4402, 4405, 4408,
++  4411, 4414, 4417, 4420, 4423, 4426, 4429, 4432, 4435, 4438, 4441, 4444,
++  4447, 4450, 4453, 4456, 4459, 4462, 4465, 4468, 4471, 4474, 4477, 4480,
++  4483, 4486, 4489, 4492, 4495, 4498, 4501, 4504, 4507, 4510, 4513, 4516,
++  4519, 4522, 4525, 4528, 4531, 4534, 4537, 4540, 4543, 4546, 4549, 4552,
++  4555, 4558, 4561, 4564, 4567, 4570, 4573, 4576, 4579, 4582, 4585, 4588,
++  4591, 4594, 4597, 4600, 4603, 4606, 4609, 4612, 4615, 4618, 4621, 4624,
++  4627, 4630, 4633, 4636, 4639, 4642, 4645, 4648, 4651, 4654, 4657, 4660,
++  4663, 4666, 4669, 4672, 4675, 4678, 4681, 4684, 4687, 4690, 4693, 4696,
++  4699, 4702, 4705, 4708, 4711, 4714, 4717, 4720, 4723, 4726, 4729, 4732,
++  4735, 4738, 4741, 4744, 4747, 4750, 4753, 4756, 4759, 4762, 4765, 4768,
++  4771, 4774, 4777, 4780, 4783, 4786, 4789, 4792, 4795, 4798
+ };
+ static const wchar_t translit_to_tbl[] =
+   L" \0" L"\0" L"(C)\0" L"\0" L"<<\0" L"\0" L"-\0" L"\0" L"(R)\0" L"\0" L"u\0"
+@@ -594,73 +594,73 @@ static const wchar_t translit_to_tbl[] =
+   L"\0" L"..\0" L"\0" L"...\0" L"\0" L" \0" L"\0" L"`\0" L"\0" L"``\0" L"\0"
+   L"```\0" L"\0" L"<\0" L"\0" L">\0" L"\0" L"!!\0" L"\0" L"/\0" L"\0" L"??\0"
+   L"\0" L"?!\0" L"\0" L"!?\0" L"\0" L" \0" L"\0" L"\0" L"\0" L"\0" L"\0" L"\0"
+-  L"\0" L"\0" L"\0" L"Rs\0" L"\0" L"EUR\0" L"\0" L"a/c\0" L"\0" L"a/s\0" L"\0"
+-  L"C\0" L"\0" L"c/o\0" L"\0" L"c/u\0" L"\0" L"g\0" L"\0" L"H\0" L"\0" L"H\0"
+-  L"\0" L"H\0" L"\0" L"h\0" L"\0" L"I\0" L"\0" L"I\0" L"\0" L"L\0" L"\0"
+-  L"l\0" L"\0" L"N\0" L"\0" L"No\0" L"\0" L"P\0" L"\0" L"Q\0" L"\0" L"R\0"
+-  L"\0" L"R\0" L"\0" L"R\0" L"\0" L"TEL\0" L"\0" L"(TM)\0" L"\0" L"Z\0" L"\0"
+-  L"Ohm\0" L"\0" L"Z\0" L"\0" L"B\0" L"\0" L"C\0" L"\0" L"e\0" L"\0" L"e\0"
+-  L"\0" L"E\0" L"\0" L"F\0" L"\0" L"M\0" L"\0" L"o\0" L"\0" L"i\0" L"\0"
+-  L"D\0" L"\0" L"d\0" L"\0" L"e\0" L"\0" L"i\0" L"\0" L"j\0" L"\0" L" 1/3 \0"
+-  L"\0" L" 2/3 \0" L"\0" L" 1/5 \0" L"\0" L" 2/5 \0" L"\0" L" 3/5 \0" L"\0"
+-  L" 4/5 \0" L"\0" L" 1/6 \0" L"\0" L" 5/6 \0" L"\0" L" 1/8 \0" L"\0"
+-  L" 3/8 \0" L"\0" L" 5/8 \0" L"\0" L" 7/8 \0" L"\0" L" 1/\0" L"\0" L"I\0"
+-  L"\0" L"II\0" L"\0" L"III\0" L"\0" L"IV\0" L"\0" L"V\0" L"\0" L"VI\0" L"\0"
+-  L"VII\0" L"\0" L"VIII\0" L"\0" L"IX\0" L"\0" L"X\0" L"\0" L"XI\0" L"\0"
+-  L"XII\0" L"\0" L"L\0" L"\0" L"C\0" L"\0" L"D\0" L"\0" L"M\0" L"\0" L"i\0"
+-  L"\0" L"ii\0" L"\0" L"iii\0" L"\0" L"iv\0" L"\0" L"v\0" L"\0" L"vi\0" L"\0"
+-  L"vii\0" L"\0" L"viii\0" L"\0" L"ix\0" L"\0" L"x\0" L"\0" L"xi\0" L"\0"
+-  L"xii\0" L"\0" L"l\0" L"\0" L"c\0" L"\0" L"d\0" L"\0" L"m\0" L"\0" L"<-\0"
+-  L"\0" L"->\0" L"\0" L"<->\0" L"\0" L"<=\0" L"\0" L"=>\0" L"\0" L"<=>\0"
+-  L"\0" L"-\0" L"\0" L"/\0" L"\0" L"\\\0" L"\0" L"*\0" L"\0" L"|\0" L"\0"
+-  L":\0" L"\0" L"~\0" L"\0" L"<=\0" L"\0" L">=\0" L"\0" L"<<\0" L"\0" L">>\0"
+-  L"\0" L"<<<\0" L"\0" L">>>\0" L"\0" L"NUL\0" L"\0" L"SOH\0" L"\0" L"STX\0"
+-  L"\0" L"ETX\0" L"\0" L"EOT\0" L"\0" L"ENQ\0" L"\0" L"ACK\0" L"\0" L"BEL\0"
+-  L"\0" L"BS\0" L"\0" L"HT\0" L"\0" L"LF\0" L"\0" L"VT\0" L"\0" L"FF\0" L"\0"
+-  L"CR\0" L"\0" L"SO\0" L"\0" L"SI\0" L"\0" L"DLE\0" L"\0" L"DC1\0" L"\0"
+-  L"DC2\0" L"\0" L"DC3\0" L"\0" L"DC4\0" L"\0" L"NAK\0" L"\0" L"SYN\0" L"\0"
+-  L"ETB\0" L"\0" L"CAN\0" L"\0" L"EM\0" L"\0" L"SUB\0" L"\0" L"ESC\0" L"\0"
+-  L"FS\0" L"\0" L"GS\0" L"\0" L"RS\0" L"\0" L"US\0" L"\0" L"SP\0" L"\0"
+-  L"DEL\0" L"\0" L"_\0" L"\0" L"NL\0" L"\0" L"(1)\0" L"\0" L"(2)\0" L"\0"
+-  L"(3)\0" L"\0" L"(4)\0" L"\0" L"(5)\0" L"\0" L"(6)\0" L"\0" L"(7)\0" L"\0"
+-  L"(8)\0" L"\0" L"(9)\0" L"\0" L"(10)\0" L"\0" L"(11)\0" L"\0" L"(12)\0"
+-  L"\0" L"(13)\0" L"\0" L"(14)\0" L"\0" L"(15)\0" L"\0" L"(16)\0" L"\0"
+-  L"(17)\0" L"\0" L"(18)\0" L"\0" L"(19)\0" L"\0" L"(20)\0" L"\0" L"(1)\0"
+-  L"\0" L"(2)\0" L"\0" L"(3)\0" L"\0" L"(4)\0" L"\0" L"(5)\0" L"\0" L"(6)\0"
+-  L"\0" L"(7)\0" L"\0" L"(8)\0" L"\0" L"(9)\0" L"\0" L"(10)\0" L"\0" L"(11)\0"
+-  L"\0" L"(12)\0" L"\0" L"(13)\0" L"\0" L"(14)\0" L"\0" L"(15)\0" L"\0"
+-  L"(16)\0" L"\0" L"(17)\0" L"\0" L"(18)\0" L"\0" L"(19)\0" L"\0" L"(20)\0"
+-  L"\0" L"1.\0" L"\0" L"2.\0" L"\0" L"3.\0" L"\0" L"4.\0" L"\0" L"5.\0" L"\0"
+-  L"6.\0" L"\0" L"7.\0" L"\0" L"8.\0" L"\0" L"9.\0" L"\0" L"10.\0" L"\0"
+-  L"11.\0" L"\0" L"12.\0" L"\0" L"13.\0" L"\0" L"14.\0" L"\0" L"15.\0" L"\0"
+-  L"16.\0" L"\0" L"17.\0" L"\0" L"18.\0" L"\0" L"19.\0" L"\0" L"20.\0" L"\0"
+-  L"(a)\0" L"\0" L"(b)\0" L"\0" L"(c)\0" L"\0" L"(d)\0" L"\0" L"(e)\0" L"\0"
+-  L"(f)\0" L"\0" L"(g)\0" L"\0" L"(h)\0" L"\0" L"(i)\0" L"\0" L"(j)\0" L"\0"
+-  L"(k)\0" L"\0" L"(l)\0" L"\0" L"(m)\0" L"\0" L"(n)\0" L"\0" L"(o)\0" L"\0"
+-  L"(p)\0" L"\0" L"(q)\0" L"\0" L"(r)\0" L"\0" L"(s)\0" L"\0" L"(t)\0" L"\0"
+-  L"(u)\0" L"\0" L"(v)\0" L"\0" L"(w)\0" L"\0" L"(x)\0" L"\0" L"(y)\0" L"\0"
+-  L"(z)\0" L"\0" L"(A)\0" L"\0" L"(B)\0" L"\0" L"(C)\0" L"\0" L"(D)\0" L"\0"
+-  L"(E)\0" L"\0" L"(F)\0" L"\0" L"(G)\0" L"\0" L"(H)\0" L"\0" L"(I)\0" L"\0"
+-  L"(J)\0" L"\0" L"(K)\0" L"\0" L"(L)\0" L"\0" L"(M)\0" L"\0" L"(N)\0" L"\0"
+-  L"(O)\0" L"\0" L"(P)\0" L"\0" L"(Q)\0" L"\0" L"(R)\0" L"\0" L"(S)\0" L"\0"
+-  L"(T)\0" L"\0" L"(U)\0" L"\0" L"(V)\0" L"\0" L"(W)\0" L"\0" L"(X)\0" L"\0"
+-  L"(Y)\0" L"\0" L"(Z)\0" L"\0" L"(a)\0" L"\0" L"(b)\0" L"\0" L"(c)\0" L"\0"
+-  L"(d)\0" L"\0" L"(e)\0" L"\0" L"(f)\0" L"\0" L"(g)\0" L"\0" L"(h)\0" L"\0"
+-  L"(i)\0" L"\0" L"(j)\0" L"\0" L"(k)\0" L"\0" L"(l)\0" L"\0" L"(m)\0" L"\0"
+-  L"(n)\0" L"\0" L"(o)\0" L"\0" L"(p)\0" L"\0" L"(q)\0" L"\0" L"(r)\0" L"\0"
+-  L"(s)\0" L"\0" L"(t)\0" L"\0" L"(u)\0" L"\0" L"(v)\0" L"\0" L"(w)\0" L"\0"
+-  L"(x)\0" L"\0" L"(y)\0" L"\0" L"(z)\0" L"\0" L"(0)\0" L"\0" L"-\0" L"\0"
+-  L"|\0" L"\0" L"+\0" L"\0" L"+\0" L"\0" L"+\0" L"\0" L"+\0" L"\0" L"+\0"
+-  L"\0" L"+\0" L"\0" L"+\0" L"\0" L"+\0" L"\0" L"+\0" L"\0" L"o\0" L"\0"
+-  L"::=\0" L"\0" L"==\0" L"\0" L"===\0" L"\0" L" \0" L"\0" L"=\0" L"\0"
+-  L"(21)\0" L"\0" L"(22)\0" L"\0" L"(23)\0" L"\0" L"(24)\0" L"\0" L"(25)\0"
+-  L"\0" L"(26)\0" L"\0" L"(27)\0" L"\0" L"(28)\0" L"\0" L"(29)\0" L"\0"
+-  L"(30)\0" L"\0" L"(31)\0" L"\0" L"(32)\0" L"\0" L"(33)\0" L"\0" L"(34)\0"
+-  L"\0" L"(35)\0" L"\0" L"(36)\0" L"\0" L"(37)\0" L"\0" L"(38)\0" L"\0"
+-  L"(39)\0" L"\0" L"(40)\0" L"\0" L"(41)\0" L"\0" L"(42)\0" L"\0" L"(43)\0"
+-  L"\0" L"(44)\0" L"\0" L"(45)\0" L"\0" L"(46)\0" L"\0" L"(47)\0" L"\0"
+-  L"(48)\0" L"\0" L"(49)\0" L"\0" L"(50)\0" L"\0" L"hPa\0" L"\0" L"da\0" L"\0"
+-  L"AU\0" L"\0" L"bar\0" L"\0" L"oV\0" L"\0" L"pc\0" L"\0" L"pA\0" L"\0"
++  L"\0" L"\0" L"\0" L"Rs\0" L"\0" L"EUR\0" L"\0" L"INR\0" L"\0" L"a/c\0" L"\0"
++  L"a/s\0" L"\0" L"C\0" L"\0" L"c/o\0" L"\0" L"c/u\0" L"\0" L"g\0" L"\0"
++  L"H\0" L"\0" L"H\0" L"\0" L"H\0" L"\0" L"h\0" L"\0" L"I\0" L"\0" L"I\0"
++  L"\0" L"L\0" L"\0" L"l\0" L"\0" L"N\0" L"\0" L"No\0" L"\0" L"P\0" L"\0"
++  L"Q\0" L"\0" L"R\0" L"\0" L"R\0" L"\0" L"R\0" L"\0" L"TEL\0" L"\0" L"(TM)\0"
++  L"\0" L"Z\0" L"\0" L"Ohm\0" L"\0" L"Z\0" L"\0" L"B\0" L"\0" L"C\0" L"\0"
++  L"e\0" L"\0" L"e\0" L"\0" L"E\0" L"\0" L"F\0" L"\0" L"M\0" L"\0" L"o\0"
++  L"\0" L"i\0" L"\0" L"D\0" L"\0" L"d\0" L"\0" L"e\0" L"\0" L"i\0" L"\0"
++  L"j\0" L"\0" L" 1/3 \0" L"\0" L" 2/3 \0" L"\0" L" 1/5 \0" L"\0" L" 2/5 \0"
++  L"\0" L" 3/5 \0" L"\0" L" 4/5 \0" L"\0" L" 1/6 \0" L"\0" L" 5/6 \0" L"\0"
++  L" 1/8 \0" L"\0" L" 3/8 \0" L"\0" L" 5/8 \0" L"\0" L" 7/8 \0" L"\0" L" 1/\0"
++  L"\0" L"I\0" L"\0" L"II\0" L"\0" L"III\0" L"\0" L"IV\0" L"\0" L"V\0" L"\0"
++  L"VI\0" L"\0" L"VII\0" L"\0" L"VIII\0" L"\0" L"IX\0" L"\0" L"X\0" L"\0"
++  L"XI\0" L"\0" L"XII\0" L"\0" L"L\0" L"\0" L"C\0" L"\0" L"D\0" L"\0" L"M\0"
++  L"\0" L"i\0" L"\0" L"ii\0" L"\0" L"iii\0" L"\0" L"iv\0" L"\0" L"v\0" L"\0"
++  L"vi\0" L"\0" L"vii\0" L"\0" L"viii\0" L"\0" L"ix\0" L"\0" L"x\0" L"\0"
++  L"xi\0" L"\0" L"xii\0" L"\0" L"l\0" L"\0" L"c\0" L"\0" L"d\0" L"\0" L"m\0"
++  L"\0" L"<-\0" L"\0" L"->\0" L"\0" L"<->\0" L"\0" L"<=\0" L"\0" L"=>\0" L"\0"
++  L"<=>\0" L"\0" L"-\0" L"\0" L"/\0" L"\0" L"\\\0" L"\0" L"*\0" L"\0" L"|\0"
++  L"\0" L":\0" L"\0" L"~\0" L"\0" L"<=\0" L"\0" L">=\0" L"\0" L"<<\0" L"\0"
++  L">>\0" L"\0" L"<<<\0" L"\0" L">>>\0" L"\0" L"NUL\0" L"\0" L"SOH\0" L"\0"
++  L"STX\0" L"\0" L"ETX\0" L"\0" L"EOT\0" L"\0" L"ENQ\0" L"\0" L"ACK\0" L"\0"
++  L"BEL\0" L"\0" L"BS\0" L"\0" L"HT\0" L"\0" L"LF\0" L"\0" L"VT\0" L"\0"
++  L"FF\0" L"\0" L"CR\0" L"\0" L"SO\0" L"\0" L"SI\0" L"\0" L"DLE\0" L"\0"
++  L"DC1\0" L"\0" L"DC2\0" L"\0" L"DC3\0" L"\0" L"DC4\0" L"\0" L"NAK\0" L"\0"
++  L"SYN\0" L"\0" L"ETB\0" L"\0" L"CAN\0" L"\0" L"EM\0" L"\0" L"SUB\0" L"\0"
++  L"ESC\0" L"\0" L"FS\0" L"\0" L"GS\0" L"\0" L"RS\0" L"\0" L"US\0" L"\0"
++  L"SP\0" L"\0" L"DEL\0" L"\0" L"_\0" L"\0" L"NL\0" L"\0" L"(1)\0" L"\0"
++  L"(2)\0" L"\0" L"(3)\0" L"\0" L"(4)\0" L"\0" L"(5)\0" L"\0" L"(6)\0" L"\0"
++  L"(7)\0" L"\0" L"(8)\0" L"\0" L"(9)\0" L"\0" L"(10)\0" L"\0" L"(11)\0" L"\0"
++  L"(12)\0" L"\0" L"(13)\0" L"\0" L"(14)\0" L"\0" L"(15)\0" L"\0" L"(16)\0"
++  L"\0" L"(17)\0" L"\0" L"(18)\0" L"\0" L"(19)\0" L"\0" L"(20)\0" L"\0"
++  L"(1)\0" L"\0" L"(2)\0" L"\0" L"(3)\0" L"\0" L"(4)\0" L"\0" L"(5)\0" L"\0"
++  L"(6)\0" L"\0" L"(7)\0" L"\0" L"(8)\0" L"\0" L"(9)\0" L"\0" L"(10)\0" L"\0"
++  L"(11)\0" L"\0" L"(12)\0" L"\0" L"(13)\0" L"\0" L"(14)\0" L"\0" L"(15)\0"
++  L"\0" L"(16)\0" L"\0" L"(17)\0" L"\0" L"(18)\0" L"\0" L"(19)\0" L"\0"
++  L"(20)\0" L"\0" L"1.\0" L"\0" L"2.\0" L"\0" L"3.\0" L"\0" L"4.\0" L"\0"
++  L"5.\0" L"\0" L"6.\0" L"\0" L"7.\0" L"\0" L"8.\0" L"\0" L"9.\0" L"\0"
++  L"10.\0" L"\0" L"11.\0" L"\0" L"12.\0" L"\0" L"13.\0" L"\0" L"14.\0" L"\0"
++  L"15.\0" L"\0" L"16.\0" L"\0" L"17.\0" L"\0" L"18.\0" L"\0" L"19.\0" L"\0"
++  L"20.\0" L"\0" L"(a)\0" L"\0" L"(b)\0" L"\0" L"(c)\0" L"\0" L"(d)\0" L"\0"
++  L"(e)\0" L"\0" L"(f)\0" L"\0" L"(g)\0" L"\0" L"(h)\0" L"\0" L"(i)\0" L"\0"
++  L"(j)\0" L"\0" L"(k)\0" L"\0" L"(l)\0" L"\0" L"(m)\0" L"\0" L"(n)\0" L"\0"
++  L"(o)\0" L"\0" L"(p)\0" L"\0" L"(q)\0" L"\0" L"(r)\0" L"\0" L"(s)\0" L"\0"
++  L"(t)\0" L"\0" L"(u)\0" L"\0" L"(v)\0" L"\0" L"(w)\0" L"\0" L"(x)\0" L"\0"
++  L"(y)\0" L"\0" L"(z)\0" L"\0" L"(A)\0" L"\0" L"(B)\0" L"\0" L"(C)\0" L"\0"
++  L"(D)\0" L"\0" L"(E)\0" L"\0" L"(F)\0" L"\0" L"(G)\0" L"\0" L"(H)\0" L"\0"
++  L"(I)\0" L"\0" L"(J)\0" L"\0" L"(K)\0" L"\0" L"(L)\0" L"\0" L"(M)\0" L"\0"
++  L"(N)\0" L"\0" L"(O)\0" L"\0" L"(P)\0" L"\0" L"(Q)\0" L"\0" L"(R)\0" L"\0"
++  L"(S)\0" L"\0" L"(T)\0" L"\0" L"(U)\0" L"\0" L"(V)\0" L"\0" L"(W)\0" L"\0"
++  L"(X)\0" L"\0" L"(Y)\0" L"\0" L"(Z)\0" L"\0" L"(a)\0" L"\0" L"(b)\0" L"\0"
++  L"(c)\0" L"\0" L"(d)\0" L"\0" L"(e)\0" L"\0" L"(f)\0" L"\0" L"(g)\0" L"\0"
++  L"(h)\0" L"\0" L"(i)\0" L"\0" L"(j)\0" L"\0" L"(k)\0" L"\0" L"(l)\0" L"\0"
++  L"(m)\0" L"\0" L"(n)\0" L"\0" L"(o)\0" L"\0" L"(p)\0" L"\0" L"(q)\0" L"\0"
++  L"(r)\0" L"\0" L"(s)\0" L"\0" L"(t)\0" L"\0" L"(u)\0" L"\0" L"(v)\0" L"\0"
++  L"(w)\0" L"\0" L"(x)\0" L"\0" L"(y)\0" L"\0" L"(z)\0" L"\0" L"(0)\0" L"\0"
++  L"-\0" L"\0" L"|\0" L"\0" L"+\0" L"\0" L"+\0" L"\0" L"+\0" L"\0" L"+\0"
++  L"\0" L"+\0" L"\0" L"+\0" L"\0" L"+\0" L"\0" L"+\0" L"\0" L"+\0" L"\0"
++  L"o\0" L"\0" L"::=\0" L"\0" L"==\0" L"\0" L"===\0" L"\0" L" \0" L"\0" L"=\0"
++  L"\0" L"(21)\0" L"\0" L"(22)\0" L"\0" L"(23)\0" L"\0" L"(24)\0" L"\0"
++  L"(25)\0" L"\0" L"(26)\0" L"\0" L"(27)\0" L"\0" L"(28)\0" L"\0" L"(29)\0"
++  L"\0" L"(30)\0" L"\0" L"(31)\0" L"\0" L"(32)\0" L"\0" L"(33)\0" L"\0"
++  L"(34)\0" L"\0" L"(35)\0" L"\0" L"(36)\0" L"\0" L"(37)\0" L"\0" L"(38)\0"
++  L"\0" L"(39)\0" L"\0" L"(40)\0" L"\0" L"(41)\0" L"\0" L"(42)\0" L"\0"
++  L"(43)\0" L"\0" L"(44)\0" L"\0" L"(45)\0" L"\0" L"(46)\0" L"\0" L"(47)\0"
++  L"\0" L"(48)\0" L"\0" L"(49)\0" L"\0" L"(50)\0" L"\0" L"hPa\0" L"\0" L"da\0"
++  L"\0" L"AU\0" L"\0" L"bar\0" L"\0" L"oV\0" L"\0" L"pc\0" L"\0" L"pA\0" L"\0"
+   L"nA\0" L"\0" L"uA\0" L"\0" L"mA\0" L"\0" L"kA\0" L"\0" L"KB\0" L"\0"
+   L"MB\0" L"\0" L"GB\0" L"\0" L"cal\0" L"\0" L"kcal\0" L"\0" L"pF\0" L"\0"
+   L"nF\0" L"\0" L"uF\0" L"\0" L"ug\0" L"\0" L"mg\0" L"\0" L"kg\0" L"\0"
+Index: glibc-2.12-2-gc4ccff1/locale/C-translit.h.in
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/locale/C-translit.h.in
++++ glibc-2.12-2-gc4ccff1/locale/C-translit.h.in
+@@ -105,6 +105,7 @@
+ "\x2063"	""	/* <U2063> INVISIBLE SEPARATOR */
+ "\x20a8"	"Rs"	/* <U20A8> RUPEE SIGN */
+ "\x20ac"	"EUR"	/* <U20AC> EURO SIGN */
++"\x20b9"	"INR"	/* <U20B9> INDIAN RUPEE SIGN */
+ "\x2100"	"a/c"	/* <U2100> ACCOUNT OF */
+ "\x2101"	"a/s"	/* <U2101> ADDRESSED TO THE SUBJECT */
+ "\x2102"	"C"	/* <U2102> DOUBLE-STRUCK CAPITAL C */
+Index: glibc-2.12-2-gc4ccff1/localedata/charmaps/UTF-8
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/charmaps/UTF-8
++++ glibc-2.12-2-gc4ccff1/localedata/charmaps/UTF-8
+@@ -1312,6 +1312,10 @@ CHARMAP
+ <U0521>     /xd4/xa1     CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK
+ <U0522>     /xd4/xa2     CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK
+ <U0523>     /xd4/xa3     CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK
++<U0524>     /xd4/xa4     CYRILLIC CAPITAL LETTER PE WITH DESCENDER
++<U0525>     /xd4/xa5     CYRILLIC SMALL LETTER PE WITH DESCENDER
++<U0526>     /xd4/xa6     CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER
++<U0527>     /xd4/xa7     CYRILLIC SMALL LETTER SHHA WITH DESCENDER
+ <U0531>     /xd4/xb1     ARMENIAN CAPITAL LETTER AYB
+ <U0532>     /xd4/xb2     ARMENIAN CAPITAL LETTER BEN
+ <U0533>     /xd4/xb3     ARMENIAN CAPITAL LETTER GIM
+@@ -1513,6 +1517,7 @@ CHARMAP
+ <U061B>     /xd8/x9b     ARABIC SEMICOLON
+ <U061E>     /xd8/x9e     ARABIC TRIPLE DOT PUNCTUATION MARK
+ <U061F>     /xd8/x9f     ARABIC QUESTION MARK
++<U0620>     /xd8/xa0     ARABIC LETTER KASHMIRI YEH
+ <U0621>     /xd8/xa1     ARABIC LETTER HAMZA
+ <U0622>     /xd8/xa2     ARABIC LETTER ALEF WITH MADDA ABOVE
+ <U0623>     /xd8/xa3     ARABIC LETTER ALEF WITH HAMZA ABOVE
+@@ -1575,6 +1580,7 @@ CHARMAP
+ <U065C>     /xd9/x9c     ARABIC VOWEL SIGN DOT BELOW
+ <U065D>     /xd9/x9d     ARABIC REVERSED DAMMA
+ <U065E>     /xd9/x9e     ARABIC FATHA WITH TWO DOTS
++<U065F>     /xd9/x9f     ARABIC WAVY HAMZA BELOW
+ <U0660>     /xd9/xa0     ARABIC-INDIC DIGIT ZERO
+ <U0661>     /xd9/xa1     ARABIC-INDIC DIGIT ONE
+ <U0662>     /xd9/xa2     ARABIC-INDIC DIGIT TWO
+@@ -1969,6 +1975,97 @@ CHARMAP
+ <U07F8>     /xdf/xb8     NKO COMMA
+ <U07F9>     /xdf/xb9     NKO EXCLAMATION MARK
+ <U07FA>     /xdf/xba     NKO LAJANYALAN
++<U0800>     /xe0/xa0/x80 SAMARITAN LETTER ALAF
++<U0801>     /xe0/xa0/x81 SAMARITAN LETTER BIT
++<U0802>     /xe0/xa0/x82 SAMARITAN LETTER GAMAN
++<U0803>     /xe0/xa0/x83 SAMARITAN LETTER DALAT
++<U0804>     /xe0/xa0/x84 SAMARITAN LETTER IY
++<U0805>     /xe0/xa0/x85 SAMARITAN LETTER BAA
++<U0806>     /xe0/xa0/x86 SAMARITAN LETTER ZEN
++<U0807>     /xe0/xa0/x87 SAMARITAN LETTER IT
++<U0808>     /xe0/xa0/x88 SAMARITAN LETTER TIT
++<U0809>     /xe0/xa0/x89 SAMARITAN LETTER YUT
++<U080A>     /xe0/xa0/x8a SAMARITAN LETTER KAAF
++<U080B>     /xe0/xa0/x8b SAMARITAN LETTER LABAT
++<U080C>     /xe0/xa0/x8c SAMARITAN LETTER MIM
++<U080D>     /xe0/xa0/x8d SAMARITAN LETTER NUN
++<U080E>     /xe0/xa0/x8e SAMARITAN LETTER SINGAAT
++<U080F>     /xe0/xa0/x8f SAMARITAN LETTER IN
++<U0810>     /xe0/xa0/x90 SAMARITAN LETTER FI
++<U0811>     /xe0/xa0/x91 SAMARITAN LETTER TSAADIY
++<U0812>     /xe0/xa0/x92 SAMARITAN LETTER QUF
++<U0813>     /xe0/xa0/x93 SAMARITAN LETTER RISH
++<U0814>     /xe0/xa0/x94 SAMARITAN LETTER SHAN
++<U0815>     /xe0/xa0/x95 SAMARITAN LETTER TAAF
++<U0816>     /xe0/xa0/x96 SAMARITAN MARK IN
++<U0817>     /xe0/xa0/x97 SAMARITAN MARK IN-ALAF
++<U0818>     /xe0/xa0/x98 SAMARITAN MARK OCCLUSION
++<U0819>     /xe0/xa0/x99 SAMARITAN MARK DAGESH
++<U081A>     /xe0/xa0/x9a SAMARITAN MODIFIER LETTER EPENTHETIC YUT
++<U081B>     /xe0/xa0/x9b SAMARITAN MARK EPENTHETIC YUT
++<U081C>     /xe0/xa0/x9c SAMARITAN VOWEL SIGN LONG E
++<U081D>     /xe0/xa0/x9d SAMARITAN VOWEL SIGN E
++<U081E>     /xe0/xa0/x9e SAMARITAN VOWEL SIGN OVERLONG AA
++<U081F>     /xe0/xa0/x9f SAMARITAN VOWEL SIGN LONG AA
++<U0820>     /xe0/xa0/xa0 SAMARITAN VOWEL SIGN AA
++<U0821>     /xe0/xa0/xa1 SAMARITAN VOWEL SIGN OVERLONG A
++<U0822>     /xe0/xa0/xa2 SAMARITAN VOWEL SIGN LONG A
++<U0823>     /xe0/xa0/xa3 SAMARITAN VOWEL SIGN A
++<U0824>     /xe0/xa0/xa4 SAMARITAN MODIFIER LETTER SHORT A
++<U0825>     /xe0/xa0/xa5 SAMARITAN VOWEL SIGN SHORT A
++<U0826>     /xe0/xa0/xa6 SAMARITAN VOWEL SIGN LONG U
++<U0827>     /xe0/xa0/xa7 SAMARITAN VOWEL SIGN U
++<U0828>     /xe0/xa0/xa8 SAMARITAN MODIFIER LETTER I
++<U0829>     /xe0/xa0/xa9 SAMARITAN VOWEL SIGN LONG I
++<U082A>     /xe0/xa0/xaa SAMARITAN VOWEL SIGN I
++<U082B>     /xe0/xa0/xab SAMARITAN VOWEL SIGN O
++<U082C>     /xe0/xa0/xac SAMARITAN VOWEL SIGN SUKUN
++<U082D>     /xe0/xa0/xad SAMARITAN MARK NEQUDAA
++<U0830>     /xe0/xa0/xb0 SAMARITAN PUNCTUATION NEQUDAA
++<U0831>     /xe0/xa0/xb1 SAMARITAN PUNCTUATION AFSAAQ
++<U0832>     /xe0/xa0/xb2 SAMARITAN PUNCTUATION ANGED
++<U0833>     /xe0/xa0/xb3 SAMARITAN PUNCTUATION BAU
++<U0834>     /xe0/xa0/xb4 SAMARITAN PUNCTUATION ATMAAU
++<U0835>     /xe0/xa0/xb5 SAMARITAN PUNCTUATION SHIYYAALAA
++<U0836>     /xe0/xa0/xb6 SAMARITAN ABBREVIATION MARK
++<U0837>     /xe0/xa0/xb7 SAMARITAN PUNCTUATION MELODIC QITSA
++<U0838>     /xe0/xa0/xb8 SAMARITAN PUNCTUATION ZIQAA
++<U0839>     /xe0/xa0/xb9 SAMARITAN PUNCTUATION QITSA
++<U083A>     /xe0/xa0/xba SAMARITAN PUNCTUATION ZAEF
++<U083B>     /xe0/xa0/xbb SAMARITAN PUNCTUATION TURU
++<U083C>     /xe0/xa0/xbc SAMARITAN PUNCTUATION ARKAANU
++<U083D>     /xe0/xa0/xbd SAMARITAN PUNCTUATION SOF MASHFAAT
++<U083E>     /xe0/xa0/xbe SAMARITAN PUNCTUATION ANNAAU
++<U0840>     /xe0/xa1/x80 MANDAIC LETTER HALQA
++<U0841>     /xe0/xa1/x81 MANDAIC LETTER AB
++<U0842>     /xe0/xa1/x82 MANDAIC LETTER AG
++<U0843>     /xe0/xa1/x83 MANDAIC LETTER AD
++<U0844>     /xe0/xa1/x84 MANDAIC LETTER AH
++<U0845>     /xe0/xa1/x85 MANDAIC LETTER USHENNA
++<U0846>     /xe0/xa1/x86 MANDAIC LETTER AZ
++<U0847>     /xe0/xa1/x87 MANDAIC LETTER IT
++<U0848>     /xe0/xa1/x88 MANDAIC LETTER ATT
++<U0849>     /xe0/xa1/x89 MANDAIC LETTER AKSA
++<U084A>     /xe0/xa1/x8a MANDAIC LETTER AK
++<U084B>     /xe0/xa1/x8b MANDAIC LETTER AL
++<U084C>     /xe0/xa1/x8c MANDAIC LETTER AM
++<U084D>     /xe0/xa1/x8d MANDAIC LETTER AN
++<U084E>     /xe0/xa1/x8e MANDAIC LETTER AS
++<U084F>     /xe0/xa1/x8f MANDAIC LETTER IN
++<U0850>     /xe0/xa1/x90 MANDAIC LETTER AP
++<U0851>     /xe0/xa1/x91 MANDAIC LETTER ASZ
++<U0852>     /xe0/xa1/x92 MANDAIC LETTER AQ
++<U0853>     /xe0/xa1/x93 MANDAIC LETTER AR
++<U0854>     /xe0/xa1/x94 MANDAIC LETTER ASH
++<U0855>     /xe0/xa1/x95 MANDAIC LETTER AT
++<U0856>     /xe0/xa1/x96 MANDAIC LETTER DUSHENNA
++<U0857>     /xe0/xa1/x97 MANDAIC LETTER KAD
++<U0858>     /xe0/xa1/x98 MANDAIC LETTER AIN
++<U0859>     /xe0/xa1/x99 MANDAIC AFFRICATION MARK
++<U085A>     /xe0/xa1/x9a MANDAIC VOCALIZATION MARK
++<U085B>     /xe0/xa1/x9b MANDAIC GEMINATION MARK
++<U085E>     /xe0/xa1/x9e MANDAIC PUNCTUATION
++<U0900>     /xe0/xa4/x80 DEVANAGARI SIGN INVERTED CANDRABINDU
+ <U0901>     /xe0/xa4/x81 DEVANAGARI SIGN CANDRABINDU
+ <U0902>     /xe0/xa4/x82 DEVANAGARI SIGN ANUSVARA
+ <U0903>     /xe0/xa4/x83 DEVANAGARI SIGN VISARGA
+@@ -2026,6 +2123,8 @@ CHARMAP
+ <U0937>     /xe0/xa4/xb7 DEVANAGARI LETTER SSA
+ <U0938>     /xe0/xa4/xb8 DEVANAGARI LETTER SA
+ <U0939>     /xe0/xa4/xb9 DEVANAGARI LETTER HA
++<U093A>     /xe0/xa4/xba DEVANAGARI VOWEL SIGN OE
++<U093B>     /xe0/xa4/xbb DEVANAGARI VOWEL SIGN OOE
+ <U093C>     /xe0/xa4/xbc DEVANAGARI SIGN NUKTA
+ <U093D>     /xe0/xa4/xbd DEVANAGARI SIGN AVAGRAHA
+ <U093E>     /xe0/xa4/xbe DEVANAGARI VOWEL SIGN AA
+@@ -2044,11 +2143,16 @@ CHARMAP
+ <U094B>     /xe0/xa5/x8b DEVANAGARI VOWEL SIGN O
+ <U094C>     /xe0/xa5/x8c DEVANAGARI VOWEL SIGN AU
+ <U094D>     /xe0/xa5/x8d DEVANAGARI SIGN VIRAMA
++<U094E>     /xe0/xa5/x8e DEVANAGARI VOWEL SIGN PRISHTHAMATRA E
++<U094F>     /xe0/xa5/x8f DEVANAGARI VOWEL SIGN AW
+ <U0950>     /xe0/xa5/x90 DEVANAGARI OM
+ <U0951>     /xe0/xa5/x91 DEVANAGARI STRESS SIGN UDATTA
+ <U0952>     /xe0/xa5/x92 DEVANAGARI STRESS SIGN ANUDATTA
+ <U0953>     /xe0/xa5/x93 DEVANAGARI GRAVE ACCENT
+ <U0954>     /xe0/xa5/x94 DEVANAGARI ACUTE ACCENT
++<U0955>     /xe0/xa5/x95 DEVANAGARI VOWEL SIGN CANDRA LONG E
++<U0956>     /xe0/xa5/x96 DEVANAGARI VOWEL SIGN UE
++<U0957>     /xe0/xa5/x97 DEVANAGARI VOWEL SIGN UUE
+ <U0958>     /xe0/xa5/x98 DEVANAGARI LETTER QA
+ <U0959>     /xe0/xa5/x99 DEVANAGARI LETTER KHHA
+ <U095A>     /xe0/xa5/x9a DEVANAGARI LETTER GHHA
+@@ -2076,6 +2180,13 @@ CHARMAP
+ <U0970>     /xe0/xa5/xb0 DEVANAGARI ABBREVIATION SIGN
+ <U0971>     /xe0/xa5/xb1 DEVANAGARI SIGN HIGH SPACING DOT
+ <U0972>     /xe0/xa5/xb2 DEVANAGARI LETTER CANDRA A
++<U0973>     /xe0/xa5/xb3 DEVANAGARI LETTER OE
++<U0974>     /xe0/xa5/xb4 DEVANAGARI LETTER OOE
++<U0975>     /xe0/xa5/xb5 DEVANAGARI LETTER AW
++<U0976>     /xe0/xa5/xb6 DEVANAGARI LETTER UE
++<U0977>     /xe0/xa5/xb7 DEVANAGARI LETTER UUE
++<U0979>     /xe0/xa5/xb9 DEVANAGARI LETTER ZHA
++<U097A>     /xe0/xa5/xba DEVANAGARI LETTER HEAVY YA
+ <U097B>     /xe0/xa5/xbb DEVANAGARI LETTER GGA
+ <U097C>     /xe0/xa5/xbc DEVANAGARI LETTER JJA
+ <U097D>     /xe0/xa5/xbd DEVANAGARI LETTER GLOTTAL STOP
+@@ -2172,6 +2283,7 @@ CHARMAP
+ <U09F8>     /xe0/xa7/xb8 BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR
+ <U09F9>     /xe0/xa7/xb9 BENGALI CURRENCY DENOMINATOR SIXTEEN
+ <U09FA>     /xe0/xa7/xba BENGALI ISSHAR
++<U09FB>     /xe0/xa7/xbb BENGALI GANDA MARK
+ <U0A01>     /xe0/xa8/x81 GURMUKHI SIGN ADAK BINDI
+ <U0A02>     /xe0/xa8/x82 GURMUKHI SIGN BINDI
+ <U0A03>     /xe0/xa8/x83 GURMUKHI SIGN VISARGA
+@@ -2418,6 +2530,12 @@ CHARMAP
+ <U0B6F>     /xe0/xad/xaf ORIYA DIGIT NINE
+ <U0B70>     /xe0/xad/xb0 ORIYA ISSHAR
+ <U0B71>     /xe0/xad/xb1 ORIYA LETTER WA
++<U0B72>     /xe0/xad/xb2 ORIYA FRACTION ONE QUARTER
++<U0B73>     /xe0/xad/xb3 ORIYA FRACTION ONE HALF
++<U0B74>     /xe0/xad/xb4 ORIYA FRACTION THREE QUARTERS
++<U0B75>     /xe0/xad/xb5 ORIYA FRACTION ONE SIXTEENTH
++<U0B76>     /xe0/xad/xb6 ORIYA FRACTION ONE EIGHTH
++<U0B77>     /xe0/xad/xb7 ORIYA FRACTION THREE SIXTEENTHS
+ <U0B82>     /xe0/xae/x82 TAMIL SIGN ANUSVARA
+ <U0B83>     /xe0/xae/x83 TAMIL SIGN VISARGA
+ <U0B85>     /xe0/xae/x85 TAMIL LETTER A
+@@ -2705,6 +2823,7 @@ CHARMAP
+ <U0D26>     /xe0/xb4/xa6 MALAYALAM LETTER DA
+ <U0D27>     /xe0/xb4/xa7 MALAYALAM LETTER DHA
+ <U0D28>     /xe0/xb4/xa8 MALAYALAM LETTER NA
++<U0D29>     /xe0/xb4/xa9 MALAYALAM LETTER NNNA
+ <U0D2A>     /xe0/xb4/xaa MALAYALAM LETTER PA
+ <U0D2B>     /xe0/xb4/xab MALAYALAM LETTER PHA
+ <U0D2C>     /xe0/xb4/xac MALAYALAM LETTER BA
+@@ -2721,6 +2840,7 @@ CHARMAP
+ <U0D37>     /xe0/xb4/xb7 MALAYALAM LETTER SSA
+ <U0D38>     /xe0/xb4/xb8 MALAYALAM LETTER SA
+ <U0D39>     /xe0/xb4/xb9 MALAYALAM LETTER HA
++<U0D3A>     /xe0/xb4/xba MALAYALAM LETTER TTTA
+ <U0D3D>     /xe0/xb4/xbd MALAYALAM SIGN AVAGRAHA
+ <U0D3E>     /xe0/xb4/xbe MALAYALAM VOWEL SIGN AA
+ <U0D3F>     /xe0/xb4/xbf MALAYALAM VOWEL SIGN I
+@@ -2736,6 +2856,7 @@ CHARMAP
+ <U0D4B>     /xe0/xb5/x8b MALAYALAM VOWEL SIGN OO
+ <U0D4C>     /xe0/xb5/x8c MALAYALAM VOWEL SIGN AU
+ <U0D4D>     /xe0/xb5/x8d MALAYALAM SIGN VIRAMA
++<U0D4E>     /xe0/xb5/x8e MALAYALAM LETTER DOT REPH
+ <U0D57>     /xe0/xb5/x97 MALAYALAM AU LENGTH MARK
+ <U0D60>     /xe0/xb5/xa0 MALAYALAM LETTER VOCALIC RR
+ <U0D61>     /xe0/xb5/xa1 MALAYALAM LETTER VOCALIC LL
+@@ -3131,6 +3252,10 @@ CHARMAP
+ <U0F89>     /xe0/xbe/x89 TIBETAN SIGN MCHU CAN
+ <U0F8A>     /xe0/xbe/x8a TIBETAN SIGN GRU CAN RGYINGS
+ <U0F8B>     /xe0/xbe/x8b TIBETAN SIGN GRU MED RGYINGS
++<U0F8C>     /xe0/xbe/x8c TIBETAN SIGN INVERTED MCHU CAN
++<U0F8D>     /xe0/xbe/x8d TIBETAN SUBJOINED SIGN LCE TSA CAN
++<U0F8E>     /xe0/xbe/x8e TIBETAN SUBJOINED SIGN MCHU CAN
++<U0F8F>     /xe0/xbe/x8f TIBETAN SUBJOINED SIGN INVERTED MCHU CAN
+ <U0F90>     /xe0/xbe/x90 TIBETAN SUBJOINED LETTER KA
+ <U0F91>     /xe0/xbe/x91 TIBETAN SUBJOINED LETTER KHA
+ <U0F92>     /xe0/xbe/x92 TIBETAN SUBJOINED LETTER GA
+@@ -3197,6 +3322,12 @@ CHARMAP
+ <U0FD2>     /xe0/xbf/x92 TIBETAN MARK NYIS TSHEG
+ <U0FD3>     /xe0/xbf/x93 TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA
+ <U0FD4>     /xe0/xbf/x94 TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA
++<U0FD5>     /xe0/xbf/x95 RIGHT-FACING SVASTI SIGN
++<U0FD6>     /xe0/xbf/x96 LEFT-FACING SVASTI SIGN
++<U0FD7>     /xe0/xbf/x97 RIGHT-FACING SVASTI SIGN WITH DOTS
++<U0FD8>     /xe0/xbf/x98 LEFT-FACING SVASTI SIGN WITH DOTS
++<U0FD9>     /xe0/xbf/x99 TIBETAN MARK LEADING MCHAN RTAGS
++<U0FDA>     /xe0/xbf/x9a TIBETAN MARK TRAILING MCHAN RTAGS
+ <U1000>     /xe1/x80/x80 MYANMAR LETTER KA
+ <U1001>     /xe1/x80/x81 MYANMAR LETTER KHA
+ <U1002>     /xe1/x80/x82 MYANMAR LETTER GA
+@@ -3351,6 +3482,10 @@ CHARMAP
+ <U1097>     /xe1/x82/x97 MYANMAR SHAN DIGIT SEVEN
+ <U1098>     /xe1/x82/x98 MYANMAR SHAN DIGIT EIGHT
+ <U1099>     /xe1/x82/x99 MYANMAR SHAN DIGIT NINE
++<U109A>     /xe1/x82/x9a MYANMAR SIGN KHAMTI TONE-1
++<U109B>     /xe1/x82/x9b MYANMAR SIGN KHAMTI TONE-3
++<U109C>     /xe1/x82/x9c MYANMAR VOWEL SIGN AITON A
++<U109D>     /xe1/x82/x9d MYANMAR VOWEL SIGN AITON AI
+ <U109E>     /xe1/x82/x9e MYANMAR SYMBOL SHAN ONE
+ <U109F>     /xe1/x82/x9f MYANMAR SYMBOL SHAN EXCLAMATION
+ <U10A0>     /xe1/x82/xa0 GEORGIAN CAPITAL LETTER AN
+@@ -3526,6 +3661,11 @@ CHARMAP
+ <U1157>     /xe1/x85/x97 HANGUL CHOSEONG KAPYEOUNPHIEUPH
+ <U1158>     /xe1/x85/x98 HANGUL CHOSEONG SSANGHIEUH
+ <U1159>     /xe1/x85/x99 HANGUL CHOSEONG YEORINHIEUH
++<U115A>     /xe1/x85/x9a HANGUL CHOSEONG KIYEOK-TIKEUT
++<U115B>     /xe1/x85/x9b HANGUL CHOSEONG NIEUN-SIOS
++<U115C>     /xe1/x85/x9c HANGUL CHOSEONG NIEUN-CIEUC
++<U115D>     /xe1/x85/x9d HANGUL CHOSEONG NIEUN-HIEUH
++<U115E>     /xe1/x85/x9e HANGUL CHOSEONG TIKEUT-RIEUL
+ <U115F>     /xe1/x85/x9f HANGUL CHOSEONG FILLER
+ <U1160>     /xe1/x85/xa0 HANGUL JUNGSEONG FILLER
+ <U1161>     /xe1/x85/xa1 HANGUL JUNGSEONG A
+@@ -3594,6 +3734,11 @@ CHARMAP
+ <U11A0>     /xe1/x86/xa0 HANGUL JUNGSEONG ARAEA-U
+ <U11A1>     /xe1/x86/xa1 HANGUL JUNGSEONG ARAEA-I
+ <U11A2>     /xe1/x86/xa2 HANGUL JUNGSEONG SSANGARAEA
++<U11A3>     /xe1/x86/xa3 HANGUL JUNGSEONG A-EU
++<U11A4>     /xe1/x86/xa4 HANGUL JUNGSEONG YA-U
++<U11A5>     /xe1/x86/xa5 HANGUL JUNGSEONG YEO-YA
++<U11A6>     /xe1/x86/xa6 HANGUL JUNGSEONG O-YA
++<U11A7>     /xe1/x86/xa7 HANGUL JUNGSEONG O-YAE
+ <U11A8>     /xe1/x86/xa8 HANGUL JONGSEONG KIYEOK
+ <U11A9>     /xe1/x86/xa9 HANGUL JONGSEONG SSANGKIYEOK
+ <U11AA>     /xe1/x86/xaa HANGUL JONGSEONG KIYEOK-SIOS
+@@ -3676,6 +3821,12 @@ CHARMAP
+ <U11F7>     /xe1/x87/xb7 HANGUL JONGSEONG HIEUH-MIEUM
+ <U11F8>     /xe1/x87/xb8 HANGUL JONGSEONG HIEUH-PIEUP
+ <U11F9>     /xe1/x87/xb9 HANGUL JONGSEONG YEORINHIEUH
++<U11FA>     /xe1/x87/xba HANGUL JONGSEONG KIYEOK-NIEUN
++<U11FB>     /xe1/x87/xbb HANGUL JONGSEONG KIYEOK-PIEUP
++<U11FC>     /xe1/x87/xbc HANGUL JONGSEONG KIYEOK-CHIEUCH
++<U11FD>     /xe1/x87/xbd HANGUL JONGSEONG KIYEOK-KHIEUKH
++<U11FE>     /xe1/x87/xbe HANGUL JONGSEONG KIYEOK-HIEUH
++<U11FF>     /xe1/x87/xbf HANGUL JONGSEONG SSANGNIEUN
+ <U1200>     /xe1/x88/x80 ETHIOPIC SYLLABLE HA
+ <U1201>     /xe1/x88/x81 ETHIOPIC SYLLABLE HU
+ <U1202>     /xe1/x88/x82 ETHIOPIC SYLLABLE HI
+@@ -4002,6 +4153,8 @@ CHARMAP
+ <U1358>     /xe1/x8d/x98 ETHIOPIC SYLLABLE RYA
+ <U1359>     /xe1/x8d/x99 ETHIOPIC SYLLABLE MYA
+ <U135A>     /xe1/x8d/x9a ETHIOPIC SYLLABLE FYA
++<U135D>     /xe1/x8d/x9d ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK
++<U135E>     /xe1/x8d/x9e ETHIOPIC COMBINING VOWEL LENGTH MARK
+ <U135F>     /xe1/x8d/x9f ETHIOPIC COMBINING GEMINATION MARK
+ <U1360>     /xe1/x8d/xa0 ETHIOPIC SECTION MARK
+ <U1361>     /xe1/x8d/xa1 ETHIOPIC WORDSPACE
+@@ -4143,6 +4296,7 @@ CHARMAP
+ <U13F2>     /xe1/x8f/xb2 CHEROKEE LETTER YO
+ <U13F3>     /xe1/x8f/xb3 CHEROKEE LETTER YU
+ <U13F4>     /xe1/x8f/xb4 CHEROKEE LETTER YV
++<U1400>     /xe1/x90/x80 CANADIAN SYLLABICS HYPHEN
+ <U1401>     /xe1/x90/x81 CANADIAN SYLLABICS E
+ <U1402>     /xe1/x90/x82 CANADIAN SYLLABICS AAI
+ <U1403>     /xe1/x90/x83 CANADIAN SYLLABICS I
+@@ -4773,6 +4927,15 @@ CHARMAP
+ <U1674>     /xe1/x99/xb4 CANADIAN SYLLABICS NNGOO
+ <U1675>     /xe1/x99/xb5 CANADIAN SYLLABICS NNGA
+ <U1676>     /xe1/x99/xb6 CANADIAN SYLLABICS NNGAA
++<U1677>     /xe1/x99/xb7 CANADIAN SYLLABICS WOODS-CREE THWEE
++<U1678>     /xe1/x99/xb8 CANADIAN SYLLABICS WOODS-CREE THWI
++<U1679>     /xe1/x99/xb9 CANADIAN SYLLABICS WOODS-CREE THWII
++<U167A>     /xe1/x99/xba CANADIAN SYLLABICS WOODS-CREE THWO
++<U167B>     /xe1/x99/xbb CANADIAN SYLLABICS WOODS-CREE THWOO
++<U167C>     /xe1/x99/xbc CANADIAN SYLLABICS WOODS-CREE THWA
++<U167D>     /xe1/x99/xbd CANADIAN SYLLABICS WOODS-CREE THWAA
++<U167E>     /xe1/x99/xbe CANADIAN SYLLABICS WOODS-CREE FINAL TH
++<U167F>     /xe1/x99/xbf CANADIAN SYLLABICS BLACKFOOT W
+ <U1680>     /xe1/x9a/x80 OGHAM SPACE MARK
+ <U1681>     /xe1/x9a/x81 OGHAM LETTER BEITH
+ <U1682>     /xe1/x9a/x82 OGHAM LETTER LUIS
+@@ -5234,6 +5397,76 @@ CHARMAP
+ <U18A8>     /xe1/xa2/xa8 MONGOLIAN LETTER MANCHU ALI GALI BHA
+ <U18A9>     /xe1/xa2/xa9 MONGOLIAN LETTER ALI GALI DAGALGA
+ <U18AA>     /xe1/xa2/xaa MONGOLIAN LETTER MANCHU ALI GALI LHA
++<U18B0>     /xe1/xa2/xb0 CANADIAN SYLLABICS OY
++<U18B1>     /xe1/xa2/xb1 CANADIAN SYLLABICS AY
++<U18B2>     /xe1/xa2/xb2 CANADIAN SYLLABICS AAY
++<U18B3>     /xe1/xa2/xb3 CANADIAN SYLLABICS WAY
++<U18B4>     /xe1/xa2/xb4 CANADIAN SYLLABICS POY
++<U18B5>     /xe1/xa2/xb5 CANADIAN SYLLABICS PAY
++<U18B6>     /xe1/xa2/xb6 CANADIAN SYLLABICS PWOY
++<U18B7>     /xe1/xa2/xb7 CANADIAN SYLLABICS TAY
++<U18B8>     /xe1/xa2/xb8 CANADIAN SYLLABICS KAY
++<U18B9>     /xe1/xa2/xb9 CANADIAN SYLLABICS KWAY
++<U18BA>     /xe1/xa2/xba CANADIAN SYLLABICS MAY
++<U18BB>     /xe1/xa2/xbb CANADIAN SYLLABICS NOY
++<U18BC>     /xe1/xa2/xbc CANADIAN SYLLABICS NAY
++<U18BD>     /xe1/xa2/xbd CANADIAN SYLLABICS LAY
++<U18BE>     /xe1/xa2/xbe CANADIAN SYLLABICS SOY
++<U18BF>     /xe1/xa2/xbf CANADIAN SYLLABICS SAY
++<U18C0>     /xe1/xa3/x80 CANADIAN SYLLABICS SHOY
++<U18C1>     /xe1/xa3/x81 CANADIAN SYLLABICS SHAY
++<U18C2>     /xe1/xa3/x82 CANADIAN SYLLABICS SHWOY
++<U18C3>     /xe1/xa3/x83 CANADIAN SYLLABICS YOY
++<U18C4>     /xe1/xa3/x84 CANADIAN SYLLABICS YAY
++<U18C5>     /xe1/xa3/x85 CANADIAN SYLLABICS RAY
++<U18C6>     /xe1/xa3/x86 CANADIAN SYLLABICS NWI
++<U18C7>     /xe1/xa3/x87 CANADIAN SYLLABICS OJIBWAY NWI
++<U18C8>     /xe1/xa3/x88 CANADIAN SYLLABICS NWII
++<U18C9>     /xe1/xa3/x89 CANADIAN SYLLABICS OJIBWAY NWII
++<U18CA>     /xe1/xa3/x8a CANADIAN SYLLABICS NWO
++<U18CB>     /xe1/xa3/x8b CANADIAN SYLLABICS OJIBWAY NWO
++<U18CC>     /xe1/xa3/x8c CANADIAN SYLLABICS NWOO
++<U18CD>     /xe1/xa3/x8d CANADIAN SYLLABICS OJIBWAY NWOO
++<U18CE>     /xe1/xa3/x8e CANADIAN SYLLABICS RWEE
++<U18CF>     /xe1/xa3/x8f CANADIAN SYLLABICS RWI
++<U18D0>     /xe1/xa3/x90 CANADIAN SYLLABICS RWII
++<U18D1>     /xe1/xa3/x91 CANADIAN SYLLABICS RWO
++<U18D2>     /xe1/xa3/x92 CANADIAN SYLLABICS RWOO
++<U18D3>     /xe1/xa3/x93 CANADIAN SYLLABICS RWA
++<U18D4>     /xe1/xa3/x94 CANADIAN SYLLABICS OJIBWAY P
++<U18D5>     /xe1/xa3/x95 CANADIAN SYLLABICS OJIBWAY T
++<U18D6>     /xe1/xa3/x96 CANADIAN SYLLABICS OJIBWAY K
++<U18D7>     /xe1/xa3/x97 CANADIAN SYLLABICS OJIBWAY C
++<U18D8>     /xe1/xa3/x98 CANADIAN SYLLABICS OJIBWAY M
++<U18D9>     /xe1/xa3/x99 CANADIAN SYLLABICS OJIBWAY N
++<U18DA>     /xe1/xa3/x9a CANADIAN SYLLABICS OJIBWAY S
++<U18DB>     /xe1/xa3/x9b CANADIAN SYLLABICS OJIBWAY SH
++<U18DC>     /xe1/xa3/x9c CANADIAN SYLLABICS EASTERN W
++<U18DD>     /xe1/xa3/x9d CANADIAN SYLLABICS WESTERN W
++<U18DE>     /xe1/xa3/x9e CANADIAN SYLLABICS FINAL SMALL RING
++<U18DF>     /xe1/xa3/x9f CANADIAN SYLLABICS FINAL RAISED DOT
++<U18E0>     /xe1/xa3/xa0 CANADIAN SYLLABICS R-CREE RWE
++<U18E1>     /xe1/xa3/xa1 CANADIAN SYLLABICS WEST-CREE LOO
++<U18E2>     /xe1/xa3/xa2 CANADIAN SYLLABICS WEST-CREE LAA
++<U18E3>     /xe1/xa3/xa3 CANADIAN SYLLABICS THWE
++<U18E4>     /xe1/xa3/xa4 CANADIAN SYLLABICS THWA
++<U18E5>     /xe1/xa3/xa5 CANADIAN SYLLABICS TTHWE
++<U18E6>     /xe1/xa3/xa6 CANADIAN SYLLABICS TTHOO
++<U18E7>     /xe1/xa3/xa7 CANADIAN SYLLABICS TTHAA
++<U18E8>     /xe1/xa3/xa8 CANADIAN SYLLABICS TLHWE
++<U18E9>     /xe1/xa3/xa9 CANADIAN SYLLABICS TLHOO
++<U18EA>     /xe1/xa3/xaa CANADIAN SYLLABICS SAYISI SHWE
++<U18EB>     /xe1/xa3/xab CANADIAN SYLLABICS SAYISI SHOO
++<U18EC>     /xe1/xa3/xac CANADIAN SYLLABICS SAYISI HOO
++<U18ED>     /xe1/xa3/xad CANADIAN SYLLABICS CARRIER GWU
++<U18EE>     /xe1/xa3/xae CANADIAN SYLLABICS CARRIER DENE GEE
++<U18EF>     /xe1/xa3/xaf CANADIAN SYLLABICS CARRIER GAA
++<U18F0>     /xe1/xa3/xb0 CANADIAN SYLLABICS CARRIER GWA
++<U18F1>     /xe1/xa3/xb1 CANADIAN SYLLABICS SAYISI JUU
++<U18F2>     /xe1/xa3/xb2 CANADIAN SYLLABICS CARRIER JWA
++<U18F3>     /xe1/xa3/xb3 CANADIAN SYLLABICS BEAVER DENE L
++<U18F4>     /xe1/xa3/xb4 CANADIAN SYLLABICS BEAVER DENE R
++<U18F5>     /xe1/xa3/xb5 CANADIAN SYLLABICS CARRIER DENTAL S
+ <U1900>     /xe1/xa4/x80 LIMBU VOWEL-CARRIER LETTER
+ <U1901>     /xe1/xa4/x81 LIMBU LETTER KA
+ <U1902>     /xe1/xa4/x82 LIMBU LETTER KHA
+@@ -5377,6 +5610,8 @@ CHARMAP
+ <U19A7>     /xe1/xa6/xa7 NEW TAI LUE LETTER HIGH XVA
+ <U19A8>     /xe1/xa6/xa8 NEW TAI LUE LETTER LOW KVA
+ <U19A9>     /xe1/xa6/xa9 NEW TAI LUE LETTER LOW XVA
++<U19AA>     /xe1/xa6/xaa NEW TAI LUE LETTER HIGH SUA
++<U19AB>     /xe1/xa6/xab NEW TAI LUE LETTER LOW SUA
+ <U19B0>     /xe1/xa6/xb0 NEW TAI LUE VOWEL SIGN VOWEL SHORTENER
+ <U19B1>     /xe1/xa6/xb1 NEW TAI LUE VOWEL SIGN AA
+ <U19B2>     /xe1/xa6/xb2 NEW TAI LUE VOWEL SIGN II
+@@ -5413,6 +5648,7 @@ CHARMAP
+ <U19D7>     /xe1/xa7/x97 NEW TAI LUE DIGIT SEVEN
+ <U19D8>     /xe1/xa7/x98 NEW TAI LUE DIGIT EIGHT
+ <U19D9>     /xe1/xa7/x99 NEW TAI LUE DIGIT NINE
++<U19DA>     /xe1/xa7/x9a NEW TAI LUE THAM DIGIT ONE
+ <U19DE>     /xe1/xa7/x9e NEW TAI LUE SIGN LAE
+ <U19DF>     /xe1/xa7/x9f NEW TAI LUE SIGN LAEV
+ <U19E0>     /xe1/xa7/xa0 KHMER SYMBOL PATHAMASAT
+@@ -5477,6 +5713,133 @@ CHARMAP
+ <U1A1B>     /xe1/xa8/x9b BUGINESE VOWEL SIGN AE
+ <U1A1E>     /xe1/xa8/x9e BUGINESE PALLAWA
+ <U1A1F>     /xe1/xa8/x9f BUGINESE END OF SECTION
++<U1A20>     /xe1/xa8/xa0 TAI THAM LETTER HIGH KA
++<U1A21>     /xe1/xa8/xa1 TAI THAM LETTER HIGH KHA
++<U1A22>     /xe1/xa8/xa2 TAI THAM LETTER HIGH KXA
++<U1A23>     /xe1/xa8/xa3 TAI THAM LETTER LOW KA
++<U1A24>     /xe1/xa8/xa4 TAI THAM LETTER LOW KXA
++<U1A25>     /xe1/xa8/xa5 TAI THAM LETTER LOW KHA
++<U1A26>     /xe1/xa8/xa6 TAI THAM LETTER NGA
++<U1A27>     /xe1/xa8/xa7 TAI THAM LETTER HIGH CA
++<U1A28>     /xe1/xa8/xa8 TAI THAM LETTER HIGH CHA
++<U1A29>     /xe1/xa8/xa9 TAI THAM LETTER LOW CA
++<U1A2A>     /xe1/xa8/xaa TAI THAM LETTER LOW SA
++<U1A2B>     /xe1/xa8/xab TAI THAM LETTER LOW CHA
++<U1A2C>     /xe1/xa8/xac TAI THAM LETTER NYA
++<U1A2D>     /xe1/xa8/xad TAI THAM LETTER RATA
++<U1A2E>     /xe1/xa8/xae TAI THAM LETTER HIGH RATHA
++<U1A2F>     /xe1/xa8/xaf TAI THAM LETTER DA
++<U1A30>     /xe1/xa8/xb0 TAI THAM LETTER LOW RATHA
++<U1A31>     /xe1/xa8/xb1 TAI THAM LETTER RANA
++<U1A32>     /xe1/xa8/xb2 TAI THAM LETTER HIGH TA
++<U1A33>     /xe1/xa8/xb3 TAI THAM LETTER HIGH THA
++<U1A34>     /xe1/xa8/xb4 TAI THAM LETTER LOW TA
++<U1A35>     /xe1/xa8/xb5 TAI THAM LETTER LOW THA
++<U1A36>     /xe1/xa8/xb6 TAI THAM LETTER NA
++<U1A37>     /xe1/xa8/xb7 TAI THAM LETTER BA
++<U1A38>     /xe1/xa8/xb8 TAI THAM LETTER HIGH PA
++<U1A39>     /xe1/xa8/xb9 TAI THAM LETTER HIGH PHA
++<U1A3A>     /xe1/xa8/xba TAI THAM LETTER HIGH FA
++<U1A3B>     /xe1/xa8/xbb TAI THAM LETTER LOW PA
++<U1A3C>     /xe1/xa8/xbc TAI THAM LETTER LOW FA
++<U1A3D>     /xe1/xa8/xbd TAI THAM LETTER LOW PHA
++<U1A3E>     /xe1/xa8/xbe TAI THAM LETTER MA
++<U1A3F>     /xe1/xa8/xbf TAI THAM LETTER LOW YA
++<U1A40>     /xe1/xa9/x80 TAI THAM LETTER HIGH YA
++<U1A41>     /xe1/xa9/x81 TAI THAM LETTER RA
++<U1A42>     /xe1/xa9/x82 TAI THAM LETTER RUE
++<U1A43>     /xe1/xa9/x83 TAI THAM LETTER LA
++<U1A44>     /xe1/xa9/x84 TAI THAM LETTER LUE
++<U1A45>     /xe1/xa9/x85 TAI THAM LETTER WA
++<U1A46>     /xe1/xa9/x86 TAI THAM LETTER HIGH SHA
++<U1A47>     /xe1/xa9/x87 TAI THAM LETTER HIGH SSA
++<U1A48>     /xe1/xa9/x88 TAI THAM LETTER HIGH SA
++<U1A49>     /xe1/xa9/x89 TAI THAM LETTER HIGH HA
++<U1A4A>     /xe1/xa9/x8a TAI THAM LETTER LLA
++<U1A4B>     /xe1/xa9/x8b TAI THAM LETTER A
++<U1A4C>     /xe1/xa9/x8c TAI THAM LETTER LOW HA
++<U1A4D>     /xe1/xa9/x8d TAI THAM LETTER I
++<U1A4E>     /xe1/xa9/x8e TAI THAM LETTER II
++<U1A4F>     /xe1/xa9/x8f TAI THAM LETTER U
++<U1A50>     /xe1/xa9/x90 TAI THAM LETTER UU
++<U1A51>     /xe1/xa9/x91 TAI THAM LETTER EE
++<U1A52>     /xe1/xa9/x92 TAI THAM LETTER OO
++<U1A53>     /xe1/xa9/x93 TAI THAM LETTER LAE
++<U1A54>     /xe1/xa9/x94 TAI THAM LETTER GREAT SA
++<U1A55>     /xe1/xa9/x95 TAI THAM CONSONANT SIGN MEDIAL RA
++<U1A56>     /xe1/xa9/x96 TAI THAM CONSONANT SIGN MEDIAL LA
++<U1A57>     /xe1/xa9/x97 TAI THAM CONSONANT SIGN LA TANG LAI
++<U1A58>     /xe1/xa9/x98 TAI THAM SIGN MAI KANG LAI
++<U1A59>     /xe1/xa9/x99 TAI THAM CONSONANT SIGN FINAL NGA
++<U1A5A>     /xe1/xa9/x9a TAI THAM CONSONANT SIGN LOW PA
++<U1A5B>     /xe1/xa9/x9b TAI THAM CONSONANT SIGN HIGH RATHA OR LOW PA
++<U1A5C>     /xe1/xa9/x9c TAI THAM CONSONANT SIGN MA
++<U1A5D>     /xe1/xa9/x9d TAI THAM CONSONANT SIGN BA
++<U1A5E>     /xe1/xa9/x9e TAI THAM CONSONANT SIGN SA
++<U1A60>     /xe1/xa9/xa0 TAI THAM SIGN SAKOT
++<U1A61>     /xe1/xa9/xa1 TAI THAM VOWEL SIGN A
++<U1A62>     /xe1/xa9/xa2 TAI THAM VOWEL SIGN MAI SAT
++<U1A63>     /xe1/xa9/xa3 TAI THAM VOWEL SIGN AA
++<U1A64>     /xe1/xa9/xa4 TAI THAM VOWEL SIGN TALL AA
++<U1A65>     /xe1/xa9/xa5 TAI THAM VOWEL SIGN I
++<U1A66>     /xe1/xa9/xa6 TAI THAM VOWEL SIGN II
++<U1A67>     /xe1/xa9/xa7 TAI THAM VOWEL SIGN UE
++<U1A68>     /xe1/xa9/xa8 TAI THAM VOWEL SIGN UUE
++<U1A69>     /xe1/xa9/xa9 TAI THAM VOWEL SIGN U
++<U1A6A>     /xe1/xa9/xaa TAI THAM VOWEL SIGN UU
++<U1A6B>     /xe1/xa9/xab TAI THAM VOWEL SIGN O
++<U1A6C>     /xe1/xa9/xac TAI THAM VOWEL SIGN OA BELOW
++<U1A6D>     /xe1/xa9/xad TAI THAM VOWEL SIGN OY
++<U1A6E>     /xe1/xa9/xae TAI THAM VOWEL SIGN E
++<U1A6F>     /xe1/xa9/xaf TAI THAM VOWEL SIGN AE
++<U1A70>     /xe1/xa9/xb0 TAI THAM VOWEL SIGN OO
++<U1A71>     /xe1/xa9/xb1 TAI THAM VOWEL SIGN AI
++<U1A72>     /xe1/xa9/xb2 TAI THAM VOWEL SIGN THAM AI
++<U1A73>     /xe1/xa9/xb3 TAI THAM VOWEL SIGN OA ABOVE
++<U1A74>     /xe1/xa9/xb4 TAI THAM SIGN MAI KANG
++<U1A75>     /xe1/xa9/xb5 TAI THAM SIGN TONE-1
++<U1A76>     /xe1/xa9/xb6 TAI THAM SIGN TONE-2
++<U1A77>     /xe1/xa9/xb7 TAI THAM SIGN KHUEN TONE-3
++<U1A78>     /xe1/xa9/xb8 TAI THAM SIGN KHUEN TONE-4
++<U1A79>     /xe1/xa9/xb9 TAI THAM SIGN KHUEN TONE-5
++<U1A7A>     /xe1/xa9/xba TAI THAM SIGN RA HAAM
++<U1A7B>     /xe1/xa9/xbb TAI THAM SIGN MAI SAM
++<U1A7C>     /xe1/xa9/xbc TAI THAM SIGN KHUEN-LUE KARAN
++<U1A7F>     /xe1/xa9/xbf TAI THAM COMBINING CRYPTOGRAMMIC DOT
++<U1A80>     /xe1/xaa/x80 TAI THAM HORA DIGIT ZERO
++<U1A81>     /xe1/xaa/x81 TAI THAM HORA DIGIT ONE
++<U1A82>     /xe1/xaa/x82 TAI THAM HORA DIGIT TWO
++<U1A83>     /xe1/xaa/x83 TAI THAM HORA DIGIT THREE
++<U1A84>     /xe1/xaa/x84 TAI THAM HORA DIGIT FOUR
++<U1A85>     /xe1/xaa/x85 TAI THAM HORA DIGIT FIVE
++<U1A86>     /xe1/xaa/x86 TAI THAM HORA DIGIT SIX
++<U1A87>     /xe1/xaa/x87 TAI THAM HORA DIGIT SEVEN
++<U1A88>     /xe1/xaa/x88 TAI THAM HORA DIGIT EIGHT
++<U1A89>     /xe1/xaa/x89 TAI THAM HORA DIGIT NINE
++<U1A90>     /xe1/xaa/x90 TAI THAM THAM DIGIT ZERO
++<U1A91>     /xe1/xaa/x91 TAI THAM THAM DIGIT ONE
++<U1A92>     /xe1/xaa/x92 TAI THAM THAM DIGIT TWO
++<U1A93>     /xe1/xaa/x93 TAI THAM THAM DIGIT THREE
++<U1A94>     /xe1/xaa/x94 TAI THAM THAM DIGIT FOUR
++<U1A95>     /xe1/xaa/x95 TAI THAM THAM DIGIT FIVE
++<U1A96>     /xe1/xaa/x96 TAI THAM THAM DIGIT SIX
++<U1A97>     /xe1/xaa/x97 TAI THAM THAM DIGIT SEVEN
++<U1A98>     /xe1/xaa/x98 TAI THAM THAM DIGIT EIGHT
++<U1A99>     /xe1/xaa/x99 TAI THAM THAM DIGIT NINE
++<U1AA0>     /xe1/xaa/xa0 TAI THAM SIGN WIANG
++<U1AA1>     /xe1/xaa/xa1 TAI THAM SIGN WIANGWAAK
++<U1AA2>     /xe1/xaa/xa2 TAI THAM SIGN SAWAN
++<U1AA3>     /xe1/xaa/xa3 TAI THAM SIGN KEOW
++<U1AA4>     /xe1/xaa/xa4 TAI THAM SIGN HOY
++<U1AA5>     /xe1/xaa/xa5 TAI THAM SIGN DOKMAI
++<U1AA6>     /xe1/xaa/xa6 TAI THAM SIGN REVERSED ROTATED RANA
++<U1AA7>     /xe1/xaa/xa7 TAI THAM SIGN MAI YAMOK
++<U1AA8>     /xe1/xaa/xa8 TAI THAM SIGN KAAN
++<U1AA9>     /xe1/xaa/xa9 TAI THAM SIGN KAANKUU
++<U1AAA>     /xe1/xaa/xaa TAI THAM SIGN SATKAAN
++<U1AAB>     /xe1/xaa/xab TAI THAM SIGN SATKAANKUU
++<U1AAC>     /xe1/xaa/xac TAI THAM SIGN HANG
++<U1AAD>     /xe1/xaa/xad TAI THAM SIGN CAANG
+ <U1B00>     /xe1/xac/x80 BALINESE SIGN ULU RICEM
+ <U1B01>     /xe1/xac/x81 BALINESE SIGN ULU CANDRA
+ <U1B02>     /xe1/xac/x82 BALINESE SIGN CECEK
+@@ -5653,6 +6016,62 @@ CHARMAP
+ <U1BB7>     /xe1/xae/xb7 SUNDANESE DIGIT SEVEN
+ <U1BB8>     /xe1/xae/xb8 SUNDANESE DIGIT EIGHT
+ <U1BB9>     /xe1/xae/xb9 SUNDANESE DIGIT NINE
++<U1BC0>     /xe1/xaf/x80 BATAK LETTER A
++<U1BC1>     /xe1/xaf/x81 BATAK LETTER SIMALUNGUN A
++<U1BC2>     /xe1/xaf/x82 BATAK LETTER HA
++<U1BC3>     /xe1/xaf/x83 BATAK LETTER SIMALUNGUN HA
++<U1BC4>     /xe1/xaf/x84 BATAK LETTER MANDAILING HA
++<U1BC5>     /xe1/xaf/x85 BATAK LETTER BA
++<U1BC6>     /xe1/xaf/x86 BATAK LETTER KARO BA
++<U1BC7>     /xe1/xaf/x87 BATAK LETTER PA
++<U1BC8>     /xe1/xaf/x88 BATAK LETTER SIMALUNGUN PA
++<U1BC9>     /xe1/xaf/x89 BATAK LETTER NA
++<U1BCA>     /xe1/xaf/x8a BATAK LETTER MANDAILING NA
++<U1BCB>     /xe1/xaf/x8b BATAK LETTER WA
++<U1BCC>     /xe1/xaf/x8c BATAK LETTER SIMALUNGUN WA
++<U1BCD>     /xe1/xaf/x8d BATAK LETTER PAKPAK WA
++<U1BCE>     /xe1/xaf/x8e BATAK LETTER GA
++<U1BCF>     /xe1/xaf/x8f BATAK LETTER SIMALUNGUN GA
++<U1BD0>     /xe1/xaf/x90 BATAK LETTER JA
++<U1BD1>     /xe1/xaf/x91 BATAK LETTER DA
++<U1BD2>     /xe1/xaf/x92 BATAK LETTER RA
++<U1BD3>     /xe1/xaf/x93 BATAK LETTER SIMALUNGUN RA
++<U1BD4>     /xe1/xaf/x94 BATAK LETTER MA
++<U1BD5>     /xe1/xaf/x95 BATAK LETTER SIMALUNGUN MA
++<U1BD6>     /xe1/xaf/x96 BATAK LETTER SOUTHERN TA
++<U1BD7>     /xe1/xaf/x97 BATAK LETTER NORTHERN TA
++<U1BD8>     /xe1/xaf/x98 BATAK LETTER SA
++<U1BD9>     /xe1/xaf/x99 BATAK LETTER SIMALUNGUN SA
++<U1BDA>     /xe1/xaf/x9a BATAK LETTER MANDAILING SA
++<U1BDB>     /xe1/xaf/x9b BATAK LETTER YA
++<U1BDC>     /xe1/xaf/x9c BATAK LETTER SIMALUNGUN YA
++<U1BDD>     /xe1/xaf/x9d BATAK LETTER NGA
++<U1BDE>     /xe1/xaf/x9e BATAK LETTER LA
++<U1BDF>     /xe1/xaf/x9f BATAK LETTER SIMALUNGUN LA
++<U1BE0>     /xe1/xaf/xa0 BATAK LETTER NYA
++<U1BE1>     /xe1/xaf/xa1 BATAK LETTER CA
++<U1BE2>     /xe1/xaf/xa2 BATAK LETTER NDA
++<U1BE3>     /xe1/xaf/xa3 BATAK LETTER MBA
++<U1BE4>     /xe1/xaf/xa4 BATAK LETTER I
++<U1BE5>     /xe1/xaf/xa5 BATAK LETTER U
++<U1BE6>     /xe1/xaf/xa6 BATAK SIGN TOMPI
++<U1BE7>     /xe1/xaf/xa7 BATAK VOWEL SIGN E
++<U1BE8>     /xe1/xaf/xa8 BATAK VOWEL SIGN PAKPAK E
++<U1BE9>     /xe1/xaf/xa9 BATAK VOWEL SIGN EE
++<U1BEA>     /xe1/xaf/xaa BATAK VOWEL SIGN I
++<U1BEB>     /xe1/xaf/xab BATAK VOWEL SIGN KARO I
++<U1BEC>     /xe1/xaf/xac BATAK VOWEL SIGN O
++<U1BED>     /xe1/xaf/xad BATAK VOWEL SIGN KARO O
++<U1BEE>     /xe1/xaf/xae BATAK VOWEL SIGN U
++<U1BEF>     /xe1/xaf/xaf BATAK VOWEL SIGN U FOR SIMALUNGUN SA
++<U1BF0>     /xe1/xaf/xb0 BATAK CONSONANT SIGN NG
++<U1BF1>     /xe1/xaf/xb1 BATAK CONSONANT SIGN H
++<U1BF2>     /xe1/xaf/xb2 BATAK PANGOLAT
++<U1BF3>     /xe1/xaf/xb3 BATAK PANONGONAN
++<U1BFC>     /xe1/xaf/xbc BATAK SYMBOL BINDU NA METEK
++<U1BFD>     /xe1/xaf/xbd BATAK SYMBOL BINDU PINARBORAS
++<U1BFE>     /xe1/xaf/xbe BATAK SYMBOL BINDU JUDUL
++<U1BFF>     /xe1/xaf/xbf BATAK SYMBOL BINDU PANGOLAT
+ <U1C00>     /xe1/xb0/x80 LEPCHA LETTER KA
+ <U1C01>     /xe1/xb0/x81 LEPCHA LETTER KLA
+ <U1C02>     /xe1/xb0/x82 LEPCHA LETTER KHA
+@@ -5775,6 +6194,41 @@ CHARMAP
+ <U1C7D>     /xe1/xb1/xbd OL CHIKI AHAD
+ <U1C7E>     /xe1/xb1/xbe OL CHIKI PUNCTUATION MUCAAD
+ <U1C7F>     /xe1/xb1/xbf OL CHIKI PUNCTUATION DOUBLE MUCAAD
++<U1CD0>     /xe1/xb3/x90 VEDIC TONE KARSHANA
++<U1CD1>     /xe1/xb3/x91 VEDIC TONE SHARA
++<U1CD2>     /xe1/xb3/x92 VEDIC TONE PRENKHA
++<U1CD3>     /xe1/xb3/x93 VEDIC SIGN NIHSHVASA
++<U1CD4>     /xe1/xb3/x94 VEDIC SIGN YAJURVEDIC MIDLINE SVARITA
++<U1CD5>     /xe1/xb3/x95 VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA
++<U1CD6>     /xe1/xb3/x96 VEDIC TONE YAJURVEDIC INDEPENDENT SVARITA
++<U1CD7>     /xe1/xb3/x97 VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA
++<U1CD8>     /xe1/xb3/x98 VEDIC TONE CANDRA BELOW
++<U1CD9>     /xe1/xb3/x99 VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDER
++<U1CDA>     /xe1/xb3/x9a VEDIC TONE DOUBLE SVARITA
++<U1CDB>     /xe1/xb3/x9b VEDIC TONE TRIPLE SVARITA
++<U1CDC>     /xe1/xb3/x9c VEDIC TONE KATHAKA ANUDATTA
++<U1CDD>     /xe1/xb3/x9d VEDIC TONE DOT BELOW
++<U1CDE>     /xe1/xb3/x9e VEDIC TONE TWO DOTS BELOW
++<U1CDF>     /xe1/xb3/x9f VEDIC TONE THREE DOTS BELOW
++<U1CE0>     /xe1/xb3/xa0 VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA
++<U1CE1>     /xe1/xb3/xa1 VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA
++<U1CE2>     /xe1/xb3/xa2 VEDIC SIGN VISARGA SVARITA
++<U1CE3>     /xe1/xb3/xa3 VEDIC SIGN VISARGA UDATTA
++<U1CE4>     /xe1/xb3/xa4 VEDIC SIGN REVERSED VISARGA UDATTA
++<U1CE5>     /xe1/xb3/xa5 VEDIC SIGN VISARGA ANUDATTA
++<U1CE6>     /xe1/xb3/xa6 VEDIC SIGN REVERSED VISARGA ANUDATTA
++<U1CE7>     /xe1/xb3/xa7 VEDIC SIGN VISARGA UDATTA WITH TAIL
++<U1CE8>     /xe1/xb3/xa8 VEDIC SIGN VISARGA ANUDATTA WITH TAIL
++<U1CE9>     /xe1/xb3/xa9 VEDIC SIGN ANUSVARA ANTARGOMUKHA
++<U1CEA>     /xe1/xb3/xaa VEDIC SIGN ANUSVARA BAHIRGOMUKHA
++<U1CEB>     /xe1/xb3/xab VEDIC SIGN ANUSVARA VAMAGOMUKHA
++<U1CEC>     /xe1/xb3/xac VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL
++<U1CED>     /xe1/xb3/xad VEDIC SIGN TIRYAK
++<U1CEE>     /xe1/xb3/xae VEDIC SIGN HEXIFORM LONG ANUSVARA
++<U1CEF>     /xe1/xb3/xaf VEDIC SIGN LONG ANUSVARA
++<U1CF0>     /xe1/xb3/xb0 VEDIC SIGN RTHANG LONG ANUSVARA
++<U1CF1>     /xe1/xb3/xb1 VEDIC SIGN ANUSVARA UBHAYATO MUKHA
++<U1CF2>     /xe1/xb3/xb2 VEDIC SIGN ARDHAVISARGA
+ <U1D00>     /xe1/xb4/x80 LATIN LETTER SMALL CAPITAL A
+ <U1D01>     /xe1/xb4/x81 LATIN LETTER SMALL CAPITAL AE
+ <U1D02>     /xe1/xb4/x82 LATIN SMALL LETTER TURNED AE
+@@ -6006,6 +6460,8 @@ CHARMAP
+ <U1DE4>     /xe1/xb7/xa4 COMBINING LATIN SMALL LETTER S
+ <U1DE5>     /xe1/xb7/xa5 COMBINING LATIN SMALL LETTER LONG S
+ <U1DE6>     /xe1/xb7/xa6 COMBINING LATIN SMALL LETTER Z
++<U1DFC>     /xe1/xb7/xbc COMBINING DOUBLE INVERTED BREVE BELOW
++<U1DFD>     /xe1/xb7/xbd COMBINING ALMOST EQUAL TO BELOW
+ <U1DFE>     /xe1/xb7/xbe COMBINING LEFT ARROWHEAD ABOVE
+ <U1DFF>     /xe1/xb7/xbf COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
+ <U1E00>     /xe1/xb8/x80 LATIN CAPITAL LETTER A WITH RING BELOW
+@@ -6638,6 +7094,14 @@ CHARMAP
+ <U2092>     /xe2/x82/x92 LATIN SUBSCRIPT SMALL LETTER O
+ <U2093>     /xe2/x82/x93 LATIN SUBSCRIPT SMALL LETTER X
+ <U2094>     /xe2/x82/x94 LATIN SUBSCRIPT SMALL LETTER SCHWA
++<U2095>     /xe2/x82/x95 LATIN SUBSCRIPT SMALL LETTER H
++<U2096>     /xe2/x82/x96 LATIN SUBSCRIPT SMALL LETTER K
++<U2097>     /xe2/x82/x97 LATIN SUBSCRIPT SMALL LETTER L
++<U2098>     /xe2/x82/x98 LATIN SUBSCRIPT SMALL LETTER M
++<U2099>     /xe2/x82/x99 LATIN SUBSCRIPT SMALL LETTER N
++<U209A>     /xe2/x82/x9a LATIN SUBSCRIPT SMALL LETTER P
++<U209B>     /xe2/x82/x9b LATIN SUBSCRIPT SMALL LETTER S
++<U209C>     /xe2/x82/x9c LATIN SUBSCRIPT SMALL LETTER T
+ <U20A0>     /xe2/x82/xa0 EURO-CURRENCY SIGN
+ <U20A1>     /xe2/x82/xa1 COLON SIGN
+ <U20A2>     /xe2/x82/xa2 CRUZEIRO SIGN
+@@ -6660,6 +7124,10 @@ CHARMAP
+ <U20B3>     /xe2/x82/xb3 AUSTRAL SIGN
+ <U20B4>     /xe2/x82/xb4 HRYVNIA SIGN
+ <U20B5>     /xe2/x82/xb5 CEDI SIGN
++<U20B6>     /xe2/x82/xb6 LIVRE TOURNOIS SIGN
++<U20B7>     /xe2/x82/xb7 SPESMILO SIGN
++<U20B8>     /xe2/x82/xb8 TENGE SIGN
++<U20B9>     /xe2/x82/xb9 INDIAN RUPEE SIGN
+ <U20D0>     /xe2/x83/x90 COMBINING LEFT HARPOON ABOVE
+ <U20D1>     /xe2/x83/x91 COMBINING RIGHT HARPOON ABOVE
+ <U20D2>     /xe2/x83/x92 COMBINING LONG VERTICAL LINE OVERLAY
+@@ -6773,6 +7241,9 @@ CHARMAP
+ <U214D>     /xe2/x85/x8d AKTIESELSKAB
+ <U214E>     /xe2/x85/x8e TURNED SMALL F
+ <U214F>     /xe2/x85/x8f SYMBOL FOR SAMARITAN SOURCE
++<U2150>     /xe2/x85/x90 VULGAR FRACTION ONE SEVENTH
++<U2151>     /xe2/x85/x91 VULGAR FRACTION ONE NINTH
++<U2152>     /xe2/x85/x92 VULGAR FRACTION ONE TENTH
+ <U2153>     /xe2/x85/x93 VULGAR FRACTION ONE THIRD
+ <U2154>     /xe2/x85/x94 VULGAR FRACTION TWO THIRDS
+ <U2155>     /xe2/x85/x95 VULGAR FRACTION ONE FIFTH
+@@ -6827,6 +7298,7 @@ CHARMAP
+ <U2186>     /xe2/x86/x86 ROMAN NUMERAL FIFTY EARLY FORM
+ <U2187>     /xe2/x86/x87 ROMAN NUMERAL FIFTY THOUSAND
+ <U2188>     /xe2/x86/x88 ROMAN NUMERAL ONE HUNDRED THOUSAND
++<U2189>     /xe2/x86/x89 VULGAR FRACTION ZERO THIRDS
+ <U2190>     /xe2/x86/x90 LEFTWARDS ARROW
+ <U2191>     /xe2/x86/x91 UPWARDS ARROW
+ <U2192>     /xe2/x86/x92 RIGHTWARDS ARROW
+@@ -7427,6 +7899,18 @@ CHARMAP
+ <U23E5>     /xe2/x8f/xa5 FLATNESS
+ <U23E6>     /xe2/x8f/xa6 AC CURRENT
+ <U23E7>     /xe2/x8f/xa7 ELECTRICAL INTERSECTION
++<U23E8>     /xe2/x8f/xa8 DECIMAL EXPONENT SYMBOL
++<U23E9>     /xe2/x8f/xa9 BLACK RIGHT-POINTING DOUBLE TRIANGLE
++<U23EA>     /xe2/x8f/xaa BLACK LEFT-POINTING DOUBLE TRIANGLE
++<U23EB>     /xe2/x8f/xab BLACK UP-POINTING DOUBLE TRIANGLE
++<U23EC>     /xe2/x8f/xac BLACK DOWN-POINTING DOUBLE TRIANGLE
++<U23ED>     /xe2/x8f/xad BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR
++<U23EE>     /xe2/x8f/xae BLACK LEFT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR
++<U23EF>     /xe2/x8f/xaf BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR
++<U23F0>     /xe2/x8f/xb0 ALARM CLOCK
++<U23F1>     /xe2/x8f/xb1 STOPWATCH
++<U23F2>     /xe2/x8f/xb2 TIMER CLOCK
++<U23F3>     /xe2/x8f/xb3 HOURGLASS WITH FLOWING SAND
+ <U2400>     /xe2/x90/x80 SYMBOL FOR NULL
+ <U2401>     /xe2/x90/x81 SYMBOL FOR START OF HEADING
+ <U2402>     /xe2/x90/x82 SYMBOL FOR START OF TEXT
+@@ -8051,6 +8535,8 @@ CHARMAP
+ <U269B>     /xe2/x9a/x9b ATOM SYMBOL
+ <U269C>     /xe2/x9a/x9c FLEUR-DE-LIS
+ <U269D>     /xe2/x9a/x9d OUTLINED WHITE STAR
++<U269E>     /xe2/x9a/x9e THREE LINES CONVERGING RIGHT
++<U269F>     /xe2/x9a/x9f THREE LINES CONVERGING LEFT
+ <U26A0>     /xe2/x9a/xa0 WARNING SIGN
+ <U26A1>     /xe2/x9a/xa1 HIGH VOLTAGE SIGN
+ <U26A2>     /xe2/x9a/xa2 DOUBLED FEMALE SIGN
+@@ -8080,18 +8566,84 @@ CHARMAP
+ <U26BA>     /xe2/x9a/xba SEMISEXTILE
+ <U26BB>     /xe2/x9a/xbb QUINCUNX
+ <U26BC>     /xe2/x9a/xbc SESQUIQUADRATE
++<U26BD>     /xe2/x9a/xbd SOCCER BALL
++<U26BE>     /xe2/x9a/xbe BASEBALL
++<U26BF>     /xe2/x9a/xbf SQUARED KEY
+ <U26C0>     /xe2/x9b/x80 WHITE DRAUGHTS MAN
+ <U26C1>     /xe2/x9b/x81 WHITE DRAUGHTS KING
+ <U26C2>     /xe2/x9b/x82 BLACK DRAUGHTS MAN
+ <U26C3>     /xe2/x9b/x83 BLACK DRAUGHTS KING
++<U26C4>     /xe2/x9b/x84 SNOWMAN WITHOUT SNOW
++<U26C5>     /xe2/x9b/x85 SUN BEHIND CLOUD
++<U26C6>     /xe2/x9b/x86 RAIN
++<U26C7>     /xe2/x9b/x87 BLACK SNOWMAN
++<U26C8>     /xe2/x9b/x88 THUNDER CLOUD AND RAIN
++<U26C9>     /xe2/x9b/x89 TURNED WHITE SHOGI PIECE
++<U26CA>     /xe2/x9b/x8a TURNED BLACK SHOGI PIECE
++<U26CB>     /xe2/x9b/x8b WHITE DIAMOND IN SQUARE
++<U26CC>     /xe2/x9b/x8c CROSSING LANES
++<U26CD>     /xe2/x9b/x8d DISABLED CAR
++<U26CE>     /xe2/x9b/x8e OPHIUCHUS
++<U26CF>     /xe2/x9b/x8f PICK
++<U26D0>     /xe2/x9b/x90 CAR SLIDING
++<U26D1>     /xe2/x9b/x91 HELMET WITH WHITE CROSS
++<U26D2>     /xe2/x9b/x92 CIRCLED CROSSING LANES
++<U26D3>     /xe2/x9b/x93 CHAINS
++<U26D4>     /xe2/x9b/x94 NO ENTRY
++<U26D5>     /xe2/x9b/x95 ALTERNATE ONE-WAY LEFT WAY TRAFFIC
++<U26D6>     /xe2/x9b/x96 BLACK TWO-WAY LEFT WAY TRAFFIC
++<U26D7>     /xe2/x9b/x97 WHITE TWO-WAY LEFT WAY TRAFFIC
++<U26D8>     /xe2/x9b/x98 BLACK LEFT LANE MERGE
++<U26D9>     /xe2/x9b/x99 WHITE LEFT LANE MERGE
++<U26DA>     /xe2/x9b/x9a DRIVE SLOW SIGN
++<U26DB>     /xe2/x9b/x9b HEAVY WHITE DOWN-POINTING TRIANGLE
++<U26DC>     /xe2/x9b/x9c LEFT CLOSED ENTRY
++<U26DD>     /xe2/x9b/x9d SQUARED SALTIRE
++<U26DE>     /xe2/x9b/x9e FALLING DIAGONAL IN WHITE CIRCLE IN BLACK SQUARE
++<U26DF>     /xe2/x9b/x9f BLACK TRUCK
++<U26E0>     /xe2/x9b/xa0 RESTRICTED LEFT ENTRY-1
++<U26E1>     /xe2/x9b/xa1 RESTRICTED LEFT ENTRY-2
++<U26E2>     /xe2/x9b/xa2 ASTRONOMICAL SYMBOL FOR URANUS
++<U26E3>     /xe2/x9b/xa3 HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE
++<U26E4>     /xe2/x9b/xa4 PENTAGRAM
++<U26E5>     /xe2/x9b/xa5 RIGHT-HANDED INTERLACED PENTAGRAM
++<U26E6>     /xe2/x9b/xa6 LEFT-HANDED INTERLACED PENTAGRAM
++<U26E7>     /xe2/x9b/xa7 INVERTED PENTAGRAM
++<U26E8>     /xe2/x9b/xa8 BLACK CROSS ON SHIELD
++<U26E9>     /xe2/x9b/xa9 SHINTO SHRINE
++<U26EA>     /xe2/x9b/xaa CHURCH
++<U26EB>     /xe2/x9b/xab CASTLE
++<U26EC>     /xe2/x9b/xac HISTORIC SITE
++<U26ED>     /xe2/x9b/xad GEAR WITHOUT HUB
++<U26EE>     /xe2/x9b/xae GEAR WITH HANDLES
++<U26EF>     /xe2/x9b/xaf MAP SYMBOL FOR LIGHTHOUSE
++<U26F0>     /xe2/x9b/xb0 MOUNTAIN
++<U26F1>     /xe2/x9b/xb1 UMBRELLA ON GROUND
++<U26F2>     /xe2/x9b/xb2 FOUNTAIN
++<U26F3>     /xe2/x9b/xb3 FLAG IN HOLE
++<U26F4>     /xe2/x9b/xb4 FERRY
++<U26F5>     /xe2/x9b/xb5 SAILBOAT
++<U26F6>     /xe2/x9b/xb6 SQUARE FOUR CORNERS
++<U26F7>     /xe2/x9b/xb7 SKIER
++<U26F8>     /xe2/x9b/xb8 ICE SKATE
++<U26F9>     /xe2/x9b/xb9 PERSON WITH BALL
++<U26FA>     /xe2/x9b/xba TENT
++<U26FB>     /xe2/x9b/xbb JAPANESE BANK SYMBOL
++<U26FC>     /xe2/x9b/xbc HEADSTONE GRAVEYARD SYMBOL
++<U26FD>     /xe2/x9b/xbd FUEL PUMP
++<U26FE>     /xe2/x9b/xbe CUP ON BLACK SQUARE
++<U26FF>     /xe2/x9b/xbf WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE
+ <U2701>     /xe2/x9c/x81 UPPER BLADE SCISSORS
+ <U2702>     /xe2/x9c/x82 BLACK SCISSORS
+ <U2703>     /xe2/x9c/x83 LOWER BLADE SCISSORS
+ <U2704>     /xe2/x9c/x84 WHITE SCISSORS
++<U2705>     /xe2/x9c/x85 WHITE HEAVY CHECK MARK
+ <U2706>     /xe2/x9c/x86 TELEPHONE LOCATION SIGN
+ <U2707>     /xe2/x9c/x87 TAPE DRIVE
+ <U2708>     /xe2/x9c/x88 AIRPLANE
+ <U2709>     /xe2/x9c/x89 ENVELOPE
++<U270A>     /xe2/x9c/x8a RAISED FIST
++<U270B>     /xe2/x9c/x8b RAISED HAND
+ <U270C>     /xe2/x9c/x8c VICTORY HAND
+ <U270D>     /xe2/x9c/x8d WRITING HAND
+ <U270E>     /xe2/x9c/x8e LOWER RIGHT PENCIL
+@@ -8120,6 +8672,7 @@ CHARMAP
+ <U2725>     /xe2/x9c/xa5 FOUR CLUB-SPOKED ASTERISK
+ <U2726>     /xe2/x9c/xa6 BLACK FOUR POINTED STAR
+ <U2727>     /xe2/x9c/xa7 WHITE FOUR POINTED STAR
++<U2728>     /xe2/x9c/xa8 SPARKLES
+ <U2729>     /xe2/x9c/xa9 STRESS OUTLINED WHITE STAR
+ <U272A>     /xe2/x9c/xaa CIRCLED WHITE STAR
+ <U272B>     /xe2/x9c/xab OPEN CENTRE BLACK STAR
+@@ -8155,12 +8708,18 @@ CHARMAP
+ <U2749>     /xe2/x9d/x89 BALLOON-SPOKED ASTERISK
+ <U274A>     /xe2/x9d/x8a EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
+ <U274B>     /xe2/x9d/x8b HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
++<U274C>     /xe2/x9d/x8c CROSS MARK
+ <U274D>     /xe2/x9d/x8d SHADOWED WHITE CIRCLE
++<U274E>     /xe2/x9d/x8e NEGATIVE SQUARED CROSS MARK
+ <U274F>     /xe2/x9d/x8f LOWER RIGHT DROP-SHADOWED WHITE SQUARE
+ <U2750>     /xe2/x9d/x90 UPPER RIGHT DROP-SHADOWED WHITE SQUARE
+ <U2751>     /xe2/x9d/x91 LOWER RIGHT SHADOWED WHITE SQUARE
+ <U2752>     /xe2/x9d/x92 UPPER RIGHT SHADOWED WHITE SQUARE
++<U2753>     /xe2/x9d/x93 BLACK QUESTION MARK ORNAMENT
++<U2754>     /xe2/x9d/x94 WHITE QUESTION MARK ORNAMENT
++<U2755>     /xe2/x9d/x95 WHITE EXCLAMATION MARK ORNAMENT
+ <U2756>     /xe2/x9d/x96 BLACK DIAMOND MINUS WHITE X
++<U2757>     /xe2/x9d/x97 HEAVY EXCLAMATION MARK SYMBOL
+ <U2758>     /xe2/x9d/x98 LIGHT VERTICAL BAR
+ <U2759>     /xe2/x9d/x99 MEDIUM VERTICAL BAR
+ <U275A>     /xe2/x9d/x9a HEAVY VERTICAL BAR
+@@ -8168,6 +8727,8 @@ CHARMAP
+ <U275C>     /xe2/x9d/x9c HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT
+ <U275D>     /xe2/x9d/x9d HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT
+ <U275E>     /xe2/x9d/x9e HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT
++<U275F>     /xe2/x9d/x9f HEAVY LOW SINGLE COMMA QUOTATION MARK ORNAMENT
++<U2760>     /xe2/x9d/xa0 HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT
+ <U2761>     /xe2/x9d/xa1 CURVED STEM PARAGRAPH SIGN ORNAMENT
+ <U2762>     /xe2/x9d/xa2 HEAVY EXCLAMATION MARK ORNAMENT
+ <U2763>     /xe2/x9d/xa3 HEAVY HEART EXCLAMATION MARK ORNAMENT
+@@ -8220,6 +8781,9 @@ CHARMAP
+ <U2792>     /xe2/x9e/x92 DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE
+ <U2793>     /xe2/x9e/x93 DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN
+ <U2794>     /xe2/x9e/x94 HEAVY WIDE-HEADED RIGHTWARDS ARROW
++<U2795>     /xe2/x9e/x95 HEAVY PLUS SIGN
++<U2796>     /xe2/x9e/x96 HEAVY MINUS SIGN
++<U2797>     /xe2/x9e/x97 HEAVY DIVISION SIGN
+ <U2798>     /xe2/x9e/x98 HEAVY SOUTH EAST ARROW
+ <U2799>     /xe2/x9e/x99 HEAVY RIGHTWARDS ARROW
+ <U279A>     /xe2/x9e/x9a HEAVY NORTH EAST ARROW
+@@ -8244,6 +8808,7 @@ CHARMAP
+ <U27AD>     /xe2/x9e/xad HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+ <U27AE>     /xe2/x9e/xae HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+ <U27AF>     /xe2/x9e/xaf NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
++<U27B0>     /xe2/x9e/xb0 CURLY LOOP
+ <U27B1>     /xe2/x9e/xb1 NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
+ <U27B2>     /xe2/x9e/xb2 CIRCLED HEAVY WHITE RIGHTWARDS ARROW
+ <U27B3>     /xe2/x9e/xb3 WHITE-FEATHERED RIGHTWARDS ARROW
+@@ -8258,6 +8823,7 @@ CHARMAP
+ <U27BC>     /xe2/x9e/xbc WEDGE-TAILED RIGHTWARDS ARROW
+ <U27BD>     /xe2/x9e/xbd HEAVY WEDGE-TAILED RIGHTWARDS ARROW
+ <U27BE>     /xe2/x9e/xbe OPEN-OUTLINED RIGHTWARDS ARROW
++<U27BF>     /xe2/x9e/xbf DOUBLE CURLY LOOP
+ <U27C0>     /xe2/x9f/x80 THREE DIMENSIONAL ANGLE
+ <U27C1>     /xe2/x9f/x81 WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE
+ <U27C2>     /xe2/x9f/x82 PERPENDICULAR
+@@ -8270,6 +8836,8 @@ CHARMAP
+ <U27C9>     /xe2/x9f/x89 SUPERSET PRECEDING SOLIDUS
+ <U27CA>     /xe2/x9f/x8a VERTICAL BAR WITH HORIZONTAL STROKE
+ <U27CC>     /xe2/x9f/x8c LONG DIVISION
++<U27CE>     /xe2/x9f/x8e SQUARED LOGICAL AND
++<U27CF>     /xe2/x9f/x8f SQUARED LOGICAL OR
+ <U27D0>     /xe2/x9f/x90 WHITE DIAMOND WITH CENTRED DOT
+ <U27D1>     /xe2/x9f/x91 AND WITH DOT
+ <U27D2>     /xe2/x9f/x92 ELEMENT OF OPENING UPWARDS
+@@ -9168,6 +9736,11 @@ CHARMAP
+ <U2B52>     /xe2/xad/x92 WHITE SMALL STAR
+ <U2B53>     /xe2/xad/x93 BLACK RIGHT-POINTING PENTAGON
+ <U2B54>     /xe2/xad/x94 WHITE RIGHT-POINTING PENTAGON
++<U2B55>     /xe2/xad/x95 HEAVY LARGE CIRCLE
++<U2B56>     /xe2/xad/x96 HEAVY OVAL WITH OVAL INSIDE
++<U2B57>     /xe2/xad/x97 HEAVY CIRCLE WITH CIRCLE INSIDE
++<U2B58>     /xe2/xad/x98 HEAVY CIRCLE
++<U2B59>     /xe2/xad/x99 HEAVY CIRCLED SALTIRE
+ <U2C00>     /xe2/xb0/x80 GLAGOLITIC CAPITAL LETTER AZU
+ <U2C01>     /xe2/xb0/x81 GLAGOLITIC CAPITAL LETTER BUKY
+ <U2C02>     /xe2/xb0/x82 GLAGOLITIC CAPITAL LETTER VEDE
+@@ -9278,6 +9851,7 @@ CHARMAP
+ <U2C6D>     /xe2/xb1/xad LATIN CAPITAL LETTER ALPHA
+ <U2C6E>     /xe2/xb1/xae LATIN CAPITAL LETTER M WITH HOOK
+ <U2C6F>     /xe2/xb1/xaf LATIN CAPITAL LETTER TURNED A
++<U2C70>     /xe2/xb1/xb0 LATIN CAPITAL LETTER TURNED ALPHA
+ <U2C71>     /xe2/xb1/xb1 LATIN SMALL LETTER V WITH RIGHT HOOK
+ <U2C72>     /xe2/xb1/xb2 LATIN CAPITAL LETTER W WITH HOOK
+ <U2C73>     /xe2/xb1/xb3 LATIN SMALL LETTER W WITH HOOK
+@@ -9291,6 +9865,8 @@ CHARMAP
+ <U2C7B>     /xe2/xb1/xbb LATIN LETTER SMALL CAPITAL TURNED E
+ <U2C7C>     /xe2/xb1/xbc LATIN SUBSCRIPT SMALL LETTER J
+ <U2C7D>     /xe2/xb1/xbd MODIFIER LETTER CAPITAL V
++<U2C7E>     /xe2/xb1/xbe LATIN CAPITAL LETTER S WITH SWASH TAIL
++<U2C7F>     /xe2/xb1/xbf LATIN CAPITAL LETTER Z WITH SWASH TAIL
+ <U2C80>     /xe2/xb2/x80 COPTIC CAPITAL LETTER ALFA
+ <U2C81>     /xe2/xb2/x81 COPTIC SMALL LETTER ALFA
+ <U2C82>     /xe2/xb2/x82 COPTIC CAPITAL LETTER VIDA
+@@ -9398,6 +9974,13 @@ CHARMAP
+ <U2CE8>     /xe2/xb3/xa8 COPTIC SYMBOL TAU RO
+ <U2CE9>     /xe2/xb3/xa9 COPTIC SYMBOL KHI RO
+ <U2CEA>     /xe2/xb3/xaa COPTIC SYMBOL SHIMA SIMA
++<U2CEB>     /xe2/xb3/xab COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI
++<U2CEC>     /xe2/xb3/xac COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI
++<U2CED>     /xe2/xb3/xad COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA
++<U2CEE>     /xe2/xb3/xae COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
++<U2CEF>     /xe2/xb3/xaf COPTIC COMBINING NI ABOVE
++<U2CF0>     /xe2/xb3/xb0 COPTIC COMBINING SPIRITUS ASPER
++<U2CF1>     /xe2/xb3/xb1 COPTIC COMBINING SPIRITUS LENIS
+ <U2CF9>     /xe2/xb3/xb9 COPTIC OLD NUBIAN FULL STOP
+ <U2CFA>     /xe2/xb3/xba COPTIC OLD NUBIAN DIRECT QUESTION MARK
+ <U2CFB>     /xe2/xb3/xbb COPTIC OLD NUBIAN INDIRECT QUESTION MARK
+@@ -9498,6 +10081,8 @@ CHARMAP
+ <U2D64>     /xe2/xb5/xa4 TIFINAGH LETTER TAWELLEMET YAZ
+ <U2D65>     /xe2/xb5/xa5 TIFINAGH LETTER YAZZ
+ <U2D6F>     /xe2/xb5/xaf TIFINAGH MODIFIER LETTER LABIALIZATION MARK
++<U2D70>     /xe2/xb5/xb0 TIFINAGH SEPARATOR MARK
++<U2D7F>     /xe2/xb5/xbf TIFINAGH CONSONANT JOINER
+ <U2D80>     /xe2/xb6/x80 ETHIOPIC SYLLABLE LOA
+ <U2D81>     /xe2/xb6/x81 ETHIOPIC SYLLABLE MOA
+ <U2D82>     /xe2/xb6/x82 ETHIOPIC SYLLABLE ROA
+@@ -9658,6 +10243,7 @@ CHARMAP
+ <U2E2E>     /xe2/xb8/xae REVERSED QUESTION MARK
+ <U2E2F>     /xe2/xb8/xaf VERTICAL TILDE
+ <U2E30>     /xe2/xb8/xb0 RING POINT
++<U2E31>     /xe2/xb8/xb1 WORD SEPARATOR MIDDLE DOT
+ <U2E80>     /xe2/xba/x80 CJK RADICAL REPEAT
+ <U2E81>     /xe2/xba/x81 CJK RADICAL CLIFF
+ <U2E82>     /xe2/xba/x82 CJK RADICAL SECOND ONE
+@@ -10427,6 +11013,9 @@ CHARMAP
+ <U31B5>     /xe3/x86/xb5 BOPOMOFO FINAL LETTER T
+ <U31B6>     /xe3/x86/xb6 BOPOMOFO FINAL LETTER K
+ <U31B7>     /xe3/x86/xb7 BOPOMOFO FINAL LETTER H
++<U31B8>     /xe3/x86/xb8 BOPOMOFO LETTER GH
++<U31B9>     /xe3/x86/xb9 BOPOMOFO LETTER LH
++<U31BA>     /xe3/x86/xba BOPOMOFO LETTER ZY
+ <U31C0>     /xe3/x87/x80 CJK STROKE T
+ <U31C1>     /xe3/x87/x81 CJK STROKE WG
+ <U31C2>     /xe3/x87/x82 CJK STROKE XG
+@@ -10546,6 +11135,18 @@ CHARMAP
+ <U3241>     /xe3/x89/x81 PARENTHESIZED IDEOGRAPH REST
+ <U3242>     /xe3/x89/x82 PARENTHESIZED IDEOGRAPH SELF
+ <U3243>     /xe3/x89/x83 PARENTHESIZED IDEOGRAPH REACH
++<U3244>     /xe3/x89/x84 CIRCLED IDEOGRAPH QUESTION
++<U3245>     /xe3/x89/x85 CIRCLED IDEOGRAPH KINDERGARTEN
++<U3246>     /xe3/x89/x86 CIRCLED IDEOGRAPH SCHOOL
++<U3247>     /xe3/x89/x87 CIRCLED IDEOGRAPH KOTO
++<U3248>     /xe3/x89/x88 CIRCLED NUMBER TEN ON BLACK SQUARE
++<U3249>     /xe3/x89/x89 CIRCLED NUMBER TWENTY ON BLACK SQUARE
++<U324A>     /xe3/x89/x8a CIRCLED NUMBER THIRTY ON BLACK SQUARE
++<U324B>     /xe3/x89/x8b CIRCLED NUMBER FORTY ON BLACK SQUARE
++<U324C>     /xe3/x89/x8c CIRCLED NUMBER FIFTY ON BLACK SQUARE
++<U324D>     /xe3/x89/x8d CIRCLED NUMBER SIXTY ON BLACK SQUARE
++<U324E>     /xe3/x89/x8e CIRCLED NUMBER SEVENTY ON BLACK SQUARE
++<U324F>     /xe3/x89/x8f CIRCLED NUMBER EIGHTY ON BLACK SQUARE
+ <U3250>     /xe3/x89/x90 PARTNERSHIP SIGN
+ <U3251>     /xe3/x89/x91 CIRCLED NUMBER TWENTY ONE
+ <U3252>     /xe3/x89/x92 CIRCLED NUMBER TWENTY TWO
+@@ -12691,6 +13292,54 @@ CHARMAP
+ <UA4C4>     /xea/x93/x84 YI RADICAL ZZIET
+ <UA4C5>     /xea/x93/x85 YI RADICAL NBIE
+ <UA4C6>     /xea/x93/x86 YI RADICAL KE
++<UA4D0>     /xea/x93/x90 LISU LETTER BA
++<UA4D1>     /xea/x93/x91 LISU LETTER PA
++<UA4D2>     /xea/x93/x92 LISU LETTER PHA
++<UA4D3>     /xea/x93/x93 LISU LETTER DA
++<UA4D4>     /xea/x93/x94 LISU LETTER TA
++<UA4D5>     /xea/x93/x95 LISU LETTER THA
++<UA4D6>     /xea/x93/x96 LISU LETTER GA
++<UA4D7>     /xea/x93/x97 LISU LETTER KA
++<UA4D8>     /xea/x93/x98 LISU LETTER KHA
++<UA4D9>     /xea/x93/x99 LISU LETTER JA
++<UA4DA>     /xea/x93/x9a LISU LETTER CA
++<UA4DB>     /xea/x93/x9b LISU LETTER CHA
++<UA4DC>     /xea/x93/x9c LISU LETTER DZA
++<UA4DD>     /xea/x93/x9d LISU LETTER TSA
++<UA4DE>     /xea/x93/x9e LISU LETTER TSHA
++<UA4DF>     /xea/x93/x9f LISU LETTER MA
++<UA4E0>     /xea/x93/xa0 LISU LETTER NA
++<UA4E1>     /xea/x93/xa1 LISU LETTER LA
++<UA4E2>     /xea/x93/xa2 LISU LETTER SA
++<UA4E3>     /xea/x93/xa3 LISU LETTER ZHA
++<UA4E4>     /xea/x93/xa4 LISU LETTER ZA
++<UA4E5>     /xea/x93/xa5 LISU LETTER NGA
++<UA4E6>     /xea/x93/xa6 LISU LETTER HA
++<UA4E7>     /xea/x93/xa7 LISU LETTER XA
++<UA4E8>     /xea/x93/xa8 LISU LETTER HHA
++<UA4E9>     /xea/x93/xa9 LISU LETTER FA
++<UA4EA>     /xea/x93/xaa LISU LETTER WA
++<UA4EB>     /xea/x93/xab LISU LETTER SHA
++<UA4EC>     /xea/x93/xac LISU LETTER YA
++<UA4ED>     /xea/x93/xad LISU LETTER GHA
++<UA4EE>     /xea/x93/xae LISU LETTER A
++<UA4EF>     /xea/x93/xaf LISU LETTER AE
++<UA4F0>     /xea/x93/xb0 LISU LETTER E
++<UA4F1>     /xea/x93/xb1 LISU LETTER EU
++<UA4F2>     /xea/x93/xb2 LISU LETTER I
++<UA4F3>     /xea/x93/xb3 LISU LETTER O
++<UA4F4>     /xea/x93/xb4 LISU LETTER U
++<UA4F5>     /xea/x93/xb5 LISU LETTER UE
++<UA4F6>     /xea/x93/xb6 LISU LETTER UH
++<UA4F7>     /xea/x93/xb7 LISU LETTER OE
++<UA4F8>     /xea/x93/xb8 LISU LETTER TONE MYA TI
++<UA4F9>     /xea/x93/xb9 LISU LETTER TONE NA PO
++<UA4FA>     /xea/x93/xba LISU LETTER TONE MYA CYA
++<UA4FB>     /xea/x93/xbb LISU LETTER TONE MYA BO
++<UA4FC>     /xea/x93/xbc LISU LETTER TONE MYA NA
++<UA4FD>     /xea/x93/xbd LISU LETTER TONE MYA JEU
++<UA4FE>     /xea/x93/xbe LISU PUNCTUATION COMMA
++<UA4FF>     /xea/x93/xbf LISU PUNCTUATION FULL STOP
+ <UA500>     /xea/x94/x80 VAI SYLLABLE EE
+ <UA501>     /xea/x94/x81 VAI SYLLABLE EEN
+ <UA502>     /xea/x94/x82 VAI SYLLABLE HEE
+@@ -13023,6 +13672,8 @@ CHARMAP
+ <UA65D>     /xea/x99/x9d CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS
+ <UA65E>     /xea/x99/x9e CYRILLIC CAPITAL LETTER YN
+ <UA65F>     /xea/x99/x9f CYRILLIC SMALL LETTER YN
++<UA660>     /xea/x99/xa0 CYRILLIC CAPITAL LETTER REVERSED TSE
++<UA661>     /xea/x99/xa1 CYRILLIC SMALL LETTER REVERSED TSE
+ <UA662>     /xea/x99/xa2 CYRILLIC CAPITAL LETTER SOFT DE
+ <UA663>     /xea/x99/xa3 CYRILLIC SMALL LETTER SOFT DE
+ <UA664>     /xea/x99/xa4 CYRILLIC CAPITAL LETTER SOFT EL
+@@ -13069,6 +13720,94 @@ CHARMAP
+ <UA695>     /xea/x9a/x95 CYRILLIC SMALL LETTER HWE
+ <UA696>     /xea/x9a/x96 CYRILLIC CAPITAL LETTER SHWE
+ <UA697>     /xea/x9a/x97 CYRILLIC SMALL LETTER SHWE
++<UA6A0>     /xea/x9a/xa0 BAMUM LETTER A
++<UA6A1>     /xea/x9a/xa1 BAMUM LETTER KA
++<UA6A2>     /xea/x9a/xa2 BAMUM LETTER U
++<UA6A3>     /xea/x9a/xa3 BAMUM LETTER KU
++<UA6A4>     /xea/x9a/xa4 BAMUM LETTER EE
++<UA6A5>     /xea/x9a/xa5 BAMUM LETTER REE
++<UA6A6>     /xea/x9a/xa6 BAMUM LETTER TAE
++<UA6A7>     /xea/x9a/xa7 BAMUM LETTER O
++<UA6A8>     /xea/x9a/xa8 BAMUM LETTER NYI
++<UA6A9>     /xea/x9a/xa9 BAMUM LETTER I
++<UA6AA>     /xea/x9a/xaa BAMUM LETTER LA
++<UA6AB>     /xea/x9a/xab BAMUM LETTER PA
++<UA6AC>     /xea/x9a/xac BAMUM LETTER RII
++<UA6AD>     /xea/x9a/xad BAMUM LETTER RIEE
++<UA6AE>     /xea/x9a/xae BAMUM LETTER LEEEE
++<UA6AF>     /xea/x9a/xaf BAMUM LETTER MEEEE
++<UA6B0>     /xea/x9a/xb0 BAMUM LETTER TAA
++<UA6B1>     /xea/x9a/xb1 BAMUM LETTER NDAA
++<UA6B2>     /xea/x9a/xb2 BAMUM LETTER NJAEM
++<UA6B3>     /xea/x9a/xb3 BAMUM LETTER M
++<UA6B4>     /xea/x9a/xb4 BAMUM LETTER SUU
++<UA6B5>     /xea/x9a/xb5 BAMUM LETTER MU
++<UA6B6>     /xea/x9a/xb6 BAMUM LETTER SHII
++<UA6B7>     /xea/x9a/xb7 BAMUM LETTER SI
++<UA6B8>     /xea/x9a/xb8 BAMUM LETTER SHEUX
++<UA6B9>     /xea/x9a/xb9 BAMUM LETTER SEUX
++<UA6BA>     /xea/x9a/xba BAMUM LETTER KYEE
++<UA6BB>     /xea/x9a/xbb BAMUM LETTER KET
++<UA6BC>     /xea/x9a/xbc BAMUM LETTER NUAE
++<UA6BD>     /xea/x9a/xbd BAMUM LETTER NU
++<UA6BE>     /xea/x9a/xbe BAMUM LETTER NJUAE
++<UA6BF>     /xea/x9a/xbf BAMUM LETTER YOQ
++<UA6C0>     /xea/x9b/x80 BAMUM LETTER SHU
++<UA6C1>     /xea/x9b/x81 BAMUM LETTER YUQ
++<UA6C2>     /xea/x9b/x82 BAMUM LETTER YA
++<UA6C3>     /xea/x9b/x83 BAMUM LETTER NSHA
++<UA6C4>     /xea/x9b/x84 BAMUM LETTER KEUX
++<UA6C5>     /xea/x9b/x85 BAMUM LETTER PEUX
++<UA6C6>     /xea/x9b/x86 BAMUM LETTER NJEE
++<UA6C7>     /xea/x9b/x87 BAMUM LETTER NTEE
++<UA6C8>     /xea/x9b/x88 BAMUM LETTER PUE
++<UA6C9>     /xea/x9b/x89 BAMUM LETTER WUE
++<UA6CA>     /xea/x9b/x8a BAMUM LETTER PEE
++<UA6CB>     /xea/x9b/x8b BAMUM LETTER FEE
++<UA6CC>     /xea/x9b/x8c BAMUM LETTER RU
++<UA6CD>     /xea/x9b/x8d BAMUM LETTER LU
++<UA6CE>     /xea/x9b/x8e BAMUM LETTER MI
++<UA6CF>     /xea/x9b/x8f BAMUM LETTER NI
++<UA6D0>     /xea/x9b/x90 BAMUM LETTER REUX
++<UA6D1>     /xea/x9b/x91 BAMUM LETTER RAE
++<UA6D2>     /xea/x9b/x92 BAMUM LETTER KEN
++<UA6D3>     /xea/x9b/x93 BAMUM LETTER NGKWAEN
++<UA6D4>     /xea/x9b/x94 BAMUM LETTER NGGA
++<UA6D5>     /xea/x9b/x95 BAMUM LETTER NGA
++<UA6D6>     /xea/x9b/x96 BAMUM LETTER SHO
++<UA6D7>     /xea/x9b/x97 BAMUM LETTER PUAE
++<UA6D8>     /xea/x9b/x98 BAMUM LETTER FU
++<UA6D9>     /xea/x9b/x99 BAMUM LETTER FOM
++<UA6DA>     /xea/x9b/x9a BAMUM LETTER WA
++<UA6DB>     /xea/x9b/x9b BAMUM LETTER NA
++<UA6DC>     /xea/x9b/x9c BAMUM LETTER LI
++<UA6DD>     /xea/x9b/x9d BAMUM LETTER PI
++<UA6DE>     /xea/x9b/x9e BAMUM LETTER LOQ
++<UA6DF>     /xea/x9b/x9f BAMUM LETTER KO
++<UA6E0>     /xea/x9b/xa0 BAMUM LETTER MBEN
++<UA6E1>     /xea/x9b/xa1 BAMUM LETTER REN
++<UA6E2>     /xea/x9b/xa2 BAMUM LETTER MEN
++<UA6E3>     /xea/x9b/xa3 BAMUM LETTER MA
++<UA6E4>     /xea/x9b/xa4 BAMUM LETTER TI
++<UA6E5>     /xea/x9b/xa5 BAMUM LETTER KI
++<UA6E6>     /xea/x9b/xa6 BAMUM LETTER MO
++<UA6E7>     /xea/x9b/xa7 BAMUM LETTER MBAA
++<UA6E8>     /xea/x9b/xa8 BAMUM LETTER TET
++<UA6E9>     /xea/x9b/xa9 BAMUM LETTER KPA
++<UA6EA>     /xea/x9b/xaa BAMUM LETTER TEN
++<UA6EB>     /xea/x9b/xab BAMUM LETTER NTUU
++<UA6EC>     /xea/x9b/xac BAMUM LETTER SAMBA
++<UA6ED>     /xea/x9b/xad BAMUM LETTER FAAMAE
++<UA6EE>     /xea/x9b/xae BAMUM LETTER KOVUU
++<UA6EF>     /xea/x9b/xaf BAMUM LETTER KOGHOM
++<UA6F0>     /xea/x9b/xb0 BAMUM COMBINING MARK KOQNDON
++<UA6F1>     /xea/x9b/xb1 BAMUM COMBINING MARK TUKWENTIS
++<UA6F2>     /xea/x9b/xb2 BAMUM NJAEMLI
++<UA6F3>     /xea/x9b/xb3 BAMUM FULL STOP
++<UA6F4>     /xea/x9b/xb4 BAMUM COLON
++<UA6F5>     /xea/x9b/xb5 BAMUM COMMA
++<UA6F6>     /xea/x9b/xb6 BAMUM SEMICOLON
++<UA6F7>     /xea/x9b/xb7 BAMUM QUESTION MARK
+ <UA700>     /xea/x9c/x80 MODIFIER LETTER CHINESE TONE YIN PING
+ <UA701>     /xea/x9c/x81 MODIFIER LETTER CHINESE TONE YANG PING
+ <UA702>     /xea/x9c/x82 MODIFIER LETTER CHINESE TONE YIN SHANG
+@@ -13210,6 +13949,21 @@ CHARMAP
+ <UA78A>     /xea/x9e/x8a MODIFIER LETTER SHORT EQUALS SIGN
+ <UA78B>     /xea/x9e/x8b LATIN CAPITAL LETTER SALTILLO
+ <UA78C>     /xea/x9e/x8c LATIN SMALL LETTER SALTILLO
++<UA78D>     /xea/x9e/x8d LATIN CAPITAL LETTER TURNED H
++<UA78E>     /xea/x9e/x8e LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
++<UA790>     /xea/x9e/x90 LATIN CAPITAL LETTER N WITH DESCENDER
++<UA791>     /xea/x9e/x91 LATIN SMALL LETTER N WITH DESCENDER
++<UA7A0>     /xea/x9e/xa0 LATIN CAPITAL LETTER G WITH OBLIQUE STROKE
++<UA7A1>     /xea/x9e/xa1 LATIN SMALL LETTER G WITH OBLIQUE STROKE
++<UA7A2>     /xea/x9e/xa2 LATIN CAPITAL LETTER K WITH OBLIQUE STROKE
++<UA7A3>     /xea/x9e/xa3 LATIN SMALL LETTER K WITH OBLIQUE STROKE
++<UA7A4>     /xea/x9e/xa4 LATIN CAPITAL LETTER N WITH OBLIQUE STROKE
++<UA7A5>     /xea/x9e/xa5 LATIN SMALL LETTER N WITH OBLIQUE STROKE
++<UA7A6>     /xea/x9e/xa6 LATIN CAPITAL LETTER R WITH OBLIQUE STROKE
++<UA7A7>     /xea/x9e/xa7 LATIN SMALL LETTER R WITH OBLIQUE STROKE
++<UA7A8>     /xea/x9e/xa8 LATIN CAPITAL LETTER S WITH OBLIQUE STROKE
++<UA7A9>     /xea/x9e/xa9 LATIN SMALL LETTER S WITH OBLIQUE STROKE
++<UA7FA>     /xea/x9f/xba LATIN LETTER SMALL CAPITAL TURNED M
+ <UA7FB>     /xea/x9f/xbb LATIN EPIGRAPHIC LETTER REVERSED F
+ <UA7FC>     /xea/x9f/xbc LATIN EPIGRAPHIC LETTER REVERSED P
+ <UA7FD>     /xea/x9f/xbd LATIN EPIGRAPHIC LETTER INVERTED M
+@@ -13259,6 +14013,16 @@ CHARMAP
+ <UA829>     /xea/xa0/xa9 SYLOTI NAGRI POETRY MARK-2
+ <UA82A>     /xea/xa0/xaa SYLOTI NAGRI POETRY MARK-3
+ <UA82B>     /xea/xa0/xab SYLOTI NAGRI POETRY MARK-4
++<UA830>     /xea/xa0/xb0 NORTH INDIC FRACTION ONE QUARTER
++<UA831>     /xea/xa0/xb1 NORTH INDIC FRACTION ONE HALF
++<UA832>     /xea/xa0/xb2 NORTH INDIC FRACTION THREE QUARTERS
++<UA833>     /xea/xa0/xb3 NORTH INDIC FRACTION ONE SIXTEENTH
++<UA834>     /xea/xa0/xb4 NORTH INDIC FRACTION ONE EIGHTH
++<UA835>     /xea/xa0/xb5 NORTH INDIC FRACTION THREE SIXTEENTHS
++<UA836>     /xea/xa0/xb6 NORTH INDIC QUARTER MARK
++<UA837>     /xea/xa0/xb7 NORTH INDIC PLACEHOLDER MARK
++<UA838>     /xea/xa0/xb8 NORTH INDIC RUPEE MARK
++<UA839>     /xea/xa0/xb9 NORTH INDIC QUANTITY MARK
+ <UA840>     /xea/xa1/x80 PHAGS-PA LETTER KA
+ <UA841>     /xea/xa1/x81 PHAGS-PA LETTER KHA
+ <UA842>     /xea/xa1/x82 PHAGS-PA LETTER GA
+@@ -13396,6 +14160,34 @@ CHARMAP
+ <UA8D7>     /xea/xa3/x97 SAURASHTRA DIGIT SEVEN
+ <UA8D8>     /xea/xa3/x98 SAURASHTRA DIGIT EIGHT
+ <UA8D9>     /xea/xa3/x99 SAURASHTRA DIGIT NINE
++<UA8E0>     /xea/xa3/xa0 COMBINING DEVANAGARI DIGIT ZERO
++<UA8E1>     /xea/xa3/xa1 COMBINING DEVANAGARI DIGIT ONE
++<UA8E2>     /xea/xa3/xa2 COMBINING DEVANAGARI DIGIT TWO
++<UA8E3>     /xea/xa3/xa3 COMBINING DEVANAGARI DIGIT THREE
++<UA8E4>     /xea/xa3/xa4 COMBINING DEVANAGARI DIGIT FOUR
++<UA8E5>     /xea/xa3/xa5 COMBINING DEVANAGARI DIGIT FIVE
++<UA8E6>     /xea/xa3/xa6 COMBINING DEVANAGARI DIGIT SIX
++<UA8E7>     /xea/xa3/xa7 COMBINING DEVANAGARI DIGIT SEVEN
++<UA8E8>     /xea/xa3/xa8 COMBINING DEVANAGARI DIGIT EIGHT
++<UA8E9>     /xea/xa3/xa9 COMBINING DEVANAGARI DIGIT NINE
++<UA8EA>     /xea/xa3/xaa COMBINING DEVANAGARI LETTER A
++<UA8EB>     /xea/xa3/xab COMBINING DEVANAGARI LETTER U
++<UA8EC>     /xea/xa3/xac COMBINING DEVANAGARI LETTER KA
++<UA8ED>     /xea/xa3/xad COMBINING DEVANAGARI LETTER NA
++<UA8EE>     /xea/xa3/xae COMBINING DEVANAGARI LETTER PA
++<UA8EF>     /xea/xa3/xaf COMBINING DEVANAGARI LETTER RA
++<UA8F0>     /xea/xa3/xb0 COMBINING DEVANAGARI LETTER VI
++<UA8F1>     /xea/xa3/xb1 COMBINING DEVANAGARI SIGN AVAGRAHA
++<UA8F2>     /xea/xa3/xb2 DEVANAGARI SIGN SPACING CANDRABINDU
++<UA8F3>     /xea/xa3/xb3 DEVANAGARI SIGN CANDRABINDU VIRAMA
++<UA8F4>     /xea/xa3/xb4 DEVANAGARI SIGN DOUBLE CANDRABINDU VIRAMA
++<UA8F5>     /xea/xa3/xb5 DEVANAGARI SIGN CANDRABINDU TWO
++<UA8F6>     /xea/xa3/xb6 DEVANAGARI SIGN CANDRABINDU THREE
++<UA8F7>     /xea/xa3/xb7 DEVANAGARI SIGN CANDRABINDU AVAGRAHA
++<UA8F8>     /xea/xa3/xb8 DEVANAGARI SIGN PUSHPIKA
++<UA8F9>     /xea/xa3/xb9 DEVANAGARI GAP FILLER
++<UA8FA>     /xea/xa3/xba DEVANAGARI CARET
++<UA8FB>     /xea/xa3/xbb DEVANAGARI HEADSTROKE
+ <UA900>     /xea/xa4/x80 KAYAH LI DIGIT ZERO
+ <UA901>     /xea/xa4/x81 KAYAH LI DIGIT ONE
+ <UA902>     /xea/xa4/x82 KAYAH LI DIGIT TWO
+@@ -13481,6 +14273,126 @@ CHARMAP
+ <UA952>     /xea/xa5/x92 REJANG CONSONANT SIGN H
+ <UA953>     /xea/xa5/x93 REJANG VIRAMA
+ <UA95F>     /xea/xa5/x9f REJANG SECTION MARK
++<UA960>     /xea/xa5/xa0 HANGUL CHOSEONG TIKEUT-MIEUM
++<UA961>     /xea/xa5/xa1 HANGUL CHOSEONG TIKEUT-PIEUP
++<UA962>     /xea/xa5/xa2 HANGUL CHOSEONG TIKEUT-SIOS
++<UA963>     /xea/xa5/xa3 HANGUL CHOSEONG TIKEUT-CIEUC
++<UA964>     /xea/xa5/xa4 HANGUL CHOSEONG RIEUL-KIYEOK
++<UA965>     /xea/xa5/xa5 HANGUL CHOSEONG RIEUL-SSANGKIYEOK
++<UA966>     /xea/xa5/xa6 HANGUL CHOSEONG RIEUL-TIKEUT
++<UA967>     /xea/xa5/xa7 HANGUL CHOSEONG RIEUL-SSANGTIKEUT
++<UA968>     /xea/xa5/xa8 HANGUL CHOSEONG RIEUL-MIEUM
++<UA969>     /xea/xa5/xa9 HANGUL CHOSEONG RIEUL-PIEUP
++<UA96A>     /xea/xa5/xaa HANGUL CHOSEONG RIEUL-SSANGPIEUP
++<UA96B>     /xea/xa5/xab HANGUL CHOSEONG RIEUL-KAPYEOUNPIEUP
++<UA96C>     /xea/xa5/xac HANGUL CHOSEONG RIEUL-SIOS
++<UA96D>     /xea/xa5/xad HANGUL CHOSEONG RIEUL-CIEUC
++<UA96E>     /xea/xa5/xae HANGUL CHOSEONG RIEUL-KHIEUKH
++<UA96F>     /xea/xa5/xaf HANGUL CHOSEONG MIEUM-KIYEOK
++<UA970>     /xea/xa5/xb0 HANGUL CHOSEONG MIEUM-TIKEUT
++<UA971>     /xea/xa5/xb1 HANGUL CHOSEONG MIEUM-SIOS
++<UA972>     /xea/xa5/xb2 HANGUL CHOSEONG PIEUP-SIOS-THIEUTH
++<UA973>     /xea/xa5/xb3 HANGUL CHOSEONG PIEUP-KHIEUKH
++<UA974>     /xea/xa5/xb4 HANGUL CHOSEONG PIEUP-HIEUH
++<UA975>     /xea/xa5/xb5 HANGUL CHOSEONG SSANGSIOS-PIEUP
++<UA976>     /xea/xa5/xb6 HANGUL CHOSEONG IEUNG-RIEUL
++<UA977>     /xea/xa5/xb7 HANGUL CHOSEONG IEUNG-HIEUH
++<UA978>     /xea/xa5/xb8 HANGUL CHOSEONG SSANGCIEUC-HIEUH
++<UA979>     /xea/xa5/xb9 HANGUL CHOSEONG SSANGTHIEUTH
++<UA97A>     /xea/xa5/xba HANGUL CHOSEONG PHIEUPH-HIEUH
++<UA97B>     /xea/xa5/xbb HANGUL CHOSEONG HIEUH-SIOS
++<UA97C>     /xea/xa5/xbc HANGUL CHOSEONG SSANGYEORINHIEUH
++<UA980>     /xea/xa6/x80 JAVANESE SIGN PANYANGGA
++<UA981>     /xea/xa6/x81 JAVANESE SIGN CECAK
++<UA982>     /xea/xa6/x82 JAVANESE SIGN LAYAR
++<UA983>     /xea/xa6/x83 JAVANESE SIGN WIGNYAN
++<UA984>     /xea/xa6/x84 JAVANESE LETTER A
++<UA985>     /xea/xa6/x85 JAVANESE LETTER I KAWI
++<UA986>     /xea/xa6/x86 JAVANESE LETTER I
++<UA987>     /xea/xa6/x87 JAVANESE LETTER II
++<UA988>     /xea/xa6/x88 JAVANESE LETTER U
++<UA989>     /xea/xa6/x89 JAVANESE LETTER PA CEREK
++<UA98A>     /xea/xa6/x8a JAVANESE LETTER NGA LELET
++<UA98B>     /xea/xa6/x8b JAVANESE LETTER NGA LELET RASWADI
++<UA98C>     /xea/xa6/x8c JAVANESE LETTER E
++<UA98D>     /xea/xa6/x8d JAVANESE LETTER AI
++<UA98E>     /xea/xa6/x8e JAVANESE LETTER O
++<UA98F>     /xea/xa6/x8f JAVANESE LETTER KA
++<UA990>     /xea/xa6/x90 JAVANESE LETTER KA SASAK
++<UA991>     /xea/xa6/x91 JAVANESE LETTER KA MURDA
++<UA992>     /xea/xa6/x92 JAVANESE LETTER GA
++<UA993>     /xea/xa6/x93 JAVANESE LETTER GA MURDA
++<UA994>     /xea/xa6/x94 JAVANESE LETTER NGA
++<UA995>     /xea/xa6/x95 JAVANESE LETTER CA
++<UA996>     /xea/xa6/x96 JAVANESE LETTER CA MURDA
++<UA997>     /xea/xa6/x97 JAVANESE LETTER JA
++<UA998>     /xea/xa6/x98 JAVANESE LETTER NYA MURDA
++<UA999>     /xea/xa6/x99 JAVANESE LETTER JA MAHAPRANA
++<UA99A>     /xea/xa6/x9a JAVANESE LETTER NYA
++<UA99B>     /xea/xa6/x9b JAVANESE LETTER TTA
++<UA99C>     /xea/xa6/x9c JAVANESE LETTER TTA MAHAPRANA
++<UA99D>     /xea/xa6/x9d JAVANESE LETTER DDA
++<UA99E>     /xea/xa6/x9e JAVANESE LETTER DDA MAHAPRANA
++<UA99F>     /xea/xa6/x9f JAVANESE LETTER NA MURDA
++<UA9A0>     /xea/xa6/xa0 JAVANESE LETTER TA
++<UA9A1>     /xea/xa6/xa1 JAVANESE LETTER TA MURDA
++<UA9A2>     /xea/xa6/xa2 JAVANESE LETTER DA
++<UA9A3>     /xea/xa6/xa3 JAVANESE LETTER DA MAHAPRANA
++<UA9A4>     /xea/xa6/xa4 JAVANESE LETTER NA
++<UA9A5>     /xea/xa6/xa5 JAVANESE LETTER PA
++<UA9A6>     /xea/xa6/xa6 JAVANESE LETTER PA MURDA
++<UA9A7>     /xea/xa6/xa7 JAVANESE LETTER BA
++<UA9A8>     /xea/xa6/xa8 JAVANESE LETTER BA MURDA
++<UA9A9>     /xea/xa6/xa9 JAVANESE LETTER MA
++<UA9AA>     /xea/xa6/xaa JAVANESE LETTER YA
++<UA9AB>     /xea/xa6/xab JAVANESE LETTER RA
++<UA9AC>     /xea/xa6/xac JAVANESE LETTER RA AGUNG
++<UA9AD>     /xea/xa6/xad JAVANESE LETTER LA
++<UA9AE>     /xea/xa6/xae JAVANESE LETTER WA
++<UA9AF>     /xea/xa6/xaf JAVANESE LETTER SA MURDA
++<UA9B0>     /xea/xa6/xb0 JAVANESE LETTER SA MAHAPRANA
++<UA9B1>     /xea/xa6/xb1 JAVANESE LETTER SA
++<UA9B2>     /xea/xa6/xb2 JAVANESE LETTER HA
++<UA9B3>     /xea/xa6/xb3 JAVANESE SIGN CECAK TELU
++<UA9B4>     /xea/xa6/xb4 JAVANESE VOWEL SIGN TARUNG
++<UA9B5>     /xea/xa6/xb5 JAVANESE VOWEL SIGN TOLONG
++<UA9B6>     /xea/xa6/xb6 JAVANESE VOWEL SIGN WULU
++<UA9B7>     /xea/xa6/xb7 JAVANESE VOWEL SIGN WULU MELIK
++<UA9B8>     /xea/xa6/xb8 JAVANESE VOWEL SIGN SUKU
++<UA9B9>     /xea/xa6/xb9 JAVANESE VOWEL SIGN SUKU MENDUT
++<UA9BA>     /xea/xa6/xba JAVANESE VOWEL SIGN TALING
++<UA9BB>     /xea/xa6/xbb JAVANESE VOWEL SIGN DIRGA MURE
++<UA9BC>     /xea/xa6/xbc JAVANESE VOWEL SIGN PEPET
++<UA9BD>     /xea/xa6/xbd JAVANESE CONSONANT SIGN KERET
++<UA9BE>     /xea/xa6/xbe JAVANESE CONSONANT SIGN PENGKAL
++<UA9BF>     /xea/xa6/xbf JAVANESE CONSONANT SIGN CAKRA
++<UA9C0>     /xea/xa7/x80 JAVANESE PANGKON
++<UA9C1>     /xea/xa7/x81 JAVANESE LEFT RERENGGAN
++<UA9C2>     /xea/xa7/x82 JAVANESE RIGHT RERENGGAN
++<UA9C3>     /xea/xa7/x83 JAVANESE PADA ANDAP
++<UA9C4>     /xea/xa7/x84 JAVANESE PADA MADYA
++<UA9C5>     /xea/xa7/x85 JAVANESE PADA LUHUR
++<UA9C6>     /xea/xa7/x86 JAVANESE PADA WINDU
++<UA9C7>     /xea/xa7/x87 JAVANESE PADA PANGKAT
++<UA9C8>     /xea/xa7/x88 JAVANESE PADA LINGSA
++<UA9C9>     /xea/xa7/x89 JAVANESE PADA LUNGSI
++<UA9CA>     /xea/xa7/x8a JAVANESE PADA ADEG
++<UA9CB>     /xea/xa7/x8b JAVANESE PADA ADEG ADEG
++<UA9CC>     /xea/xa7/x8c JAVANESE PADA PISELEH
++<UA9CD>     /xea/xa7/x8d JAVANESE TURNED PADA PISELEH
++<UA9CF>     /xea/xa7/x8f JAVANESE PANGRANGKEP
++<UA9D0>     /xea/xa7/x90 JAVANESE DIGIT ZERO
++<UA9D1>     /xea/xa7/x91 JAVANESE DIGIT ONE
++<UA9D2>     /xea/xa7/x92 JAVANESE DIGIT TWO
++<UA9D3>     /xea/xa7/x93 JAVANESE DIGIT THREE
++<UA9D4>     /xea/xa7/x94 JAVANESE DIGIT FOUR
++<UA9D5>     /xea/xa7/x95 JAVANESE DIGIT FIVE
++<UA9D6>     /xea/xa7/x96 JAVANESE DIGIT SIX
++<UA9D7>     /xea/xa7/x97 JAVANESE DIGIT SEVEN
++<UA9D8>     /xea/xa7/x98 JAVANESE DIGIT EIGHT
++<UA9D9>     /xea/xa7/x99 JAVANESE DIGIT NINE
++<UA9DE>     /xea/xa7/x9e JAVANESE PADA TIRTA TUMETES
++<UA9DF>     /xea/xa7/x9f JAVANESE PADA ISEN-ISEN
+ <UAA00>     /xea/xa8/x80 CHAM LETTER A
+ <UAA01>     /xea/xa8/x81 CHAM LETTER I
+ <UAA02>     /xea/xa8/x82 CHAM LETTER U
+@@ -13564,6 +14476,194 @@ CHARMAP
+ <UAA5D>     /xea/xa9/x9d CHAM PUNCTUATION DANDA
+ <UAA5E>     /xea/xa9/x9e CHAM PUNCTUATION DOUBLE DANDA
+ <UAA5F>     /xea/xa9/x9f CHAM PUNCTUATION TRIPLE DANDA
++<UAA60>     /xea/xa9/xa0 MYANMAR LETTER KHAMTI GA
++<UAA61>     /xea/xa9/xa1 MYANMAR LETTER KHAMTI CA
++<UAA62>     /xea/xa9/xa2 MYANMAR LETTER KHAMTI CHA
++<UAA63>     /xea/xa9/xa3 MYANMAR LETTER KHAMTI JA
++<UAA64>     /xea/xa9/xa4 MYANMAR LETTER KHAMTI JHA
++<UAA65>     /xea/xa9/xa5 MYANMAR LETTER KHAMTI NYA
++<UAA66>     /xea/xa9/xa6 MYANMAR LETTER KHAMTI TTA
++<UAA67>     /xea/xa9/xa7 MYANMAR LETTER KHAMTI TTHA
++<UAA68>     /xea/xa9/xa8 MYANMAR LETTER KHAMTI DDA
++<UAA69>     /xea/xa9/xa9 MYANMAR LETTER KHAMTI DDHA
++<UAA6A>     /xea/xa9/xaa MYANMAR LETTER KHAMTI DHA
++<UAA6B>     /xea/xa9/xab MYANMAR LETTER KHAMTI NA
++<UAA6C>     /xea/xa9/xac MYANMAR LETTER KHAMTI SA
++<UAA6D>     /xea/xa9/xad MYANMAR LETTER KHAMTI HA
++<UAA6E>     /xea/xa9/xae MYANMAR LETTER KHAMTI HHA
++<UAA6F>     /xea/xa9/xaf MYANMAR LETTER KHAMTI FA
++<UAA70>     /xea/xa9/xb0 MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
++<UAA71>     /xea/xa9/xb1 MYANMAR LETTER KHAMTI XA
++<UAA72>     /xea/xa9/xb2 MYANMAR LETTER KHAMTI ZA
++<UAA73>     /xea/xa9/xb3 MYANMAR LETTER KHAMTI RA
++<UAA74>     /xea/xa9/xb4 MYANMAR LOGOGRAM KHAMTI OAY
++<UAA75>     /xea/xa9/xb5 MYANMAR LOGOGRAM KHAMTI QN
++<UAA76>     /xea/xa9/xb6 MYANMAR LOGOGRAM KHAMTI HM
++<UAA77>     /xea/xa9/xb7 MYANMAR SYMBOL AITON EXCLAMATION
++<UAA78>     /xea/xa9/xb8 MYANMAR SYMBOL AITON ONE
++<UAA79>     /xea/xa9/xb9 MYANMAR SYMBOL AITON TWO
++<UAA7A>     /xea/xa9/xba MYANMAR LETTER AITON RA
++<UAA7B>     /xea/xa9/xbb MYANMAR SIGN PAO KAREN TONE
++<UAA80>     /xea/xaa/x80 TAI VIET LETTER LOW KO
++<UAA81>     /xea/xaa/x81 TAI VIET LETTER HIGH KO
++<UAA82>     /xea/xaa/x82 TAI VIET LETTER LOW KHO
++<UAA83>     /xea/xaa/x83 TAI VIET LETTER HIGH KHO
++<UAA84>     /xea/xaa/x84 TAI VIET LETTER LOW KHHO
++<UAA85>     /xea/xaa/x85 TAI VIET LETTER HIGH KHHO
++<UAA86>     /xea/xaa/x86 TAI VIET LETTER LOW GO
++<UAA87>     /xea/xaa/x87 TAI VIET LETTER HIGH GO
++<UAA88>     /xea/xaa/x88 TAI VIET LETTER LOW NGO
++<UAA89>     /xea/xaa/x89 TAI VIET LETTER HIGH NGO
++<UAA8A>     /xea/xaa/x8a TAI VIET LETTER LOW CO
++<UAA8B>     /xea/xaa/x8b TAI VIET LETTER HIGH CO
++<UAA8C>     /xea/xaa/x8c TAI VIET LETTER LOW CHO
++<UAA8D>     /xea/xaa/x8d TAI VIET LETTER HIGH CHO
++<UAA8E>     /xea/xaa/x8e TAI VIET LETTER LOW SO
++<UAA8F>     /xea/xaa/x8f TAI VIET LETTER HIGH SO
++<UAA90>     /xea/xaa/x90 TAI VIET LETTER LOW NYO
++<UAA91>     /xea/xaa/x91 TAI VIET LETTER HIGH NYO
++<UAA92>     /xea/xaa/x92 TAI VIET LETTER LOW DO
++<UAA93>     /xea/xaa/x93 TAI VIET LETTER HIGH DO
++<UAA94>     /xea/xaa/x94 TAI VIET LETTER LOW TO
++<UAA95>     /xea/xaa/x95 TAI VIET LETTER HIGH TO
++<UAA96>     /xea/xaa/x96 TAI VIET LETTER LOW THO
++<UAA97>     /xea/xaa/x97 TAI VIET LETTER HIGH THO
++<UAA98>     /xea/xaa/x98 TAI VIET LETTER LOW NO
++<UAA99>     /xea/xaa/x99 TAI VIET LETTER HIGH NO
++<UAA9A>     /xea/xaa/x9a TAI VIET LETTER LOW BO
++<UAA9B>     /xea/xaa/x9b TAI VIET LETTER HIGH BO
++<UAA9C>     /xea/xaa/x9c TAI VIET LETTER LOW PO
++<UAA9D>     /xea/xaa/x9d TAI VIET LETTER HIGH PO
++<UAA9E>     /xea/xaa/x9e TAI VIET LETTER LOW PHO
++<UAA9F>     /xea/xaa/x9f TAI VIET LETTER HIGH PHO
++<UAAA0>     /xea/xaa/xa0 TAI VIET LETTER LOW FO
++<UAAA1>     /xea/xaa/xa1 TAI VIET LETTER HIGH FO
++<UAAA2>     /xea/xaa/xa2 TAI VIET LETTER LOW MO
++<UAAA3>     /xea/xaa/xa3 TAI VIET LETTER HIGH MO
++<UAAA4>     /xea/xaa/xa4 TAI VIET LETTER LOW YO
++<UAAA5>     /xea/xaa/xa5 TAI VIET LETTER HIGH YO
++<UAAA6>     /xea/xaa/xa6 TAI VIET LETTER LOW RO
++<UAAA7>     /xea/xaa/xa7 TAI VIET LETTER HIGH RO
++<UAAA8>     /xea/xaa/xa8 TAI VIET LETTER LOW LO
++<UAAA9>     /xea/xaa/xa9 TAI VIET LETTER HIGH LO
++<UAAAA>     /xea/xaa/xaa TAI VIET LETTER LOW VO
++<UAAAB>     /xea/xaa/xab TAI VIET LETTER HIGH VO
++<UAAAC>     /xea/xaa/xac TAI VIET LETTER LOW HO
++<UAAAD>     /xea/xaa/xad TAI VIET LETTER HIGH HO
++<UAAAE>     /xea/xaa/xae TAI VIET LETTER LOW O
++<UAAAF>     /xea/xaa/xaf TAI VIET LETTER HIGH O
++<UAAB0>     /xea/xaa/xb0 TAI VIET MAI KANG
++<UAAB1>     /xea/xaa/xb1 TAI VIET VOWEL AA
++<UAAB2>     /xea/xaa/xb2 TAI VIET VOWEL I
++<UAAB3>     /xea/xaa/xb3 TAI VIET VOWEL UE
++<UAAB4>     /xea/xaa/xb4 TAI VIET VOWEL U
++<UAAB5>     /xea/xaa/xb5 TAI VIET VOWEL E
++<UAAB6>     /xea/xaa/xb6 TAI VIET VOWEL O
++<UAAB7>     /xea/xaa/xb7 TAI VIET MAI KHIT
++<UAAB8>     /xea/xaa/xb8 TAI VIET VOWEL IA
++<UAAB9>     /xea/xaa/xb9 TAI VIET VOWEL UEA
++<UAABA>     /xea/xaa/xba TAI VIET VOWEL UA
++<UAABB>     /xea/xaa/xbb TAI VIET VOWEL AUE
++<UAABC>     /xea/xaa/xbc TAI VIET VOWEL AY
++<UAABD>     /xea/xaa/xbd TAI VIET VOWEL AN
++<UAABE>     /xea/xaa/xbe TAI VIET VOWEL AM
++<UAABF>     /xea/xaa/xbf TAI VIET TONE MAI EK
++<UAAC0>     /xea/xab/x80 TAI VIET TONE MAI NUENG
++<UAAC1>     /xea/xab/x81 TAI VIET TONE MAI THO
++<UAAC2>     /xea/xab/x82 TAI VIET TONE MAI SONG
++<UAADB>     /xea/xab/x9b TAI VIET SYMBOL KON
++<UAADC>     /xea/xab/x9c TAI VIET SYMBOL NUENG
++<UAADD>     /xea/xab/x9d TAI VIET SYMBOL SAM
++<UAADE>     /xea/xab/x9e TAI VIET SYMBOL HO HOI
++<UAADF>     /xea/xab/x9f TAI VIET SYMBOL KOI KOI
++<UAB01>     /xea/xac/x81 ETHIOPIC SYLLABLE TTHU
++<UAB02>     /xea/xac/x82 ETHIOPIC SYLLABLE TTHI
++<UAB03>     /xea/xac/x83 ETHIOPIC SYLLABLE TTHAA
++<UAB04>     /xea/xac/x84 ETHIOPIC SYLLABLE TTHEE
++<UAB05>     /xea/xac/x85 ETHIOPIC SYLLABLE TTHE
++<UAB06>     /xea/xac/x86 ETHIOPIC SYLLABLE TTHO
++<UAB09>     /xea/xac/x89 ETHIOPIC SYLLABLE DDHU
++<UAB0A>     /xea/xac/x8a ETHIOPIC SYLLABLE DDHI
++<UAB0B>     /xea/xac/x8b ETHIOPIC SYLLABLE DDHAA
++<UAB0C>     /xea/xac/x8c ETHIOPIC SYLLABLE DDHEE
++<UAB0D>     /xea/xac/x8d ETHIOPIC SYLLABLE DDHE
++<UAB0E>     /xea/xac/x8e ETHIOPIC SYLLABLE DDHO
++<UAB11>     /xea/xac/x91 ETHIOPIC SYLLABLE DZU
++<UAB12>     /xea/xac/x92 ETHIOPIC SYLLABLE DZI
++<UAB13>     /xea/xac/x93 ETHIOPIC SYLLABLE DZAA
++<UAB14>     /xea/xac/x94 ETHIOPIC SYLLABLE DZEE
++<UAB15>     /xea/xac/x95 ETHIOPIC SYLLABLE DZE
++<UAB16>     /xea/xac/x96 ETHIOPIC SYLLABLE DZO
++<UAB20>     /xea/xac/xa0 ETHIOPIC SYLLABLE CCHHA
++<UAB21>     /xea/xac/xa1 ETHIOPIC SYLLABLE CCHHU
++<UAB22>     /xea/xac/xa2 ETHIOPIC SYLLABLE CCHHI
++<UAB23>     /xea/xac/xa3 ETHIOPIC SYLLABLE CCHHAA
++<UAB24>     /xea/xac/xa4 ETHIOPIC SYLLABLE CCHHEE
++<UAB25>     /xea/xac/xa5 ETHIOPIC SYLLABLE CCHHE
++<UAB26>     /xea/xac/xa6 ETHIOPIC SYLLABLE CCHHO
++<UAB28>     /xea/xac/xa8 ETHIOPIC SYLLABLE BBA
++<UAB29>     /xea/xac/xa9 ETHIOPIC SYLLABLE BBU
++<UAB2A>     /xea/xac/xaa ETHIOPIC SYLLABLE BBI
++<UAB2B>     /xea/xac/xab ETHIOPIC SYLLABLE BBAA
++<UAB2C>     /xea/xac/xac ETHIOPIC SYLLABLE BBEE
++<UAB2D>     /xea/xac/xad ETHIOPIC SYLLABLE BBE
++<UAB2E>     /xea/xac/xae ETHIOPIC SYLLABLE BBO
++<UABC0>     /xea/xaf/x80 MEETEI MAYEK LETTER KOK
++<UABC1>     /xea/xaf/x81 MEETEI MAYEK LETTER SAM
++<UABC2>     /xea/xaf/x82 MEETEI MAYEK LETTER LAI
++<UABC3>     /xea/xaf/x83 MEETEI MAYEK LETTER MIT
++<UABC4>     /xea/xaf/x84 MEETEI MAYEK LETTER PA
++<UABC5>     /xea/xaf/x85 MEETEI MAYEK LETTER NA
++<UABC6>     /xea/xaf/x86 MEETEI MAYEK LETTER CHIL
++<UABC7>     /xea/xaf/x87 MEETEI MAYEK LETTER TIL
++<UABC8>     /xea/xaf/x88 MEETEI MAYEK LETTER KHOU
++<UABC9>     /xea/xaf/x89 MEETEI MAYEK LETTER NGOU
++<UABCA>     /xea/xaf/x8a MEETEI MAYEK LETTER THOU
++<UABCB>     /xea/xaf/x8b MEETEI MAYEK LETTER WAI
++<UABCC>     /xea/xaf/x8c MEETEI MAYEK LETTER YANG
++<UABCD>     /xea/xaf/x8d MEETEI MAYEK LETTER HUK
++<UABCE>     /xea/xaf/x8e MEETEI MAYEK LETTER UN
++<UABCF>     /xea/xaf/x8f MEETEI MAYEK LETTER I
++<UABD0>     /xea/xaf/x90 MEETEI MAYEK LETTER PHAM
++<UABD1>     /xea/xaf/x91 MEETEI MAYEK LETTER ATIYA
++<UABD2>     /xea/xaf/x92 MEETEI MAYEK LETTER GOK
++<UABD3>     /xea/xaf/x93 MEETEI MAYEK LETTER JHAM
++<UABD4>     /xea/xaf/x94 MEETEI MAYEK LETTER RAI
++<UABD5>     /xea/xaf/x95 MEETEI MAYEK LETTER BA
++<UABD6>     /xea/xaf/x96 MEETEI MAYEK LETTER JIL
++<UABD7>     /xea/xaf/x97 MEETEI MAYEK LETTER DIL
++<UABD8>     /xea/xaf/x98 MEETEI MAYEK LETTER GHOU
++<UABD9>     /xea/xaf/x99 MEETEI MAYEK LETTER DHOU
++<UABDA>     /xea/xaf/x9a MEETEI MAYEK LETTER BHAM
++<UABDB>     /xea/xaf/x9b MEETEI MAYEK LETTER KOK LONSUM
++<UABDC>     /xea/xaf/x9c MEETEI MAYEK LETTER LAI LONSUM
++<UABDD>     /xea/xaf/x9d MEETEI MAYEK LETTER MIT LONSUM
++<UABDE>     /xea/xaf/x9e MEETEI MAYEK LETTER PA LONSUM
++<UABDF>     /xea/xaf/x9f MEETEI MAYEK LETTER NA LONSUM
++<UABE0>     /xea/xaf/xa0 MEETEI MAYEK LETTER TIL LONSUM
++<UABE1>     /xea/xaf/xa1 MEETEI MAYEK LETTER NGOU LONSUM
++<UABE2>     /xea/xaf/xa2 MEETEI MAYEK LETTER I LONSUM
++<UABE3>     /xea/xaf/xa3 MEETEI MAYEK VOWEL SIGN ONAP
++<UABE4>     /xea/xaf/xa4 MEETEI MAYEK VOWEL SIGN INAP
++<UABE5>     /xea/xaf/xa5 MEETEI MAYEK VOWEL SIGN ANAP
++<UABE6>     /xea/xaf/xa6 MEETEI MAYEK VOWEL SIGN YENAP
++<UABE7>     /xea/xaf/xa7 MEETEI MAYEK VOWEL SIGN SOUNAP
++<UABE8>     /xea/xaf/xa8 MEETEI MAYEK VOWEL SIGN UNAP
++<UABE9>     /xea/xaf/xa9 MEETEI MAYEK VOWEL SIGN CHEINAP
++<UABEA>     /xea/xaf/xaa MEETEI MAYEK VOWEL SIGN NUNG
++<UABEB>     /xea/xaf/xab MEETEI MAYEK CHEIKHEI
++<UABEC>     /xea/xaf/xac MEETEI MAYEK LUM IYEK
++<UABED>     /xea/xaf/xad MEETEI MAYEK APUN IYEK
++<UABF0>     /xea/xaf/xb0 MEETEI MAYEK DIGIT ZERO
++<UABF1>     /xea/xaf/xb1 MEETEI MAYEK DIGIT ONE
++<UABF2>     /xea/xaf/xb2 MEETEI MAYEK DIGIT TWO
++<UABF3>     /xea/xaf/xb3 MEETEI MAYEK DIGIT THREE
++<UABF4>     /xea/xaf/xb4 MEETEI MAYEK DIGIT FOUR
++<UABF5>     /xea/xaf/xb5 MEETEI MAYEK DIGIT FIVE
++<UABF6>     /xea/xaf/xb6 MEETEI MAYEK DIGIT SIX
++<UABF7>     /xea/xaf/xb7 MEETEI MAYEK DIGIT SEVEN
++<UABF8>     /xea/xaf/xb8 MEETEI MAYEK DIGIT EIGHT
++<UABF9>     /xea/xaf/xb9 MEETEI MAYEK DIGIT NINE
+ <UAC00>     /xea/xb0/x80 HANGUL SYLLABLE GA
+ <UAC01>     /xea/xb0/x81 HANGUL SYLLABLE GAG
+ <UAC02>     /xea/xb0/x82 HANGUL SYLLABLE GAGG
+@@ -24736,6 +25836,78 @@ CHARMAP
+ <UD7A1>     /xed/x9e/xa1 HANGUL SYLLABLE HIT
+ <UD7A2>     /xed/x9e/xa2 HANGUL SYLLABLE HIP
+ <UD7A3>     /xed/x9e/xa3 HANGUL SYLLABLE HIH
++<UD7B0>     /xed/x9e/xb0 HANGUL JUNGSEONG O-YEO
++<UD7B1>     /xed/x9e/xb1 HANGUL JUNGSEONG O-O-I
++<UD7B2>     /xed/x9e/xb2 HANGUL JUNGSEONG YO-A
++<UD7B3>     /xed/x9e/xb3 HANGUL JUNGSEONG YO-AE
++<UD7B4>     /xed/x9e/xb4 HANGUL JUNGSEONG YO-EO
++<UD7B5>     /xed/x9e/xb5 HANGUL JUNGSEONG U-YEO
++<UD7B6>     /xed/x9e/xb6 HANGUL JUNGSEONG U-I-I
++<UD7B7>     /xed/x9e/xb7 HANGUL JUNGSEONG YU-AE
++<UD7B8>     /xed/x9e/xb8 HANGUL JUNGSEONG YU-O
++<UD7B9>     /xed/x9e/xb9 HANGUL JUNGSEONG EU-A
++<UD7BA>     /xed/x9e/xba HANGUL JUNGSEONG EU-EO
++<UD7BB>     /xed/x9e/xbb HANGUL JUNGSEONG EU-E
++<UD7BC>     /xed/x9e/xbc HANGUL JUNGSEONG EU-O
++<UD7BD>     /xed/x9e/xbd HANGUL JUNGSEONG I-YA-O
++<UD7BE>     /xed/x9e/xbe HANGUL JUNGSEONG I-YAE
++<UD7BF>     /xed/x9e/xbf HANGUL JUNGSEONG I-YEO
++<UD7C0>     /xed/x9f/x80 HANGUL JUNGSEONG I-YE
++<UD7C1>     /xed/x9f/x81 HANGUL JUNGSEONG I-O-I
++<UD7C2>     /xed/x9f/x82 HANGUL JUNGSEONG I-YO
++<UD7C3>     /xed/x9f/x83 HANGUL JUNGSEONG I-YU
++<UD7C4>     /xed/x9f/x84 HANGUL JUNGSEONG I-I
++<UD7C5>     /xed/x9f/x85 HANGUL JUNGSEONG ARAEA-A
++<UD7C6>     /xed/x9f/x86 HANGUL JUNGSEONG ARAEA-E
++<UD7CB>     /xed/x9f/x8b HANGUL JONGSEONG NIEUN-RIEUL
++<UD7CC>     /xed/x9f/x8c HANGUL JONGSEONG NIEUN-CHIEUCH
++<UD7CD>     /xed/x9f/x8d HANGUL JONGSEONG SSANGTIKEUT
++<UD7CE>     /xed/x9f/x8e HANGUL JONGSEONG SSANGTIKEUT-PIEUP
++<UD7CF>     /xed/x9f/x8f HANGUL JONGSEONG TIKEUT-PIEUP
++<UD7D0>     /xed/x9f/x90 HANGUL JONGSEONG TIKEUT-SIOS
++<UD7D1>     /xed/x9f/x91 HANGUL JONGSEONG TIKEUT-SIOS-KIYEOK
++<UD7D2>     /xed/x9f/x92 HANGUL JONGSEONG TIKEUT-CIEUC
++<UD7D3>     /xed/x9f/x93 HANGUL JONGSEONG TIKEUT-CHIEUCH
++<UD7D4>     /xed/x9f/x94 HANGUL JONGSEONG TIKEUT-THIEUTH
++<UD7D5>     /xed/x9f/x95 HANGUL JONGSEONG RIEUL-SSANGKIYEOK
++<UD7D6>     /xed/x9f/x96 HANGUL JONGSEONG RIEUL-KIYEOK-HIEUH
++<UD7D7>     /xed/x9f/x97 HANGUL JONGSEONG SSANGRIEUL-KHIEUKH
++<UD7D8>     /xed/x9f/x98 HANGUL JONGSEONG RIEUL-MIEUM-HIEUH
++<UD7D9>     /xed/x9f/x99 HANGUL JONGSEONG RIEUL-PIEUP-TIKEUT
++<UD7DA>     /xed/x9f/x9a HANGUL JONGSEONG RIEUL-PIEUP-PHIEUPH
++<UD7DB>     /xed/x9f/x9b HANGUL JONGSEONG RIEUL-YESIEUNG
++<UD7DC>     /xed/x9f/x9c HANGUL JONGSEONG RIEUL-YEORINHIEUH-HIEUH
++<UD7DD>     /xed/x9f/x9d HANGUL JONGSEONG KAPYEOUNRIEUL
++<UD7DE>     /xed/x9f/x9e HANGUL JONGSEONG MIEUM-NIEUN
++<UD7DF>     /xed/x9f/x9f HANGUL JONGSEONG MIEUM-SSANGNIEUN
++<UD7E0>     /xed/x9f/xa0 HANGUL JONGSEONG SSANGMIEUM
++<UD7E1>     /xed/x9f/xa1 HANGUL JONGSEONG MIEUM-PIEUP-SIOS
++<UD7E2>     /xed/x9f/xa2 HANGUL JONGSEONG MIEUM-CIEUC
++<UD7E3>     /xed/x9f/xa3 HANGUL JONGSEONG PIEUP-TIKEUT
++<UD7E4>     /xed/x9f/xa4 HANGUL JONGSEONG PIEUP-RIEUL-PHIEUPH
++<UD7E5>     /xed/x9f/xa5 HANGUL JONGSEONG PIEUP-MIEUM
++<UD7E6>     /xed/x9f/xa6 HANGUL JONGSEONG SSANGPIEUP
++<UD7E7>     /xed/x9f/xa7 HANGUL JONGSEONG PIEUP-SIOS-TIKEUT
++<UD7E8>     /xed/x9f/xa8 HANGUL JONGSEONG PIEUP-CIEUC
++<UD7E9>     /xed/x9f/xa9 HANGUL JONGSEONG PIEUP-CHIEUCH
++<UD7EA>     /xed/x9f/xaa HANGUL JONGSEONG SIOS-MIEUM
++<UD7EB>     /xed/x9f/xab HANGUL JONGSEONG SIOS-KAPYEOUNPIEUP
++<UD7EC>     /xed/x9f/xac HANGUL JONGSEONG SSANGSIOS-KIYEOK
++<UD7ED>     /xed/x9f/xad HANGUL JONGSEONG SSANGSIOS-TIKEUT
++<UD7EE>     /xed/x9f/xae HANGUL JONGSEONG SIOS-PANSIOS
++<UD7EF>     /xed/x9f/xaf HANGUL JONGSEONG SIOS-CIEUC
++<UD7F0>     /xed/x9f/xb0 HANGUL JONGSEONG SIOS-CHIEUCH
++<UD7F1>     /xed/x9f/xb1 HANGUL JONGSEONG SIOS-THIEUTH
++<UD7F2>     /xed/x9f/xb2 HANGUL JONGSEONG SIOS-HIEUH
++<UD7F3>     /xed/x9f/xb3 HANGUL JONGSEONG PANSIOS-PIEUP
++<UD7F4>     /xed/x9f/xb4 HANGUL JONGSEONG PANSIOS-KAPYEOUNPIEUP
++<UD7F5>     /xed/x9f/xb5 HANGUL JONGSEONG YESIEUNG-MIEUM
++<UD7F6>     /xed/x9f/xb6 HANGUL JONGSEONG YESIEUNG-HIEUH
++<UD7F7>     /xed/x9f/xb7 HANGUL JONGSEONG CIEUC-PIEUP
++<UD7F8>     /xed/x9f/xb8 HANGUL JONGSEONG CIEUC-SSANGPIEUP
++<UD7F9>     /xed/x9f/xb9 HANGUL JONGSEONG SSANGCIEUC
++<UD7FA>     /xed/x9f/xba HANGUL JONGSEONG PHIEUPH-SIOS
++<UD7FB>     /xed/x9f/xbb HANGUL JONGSEONG PHIEUPH-THIEUTH
+ % <UD800>     /xed/xa0/x80 <Non Private Use High Surrogate, First>
+ % <UDB7F>     /xed/xad/xbf <Non Private Use High Surrogate, Last>
+ % <UDB80>     /xed/xae/x80 <Private Use High Surrogate, First>
+@@ -25203,6 +26375,9 @@ CHARMAP
+ <UFA68>     /xef/xa9/xa8 CJK COMPATIBILITY IDEOGRAPH-FA68
+ <UFA69>     /xef/xa9/xa9 CJK COMPATIBILITY IDEOGRAPH-FA69
+ <UFA6A>     /xef/xa9/xaa CJK COMPATIBILITY IDEOGRAPH-FA6A
++<UFA6B>     /xef/xa9/xab CJK COMPATIBILITY IDEOGRAPH-FA6B
++<UFA6C>     /xef/xa9/xac CJK COMPATIBILITY IDEOGRAPH-FA6C
++<UFA6D>     /xef/xa9/xad CJK COMPATIBILITY IDEOGRAPH-FA6D
+ <UFA70>     /xef/xa9/xb0 CJK COMPATIBILITY IDEOGRAPH-FA70
+ <UFA71>     /xef/xa9/xb1 CJK COMPATIBILITY IDEOGRAPH-FA71
+ <UFA72>     /xef/xa9/xb2 CJK COMPATIBILITY IDEOGRAPH-FA72
+@@ -25465,6 +26640,22 @@ CHARMAP
+ <UFBAF>     /xef/xae/xaf ARABIC LETTER YEH BARREE FINAL FORM
+ <UFBB0>     /xef/xae/xb0 ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM
+ <UFBB1>     /xef/xae/xb1 ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
++<UFBB2>     /xef/xae/xb2 ARABIC SYMBOL DOT ABOVE
++<UFBB3>     /xef/xae/xb3 ARABIC SYMBOL DOT BELOW
++<UFBB4>     /xef/xae/xb4 ARABIC SYMBOL TWO DOTS ABOVE
++<UFBB5>     /xef/xae/xb5 ARABIC SYMBOL TWO DOTS BELOW
++<UFBB6>     /xef/xae/xb6 ARABIC SYMBOL THREE DOTS ABOVE
++<UFBB7>     /xef/xae/xb7 ARABIC SYMBOL THREE DOTS BELOW
++<UFBB8>     /xef/xae/xb8 ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS ABOVE
++<UFBB9>     /xef/xae/xb9 ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS BELOW
++<UFBBA>     /xef/xae/xba ARABIC SYMBOL FOUR DOTS ABOVE
++<UFBBB>     /xef/xae/xbb ARABIC SYMBOL FOUR DOTS BELOW
++<UFBBC>     /xef/xae/xbc ARABIC SYMBOL DOUBLE VERTICAL BAR BELOW
++<UFBBD>     /xef/xae/xbd ARABIC SYMBOL TWO DOTS VERTICALLY ABOVE
++<UFBBE>     /xef/xae/xbe ARABIC SYMBOL TWO DOTS VERTICALLY BELOW
++<UFBBF>     /xef/xae/xbf ARABIC SYMBOL RING
++<UFBC0>     /xef/xaf/x80 ARABIC SYMBOL SMALL TAH ABOVE
++<UFBC1>     /xef/xaf/x81 ARABIC SYMBOL SMALL TAH BELOW
+ <UFBD3>     /xef/xaf/x93 ARABIC LETTER NG ISOLATED FORM
+ <UFBD4>     /xef/xaf/x94 ARABIC LETTER NG FINAL FORM
+ <UFBD5>     /xef/xaf/x95 ARABIC LETTER NG INITIAL FORM
+@@ -27269,6 +28460,37 @@ CHARMAP
+ <U00010838> /xf0/x90/xa0/xb8 CYPRIOT SYLLABLE XE
+ <U0001083C> /xf0/x90/xa0/xbc CYPRIOT SYLLABLE ZA
+ <U0001083F> /xf0/x90/xa0/xbf CYPRIOT SYLLABLE ZO
++<U00010840> /xf0/x90/xa1/x80 IMPERIAL ARAMAIC LETTER ALEPH
++<U00010841> /xf0/x90/xa1/x81 IMPERIAL ARAMAIC LETTER BETH
++<U00010842> /xf0/x90/xa1/x82 IMPERIAL ARAMAIC LETTER GIMEL
++<U00010843> /xf0/x90/xa1/x83 IMPERIAL ARAMAIC LETTER DALETH
++<U00010844> /xf0/x90/xa1/x84 IMPERIAL ARAMAIC LETTER HE
++<U00010845> /xf0/x90/xa1/x85 IMPERIAL ARAMAIC LETTER WAW
++<U00010846> /xf0/x90/xa1/x86 IMPERIAL ARAMAIC LETTER ZAYIN
++<U00010847> /xf0/x90/xa1/x87 IMPERIAL ARAMAIC LETTER HETH
++<U00010848> /xf0/x90/xa1/x88 IMPERIAL ARAMAIC LETTER TETH
++<U00010849> /xf0/x90/xa1/x89 IMPERIAL ARAMAIC LETTER YODH
++<U0001084A> /xf0/x90/xa1/x8a IMPERIAL ARAMAIC LETTER KAPH
++<U0001084B> /xf0/x90/xa1/x8b IMPERIAL ARAMAIC LETTER LAMEDH
++<U0001084C> /xf0/x90/xa1/x8c IMPERIAL ARAMAIC LETTER MEM
++<U0001084D> /xf0/x90/xa1/x8d IMPERIAL ARAMAIC LETTER NUN
++<U0001084E> /xf0/x90/xa1/x8e IMPERIAL ARAMAIC LETTER SAMEKH
++<U0001084F> /xf0/x90/xa1/x8f IMPERIAL ARAMAIC LETTER AYIN
++<U00010850> /xf0/x90/xa1/x90 IMPERIAL ARAMAIC LETTER PE
++<U00010851> /xf0/x90/xa1/x91 IMPERIAL ARAMAIC LETTER SADHE
++<U00010852> /xf0/x90/xa1/x92 IMPERIAL ARAMAIC LETTER QOPH
++<U00010853> /xf0/x90/xa1/x93 IMPERIAL ARAMAIC LETTER RESH
++<U00010854> /xf0/x90/xa1/x94 IMPERIAL ARAMAIC LETTER SHIN
++<U00010855> /xf0/x90/xa1/x95 IMPERIAL ARAMAIC LETTER TAW
++<U00010857> /xf0/x90/xa1/x97 IMPERIAL ARAMAIC SECTION SIGN
++<U00010858> /xf0/x90/xa1/x98 IMPERIAL ARAMAIC NUMBER ONE
++<U00010859> /xf0/x90/xa1/x99 IMPERIAL ARAMAIC NUMBER TWO
++<U0001085A> /xf0/x90/xa1/x9a IMPERIAL ARAMAIC NUMBER THREE
++<U0001085B> /xf0/x90/xa1/x9b IMPERIAL ARAMAIC NUMBER TEN
++<U0001085C> /xf0/x90/xa1/x9c IMPERIAL ARAMAIC NUMBER TWENTY
++<U0001085D> /xf0/x90/xa1/x9d IMPERIAL ARAMAIC NUMBER ONE HUNDRED
++<U0001085E> /xf0/x90/xa1/x9e IMPERIAL ARAMAIC NUMBER ONE THOUSAND
++<U0001085F> /xf0/x90/xa1/x9f IMPERIAL ARAMAIC NUMBER TEN THOUSAND
+ <U00010900> /xf0/x90/xa4/x80 PHOENICIAN LETTER ALF
+ <U00010901> /xf0/x90/xa4/x81 PHOENICIAN LETTER BET
+ <U00010902> /xf0/x90/xa4/x82 PHOENICIAN LETTER GAML
+@@ -27295,6 +28517,8 @@ CHARMAP
+ <U00010917> /xf0/x90/xa4/x97 PHOENICIAN NUMBER TEN
+ <U00010918> /xf0/x90/xa4/x98 PHOENICIAN NUMBER TWENTY
+ <U00010919> /xf0/x90/xa4/x99 PHOENICIAN NUMBER ONE HUNDRED
++<U0001091A> /xf0/x90/xa4/x9a PHOENICIAN NUMBER TWO
++<U0001091B> /xf0/x90/xa4/x9b PHOENICIAN NUMBER THREE
+ <U0001091F> /xf0/x90/xa4/x9f PHOENICIAN WORD SEPARATOR
+ <U00010920> /xf0/x90/xa4/xa0 LYDIAN LETTER A
+ <U00010921> /xf0/x90/xa4/xa1 LYDIAN LETTER B
+@@ -27388,6 +28612,434 @@ CHARMAP
+ <U00010A56> /xf0/x90/xa9/x96 KHAROSHTHI PUNCTUATION DANDA
+ <U00010A57> /xf0/x90/xa9/x97 KHAROSHTHI PUNCTUATION DOUBLE DANDA
+ <U00010A58> /xf0/x90/xa9/x98 KHAROSHTHI PUNCTUATION LINES
++<U00010A60> /xf0/x90/xa9/xa0 OLD SOUTH ARABIAN LETTER HE
++<U00010A61> /xf0/x90/xa9/xa1 OLD SOUTH ARABIAN LETTER LAMEDH
++<U00010A62> /xf0/x90/xa9/xa2 OLD SOUTH ARABIAN LETTER HETH
++<U00010A63> /xf0/x90/xa9/xa3 OLD SOUTH ARABIAN LETTER MEM
++<U00010A64> /xf0/x90/xa9/xa4 OLD SOUTH ARABIAN LETTER QOPH
++<U00010A65> /xf0/x90/xa9/xa5 OLD SOUTH ARABIAN LETTER WAW
++<U00010A66> /xf0/x90/xa9/xa6 OLD SOUTH ARABIAN LETTER SHIN
++<U00010A67> /xf0/x90/xa9/xa7 OLD SOUTH ARABIAN LETTER RESH
++<U00010A68> /xf0/x90/xa9/xa8 OLD SOUTH ARABIAN LETTER BETH
++<U00010A69> /xf0/x90/xa9/xa9 OLD SOUTH ARABIAN LETTER TAW
++<U00010A6A> /xf0/x90/xa9/xaa OLD SOUTH ARABIAN LETTER SAT
++<U00010A6B> /xf0/x90/xa9/xab OLD SOUTH ARABIAN LETTER KAPH
++<U00010A6C> /xf0/x90/xa9/xac OLD SOUTH ARABIAN LETTER NUN
++<U00010A6D> /xf0/x90/xa9/xad OLD SOUTH ARABIAN LETTER KHETH
++<U00010A6E> /xf0/x90/xa9/xae OLD SOUTH ARABIAN LETTER SADHE
++<U00010A6F> /xf0/x90/xa9/xaf OLD SOUTH ARABIAN LETTER SAMEKH
++<U00010A70> /xf0/x90/xa9/xb0 OLD SOUTH ARABIAN LETTER FE
++<U00010A71> /xf0/x90/xa9/xb1 OLD SOUTH ARABIAN LETTER ALEF
++<U00010A72> /xf0/x90/xa9/xb2 OLD SOUTH ARABIAN LETTER AYN
++<U00010A73> /xf0/x90/xa9/xb3 OLD SOUTH ARABIAN LETTER DHADHE
++<U00010A74> /xf0/x90/xa9/xb4 OLD SOUTH ARABIAN LETTER GIMEL
++<U00010A75> /xf0/x90/xa9/xb5 OLD SOUTH ARABIAN LETTER DALETH
++<U00010A76> /xf0/x90/xa9/xb6 OLD SOUTH ARABIAN LETTER GHAYN
++<U00010A77> /xf0/x90/xa9/xb7 OLD SOUTH ARABIAN LETTER TETH
++<U00010A78> /xf0/x90/xa9/xb8 OLD SOUTH ARABIAN LETTER ZAYN
++<U00010A79> /xf0/x90/xa9/xb9 OLD SOUTH ARABIAN LETTER DHALETH
++<U00010A7A> /xf0/x90/xa9/xba OLD SOUTH ARABIAN LETTER YODH
++<U00010A7B> /xf0/x90/xa9/xbb OLD SOUTH ARABIAN LETTER THAW
++<U00010A7C> /xf0/x90/xa9/xbc OLD SOUTH ARABIAN LETTER THETH
++<U00010A7D> /xf0/x90/xa9/xbd OLD SOUTH ARABIAN NUMBER ONE
++<U00010A7E> /xf0/x90/xa9/xbe OLD SOUTH ARABIAN NUMBER FIFTY
++<U00010A7F> /xf0/x90/xa9/xbf OLD SOUTH ARABIAN NUMERIC INDICATOR
++<U00010B00> /xf0/x90/xac/x80 AVESTAN LETTER A
++<U00010B01> /xf0/x90/xac/x81 AVESTAN LETTER AA
++<U00010B02> /xf0/x90/xac/x82 AVESTAN LETTER AO
++<U00010B03> /xf0/x90/xac/x83 AVESTAN LETTER AAO
++<U00010B04> /xf0/x90/xac/x84 AVESTAN LETTER AN
++<U00010B05> /xf0/x90/xac/x85 AVESTAN LETTER AAN
++<U00010B06> /xf0/x90/xac/x86 AVESTAN LETTER AE
++<U00010B07> /xf0/x90/xac/x87 AVESTAN LETTER AEE
++<U00010B08> /xf0/x90/xac/x88 AVESTAN LETTER E
++<U00010B09> /xf0/x90/xac/x89 AVESTAN LETTER EE
++<U00010B0A> /xf0/x90/xac/x8a AVESTAN LETTER O
++<U00010B0B> /xf0/x90/xac/x8b AVESTAN LETTER OO
++<U00010B0C> /xf0/x90/xac/x8c AVESTAN LETTER I
++<U00010B0D> /xf0/x90/xac/x8d AVESTAN LETTER II
++<U00010B0E> /xf0/x90/xac/x8e AVESTAN LETTER U
++<U00010B0F> /xf0/x90/xac/x8f AVESTAN LETTER UU
++<U00010B10> /xf0/x90/xac/x90 AVESTAN LETTER KE
++<U00010B11> /xf0/x90/xac/x91 AVESTAN LETTER XE
++<U00010B12> /xf0/x90/xac/x92 AVESTAN LETTER XYE
++<U00010B13> /xf0/x90/xac/x93 AVESTAN LETTER XVE
++<U00010B14> /xf0/x90/xac/x94 AVESTAN LETTER GE
++<U00010B15> /xf0/x90/xac/x95 AVESTAN LETTER GGE
++<U00010B16> /xf0/x90/xac/x96 AVESTAN LETTER GHE
++<U00010B17> /xf0/x90/xac/x97 AVESTAN LETTER CE
++<U00010B18> /xf0/x90/xac/x98 AVESTAN LETTER JE
++<U00010B19> /xf0/x90/xac/x99 AVESTAN LETTER TE
++<U00010B1A> /xf0/x90/xac/x9a AVESTAN LETTER THE
++<U00010B1B> /xf0/x90/xac/x9b AVESTAN LETTER DE
++<U00010B1C> /xf0/x90/xac/x9c AVESTAN LETTER DHE
++<U00010B1D> /xf0/x90/xac/x9d AVESTAN LETTER TTE
++<U00010B1E> /xf0/x90/xac/x9e AVESTAN LETTER PE
++<U00010B1F> /xf0/x90/xac/x9f AVESTAN LETTER FE
++<U00010B20> /xf0/x90/xac/xa0 AVESTAN LETTER BE
++<U00010B21> /xf0/x90/xac/xa1 AVESTAN LETTER BHE
++<U00010B22> /xf0/x90/xac/xa2 AVESTAN LETTER NGE
++<U00010B23> /xf0/x90/xac/xa3 AVESTAN LETTER NGYE
++<U00010B24> /xf0/x90/xac/xa4 AVESTAN LETTER NGVE
++<U00010B25> /xf0/x90/xac/xa5 AVESTAN LETTER NE
++<U00010B26> /xf0/x90/xac/xa6 AVESTAN LETTER NYE
++<U00010B27> /xf0/x90/xac/xa7 AVESTAN LETTER NNE
++<U00010B28> /xf0/x90/xac/xa8 AVESTAN LETTER ME
++<U00010B29> /xf0/x90/xac/xa9 AVESTAN LETTER HME
++<U00010B2A> /xf0/x90/xac/xaa AVESTAN LETTER YYE
++<U00010B2B> /xf0/x90/xac/xab AVESTAN LETTER YE
++<U00010B2C> /xf0/x90/xac/xac AVESTAN LETTER VE
++<U00010B2D> /xf0/x90/xac/xad AVESTAN LETTER RE
++<U00010B2E> /xf0/x90/xac/xae AVESTAN LETTER LE
++<U00010B2F> /xf0/x90/xac/xaf AVESTAN LETTER SE
++<U00010B30> /xf0/x90/xac/xb0 AVESTAN LETTER ZE
++<U00010B31> /xf0/x90/xac/xb1 AVESTAN LETTER SHE
++<U00010B32> /xf0/x90/xac/xb2 AVESTAN LETTER ZHE
++<U00010B33> /xf0/x90/xac/xb3 AVESTAN LETTER SHYE
++<U00010B34> /xf0/x90/xac/xb4 AVESTAN LETTER SSHE
++<U00010B35> /xf0/x90/xac/xb5 AVESTAN LETTER HE
++<U00010B39> /xf0/x90/xac/xb9 AVESTAN ABBREVIATION MARK
++<U00010B3A> /xf0/x90/xac/xba TINY TWO DOTS OVER ONE DOT PUNCTUATION
++<U00010B3B> /xf0/x90/xac/xbb SMALL TWO DOTS OVER ONE DOT PUNCTUATION
++<U00010B3C> /xf0/x90/xac/xbc LARGE TWO DOTS OVER ONE DOT PUNCTUATION
++<U00010B3D> /xf0/x90/xac/xbd LARGE ONE DOT OVER TWO DOTS PUNCTUATION
++<U00010B3E> /xf0/x90/xac/xbe LARGE TWO RINGS OVER ONE RING PUNCTUATION
++<U00010B3F> /xf0/x90/xac/xbf LARGE ONE RING OVER TWO RINGS PUNCTUATION
++<U00010B40> /xf0/x90/xad/x80 INSCRIPTIONAL PARTHIAN LETTER ALEPH
++<U00010B41> /xf0/x90/xad/x81 INSCRIPTIONAL PARTHIAN LETTER BETH
++<U00010B42> /xf0/x90/xad/x82 INSCRIPTIONAL PARTHIAN LETTER GIMEL
++<U00010B43> /xf0/x90/xad/x83 INSCRIPTIONAL PARTHIAN LETTER DALETH
++<U00010B44> /xf0/x90/xad/x84 INSCRIPTIONAL PARTHIAN LETTER HE
++<U00010B45> /xf0/x90/xad/x85 INSCRIPTIONAL PARTHIAN LETTER WAW
++<U00010B46> /xf0/x90/xad/x86 INSCRIPTIONAL PARTHIAN LETTER ZAYIN
++<U00010B47> /xf0/x90/xad/x87 INSCRIPTIONAL PARTHIAN LETTER HETH
++<U00010B48> /xf0/x90/xad/x88 INSCRIPTIONAL PARTHIAN LETTER TETH
++<U00010B49> /xf0/x90/xad/x89 INSCRIPTIONAL PARTHIAN LETTER YODH
++<U00010B4A> /xf0/x90/xad/x8a INSCRIPTIONAL PARTHIAN LETTER KAPH
++<U00010B4B> /xf0/x90/xad/x8b INSCRIPTIONAL PARTHIAN LETTER LAMEDH
++<U00010B4C> /xf0/x90/xad/x8c INSCRIPTIONAL PARTHIAN LETTER MEM
++<U00010B4D> /xf0/x90/xad/x8d INSCRIPTIONAL PARTHIAN LETTER NUN
++<U00010B4E> /xf0/x90/xad/x8e INSCRIPTIONAL PARTHIAN LETTER SAMEKH
++<U00010B4F> /xf0/x90/xad/x8f INSCRIPTIONAL PARTHIAN LETTER AYIN
++<U00010B50> /xf0/x90/xad/x90 INSCRIPTIONAL PARTHIAN LETTER PE
++<U00010B51> /xf0/x90/xad/x91 INSCRIPTIONAL PARTHIAN LETTER SADHE
++<U00010B52> /xf0/x90/xad/x92 INSCRIPTIONAL PARTHIAN LETTER QOPH
++<U00010B53> /xf0/x90/xad/x93 INSCRIPTIONAL PARTHIAN LETTER RESH
++<U00010B54> /xf0/x90/xad/x94 INSCRIPTIONAL PARTHIAN LETTER SHIN
++<U00010B55> /xf0/x90/xad/x95 INSCRIPTIONAL PARTHIAN LETTER TAW
++<U00010B58> /xf0/x90/xad/x98 INSCRIPTIONAL PARTHIAN NUMBER ONE
++<U00010B59> /xf0/x90/xad/x99 INSCRIPTIONAL PARTHIAN NUMBER TWO
++<U00010B5A> /xf0/x90/xad/x9a INSCRIPTIONAL PARTHIAN NUMBER THREE
++<U00010B5B> /xf0/x90/xad/x9b INSCRIPTIONAL PARTHIAN NUMBER FOUR
++<U00010B5C> /xf0/x90/xad/x9c INSCRIPTIONAL PARTHIAN NUMBER TEN
++<U00010B5D> /xf0/x90/xad/x9d INSCRIPTIONAL PARTHIAN NUMBER TWENTY
++<U00010B5E> /xf0/x90/xad/x9e INSCRIPTIONAL PARTHIAN NUMBER ONE HUNDRED
++<U00010B5F> /xf0/x90/xad/x9f INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND
++<U00010B60> /xf0/x90/xad/xa0 INSCRIPTIONAL PAHLAVI LETTER ALEPH
++<U00010B61> /xf0/x90/xad/xa1 INSCRIPTIONAL PAHLAVI LETTER BETH
++<U00010B62> /xf0/x90/xad/xa2 INSCRIPTIONAL PAHLAVI LETTER GIMEL
++<U00010B63> /xf0/x90/xad/xa3 INSCRIPTIONAL PAHLAVI LETTER DALETH
++<U00010B64> /xf0/x90/xad/xa4 INSCRIPTIONAL PAHLAVI LETTER HE
++<U00010B65> /xf0/x90/xad/xa5 INSCRIPTIONAL PAHLAVI LETTER WAW-AYIN-RESH
++<U00010B66> /xf0/x90/xad/xa6 INSCRIPTIONAL PAHLAVI LETTER ZAYIN
++<U00010B67> /xf0/x90/xad/xa7 INSCRIPTIONAL PAHLAVI LETTER HETH
++<U00010B68> /xf0/x90/xad/xa8 INSCRIPTIONAL PAHLAVI LETTER TETH
++<U00010B69> /xf0/x90/xad/xa9 INSCRIPTIONAL PAHLAVI LETTER YODH
++<U00010B6A> /xf0/x90/xad/xaa INSCRIPTIONAL PAHLAVI LETTER KAPH
++<U00010B6B> /xf0/x90/xad/xab INSCRIPTIONAL PAHLAVI LETTER LAMEDH
++<U00010B6C> /xf0/x90/xad/xac INSCRIPTIONAL PAHLAVI LETTER MEM-QOPH
++<U00010B6D> /xf0/x90/xad/xad INSCRIPTIONAL PAHLAVI LETTER NUN
++<U00010B6E> /xf0/x90/xad/xae INSCRIPTIONAL PAHLAVI LETTER SAMEKH
++<U00010B6F> /xf0/x90/xad/xaf INSCRIPTIONAL PAHLAVI LETTER PE
++<U00010B70> /xf0/x90/xad/xb0 INSCRIPTIONAL PAHLAVI LETTER SADHE
++<U00010B71> /xf0/x90/xad/xb1 INSCRIPTIONAL PAHLAVI LETTER SHIN
++<U00010B72> /xf0/x90/xad/xb2 INSCRIPTIONAL PAHLAVI LETTER TAW
++<U00010B78> /xf0/x90/xad/xb8 INSCRIPTIONAL PAHLAVI NUMBER ONE
++<U00010B79> /xf0/x90/xad/xb9 INSCRIPTIONAL PAHLAVI NUMBER TWO
++<U00010B7A> /xf0/x90/xad/xba INSCRIPTIONAL PAHLAVI NUMBER THREE
++<U00010B7B> /xf0/x90/xad/xbb INSCRIPTIONAL PAHLAVI NUMBER FOUR
++<U00010B7C> /xf0/x90/xad/xbc INSCRIPTIONAL PAHLAVI NUMBER TEN
++<U00010B7D> /xf0/x90/xad/xbd INSCRIPTIONAL PAHLAVI NUMBER TWENTY
++<U00010B7E> /xf0/x90/xad/xbe INSCRIPTIONAL PAHLAVI NUMBER ONE HUNDRED
++<U00010B7F> /xf0/x90/xad/xbf INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND
++<U00010C00> /xf0/x90/xb0/x80 OLD TURKIC LETTER ORKHON A
++<U00010C01> /xf0/x90/xb0/x81 OLD TURKIC LETTER YENISEI A
++<U00010C02> /xf0/x90/xb0/x82 OLD TURKIC LETTER YENISEI AE
++<U00010C03> /xf0/x90/xb0/x83 OLD TURKIC LETTER ORKHON I
++<U00010C04> /xf0/x90/xb0/x84 OLD TURKIC LETTER YENISEI I
++<U00010C05> /xf0/x90/xb0/x85 OLD TURKIC LETTER YENISEI E
++<U00010C06> /xf0/x90/xb0/x86 OLD TURKIC LETTER ORKHON O
++<U00010C07> /xf0/x90/xb0/x87 OLD TURKIC LETTER ORKHON OE
++<U00010C08> /xf0/x90/xb0/x88 OLD TURKIC LETTER YENISEI OE
++<U00010C09> /xf0/x90/xb0/x89 OLD TURKIC LETTER ORKHON AB
++<U00010C0A> /xf0/x90/xb0/x8a OLD TURKIC LETTER YENISEI AB
++<U00010C0B> /xf0/x90/xb0/x8b OLD TURKIC LETTER ORKHON AEB
++<U00010C0C> /xf0/x90/xb0/x8c OLD TURKIC LETTER YENISEI AEB
++<U00010C0D> /xf0/x90/xb0/x8d OLD TURKIC LETTER ORKHON AG
++<U00010C0E> /xf0/x90/xb0/x8e OLD TURKIC LETTER YENISEI AG
++<U00010C0F> /xf0/x90/xb0/x8f OLD TURKIC LETTER ORKHON AEG
++<U00010C10> /xf0/x90/xb0/x90 OLD TURKIC LETTER YENISEI AEG
++<U00010C11> /xf0/x90/xb0/x91 OLD TURKIC LETTER ORKHON AD
++<U00010C12> /xf0/x90/xb0/x92 OLD TURKIC LETTER YENISEI AD
++<U00010C13> /xf0/x90/xb0/x93 OLD TURKIC LETTER ORKHON AED
++<U00010C14> /xf0/x90/xb0/x94 OLD TURKIC LETTER ORKHON EZ
++<U00010C15> /xf0/x90/xb0/x95 OLD TURKIC LETTER YENISEI EZ
++<U00010C16> /xf0/x90/xb0/x96 OLD TURKIC LETTER ORKHON AY
++<U00010C17> /xf0/x90/xb0/x97 OLD TURKIC LETTER YENISEI AY
++<U00010C18> /xf0/x90/xb0/x98 OLD TURKIC LETTER ORKHON AEY
++<U00010C19> /xf0/x90/xb0/x99 OLD TURKIC LETTER YENISEI AEY
++<U00010C1A> /xf0/x90/xb0/x9a OLD TURKIC LETTER ORKHON AEK
++<U00010C1B> /xf0/x90/xb0/x9b OLD TURKIC LETTER YENISEI AEK
++<U00010C1C> /xf0/x90/xb0/x9c OLD TURKIC LETTER ORKHON OEK
++<U00010C1D> /xf0/x90/xb0/x9d OLD TURKIC LETTER YENISEI OEK
++<U00010C1E> /xf0/x90/xb0/x9e OLD TURKIC LETTER ORKHON AL
++<U00010C1F> /xf0/x90/xb0/x9f OLD TURKIC LETTER YENISEI AL
++<U00010C20> /xf0/x90/xb0/xa0 OLD TURKIC LETTER ORKHON AEL
++<U00010C21> /xf0/x90/xb0/xa1 OLD TURKIC LETTER ORKHON ELT
++<U00010C22> /xf0/x90/xb0/xa2 OLD TURKIC LETTER ORKHON EM
++<U00010C23> /xf0/x90/xb0/xa3 OLD TURKIC LETTER ORKHON AN
++<U00010C24> /xf0/x90/xb0/xa4 OLD TURKIC LETTER ORKHON AEN
++<U00010C25> /xf0/x90/xb0/xa5 OLD TURKIC LETTER YENISEI AEN
++<U00010C26> /xf0/x90/xb0/xa6 OLD TURKIC LETTER ORKHON ENT
++<U00010C27> /xf0/x90/xb0/xa7 OLD TURKIC LETTER YENISEI ENT
++<U00010C28> /xf0/x90/xb0/xa8 OLD TURKIC LETTER ORKHON ENC
++<U00010C29> /xf0/x90/xb0/xa9 OLD TURKIC LETTER YENISEI ENC
++<U00010C2A> /xf0/x90/xb0/xaa OLD TURKIC LETTER ORKHON ENY
++<U00010C2B> /xf0/x90/xb0/xab OLD TURKIC LETTER YENISEI ENY
++<U00010C2C> /xf0/x90/xb0/xac OLD TURKIC LETTER YENISEI ANG
++<U00010C2D> /xf0/x90/xb0/xad OLD TURKIC LETTER ORKHON ENG
++<U00010C2E> /xf0/x90/xb0/xae OLD TURKIC LETTER YENISEI AENG
++<U00010C2F> /xf0/x90/xb0/xaf OLD TURKIC LETTER ORKHON EP
++<U00010C30> /xf0/x90/xb0/xb0 OLD TURKIC LETTER ORKHON OP
++<U00010C31> /xf0/x90/xb0/xb1 OLD TURKIC LETTER ORKHON IC
++<U00010C32> /xf0/x90/xb0/xb2 OLD TURKIC LETTER ORKHON EC
++<U00010C33> /xf0/x90/xb0/xb3 OLD TURKIC LETTER YENISEI EC
++<U00010C34> /xf0/x90/xb0/xb4 OLD TURKIC LETTER ORKHON AQ
++<U00010C35> /xf0/x90/xb0/xb5 OLD TURKIC LETTER YENISEI AQ
++<U00010C36> /xf0/x90/xb0/xb6 OLD TURKIC LETTER ORKHON IQ
++<U00010C37> /xf0/x90/xb0/xb7 OLD TURKIC LETTER YENISEI IQ
++<U00010C38> /xf0/x90/xb0/xb8 OLD TURKIC LETTER ORKHON OQ
++<U00010C39> /xf0/x90/xb0/xb9 OLD TURKIC LETTER YENISEI OQ
++<U00010C3A> /xf0/x90/xb0/xba OLD TURKIC LETTER ORKHON AR
++<U00010C3B> /xf0/x90/xb0/xbb OLD TURKIC LETTER YENISEI AR
++<U00010C3C> /xf0/x90/xb0/xbc OLD TURKIC LETTER ORKHON AER
++<U00010C3D> /xf0/x90/xb0/xbd OLD TURKIC LETTER ORKHON AS
++<U00010C3E> /xf0/x90/xb0/xbe OLD TURKIC LETTER ORKHON AES
++<U00010C3F> /xf0/x90/xb0/xbf OLD TURKIC LETTER ORKHON ASH
++<U00010C40> /xf0/x90/xb1/x80 OLD TURKIC LETTER YENISEI ASH
++<U00010C41> /xf0/x90/xb1/x81 OLD TURKIC LETTER ORKHON ESH
++<U00010C42> /xf0/x90/xb1/x82 OLD TURKIC LETTER YENISEI ESH
++<U00010C43> /xf0/x90/xb1/x83 OLD TURKIC LETTER ORKHON AT
++<U00010C44> /xf0/x90/xb1/x84 OLD TURKIC LETTER YENISEI AT
++<U00010C45> /xf0/x90/xb1/x85 OLD TURKIC LETTER ORKHON AET
++<U00010C46> /xf0/x90/xb1/x86 OLD TURKIC LETTER YENISEI AET
++<U00010C47> /xf0/x90/xb1/x87 OLD TURKIC LETTER ORKHON OT
++<U00010C48> /xf0/x90/xb1/x88 OLD TURKIC LETTER ORKHON BASH
++<U00010E60> /xf0/x90/xb9/xa0 RUMI DIGIT ONE
++<U00010E61> /xf0/x90/xb9/xa1 RUMI DIGIT TWO
++<U00010E62> /xf0/x90/xb9/xa2 RUMI DIGIT THREE
++<U00010E63> /xf0/x90/xb9/xa3 RUMI DIGIT FOUR
++<U00010E64> /xf0/x90/xb9/xa4 RUMI DIGIT FIVE
++<U00010E65> /xf0/x90/xb9/xa5 RUMI DIGIT SIX
++<U00010E66> /xf0/x90/xb9/xa6 RUMI DIGIT SEVEN
++<U00010E67> /xf0/x90/xb9/xa7 RUMI DIGIT EIGHT
++<U00010E68> /xf0/x90/xb9/xa8 RUMI DIGIT NINE
++<U00010E69> /xf0/x90/xb9/xa9 RUMI NUMBER TEN
++<U00010E6A> /xf0/x90/xb9/xaa RUMI NUMBER TWENTY
++<U00010E6B> /xf0/x90/xb9/xab RUMI NUMBER THIRTY
++<U00010E6C> /xf0/x90/xb9/xac RUMI NUMBER FORTY
++<U00010E6D> /xf0/x90/xb9/xad RUMI NUMBER FIFTY
++<U00010E6E> /xf0/x90/xb9/xae RUMI NUMBER SIXTY
++<U00010E6F> /xf0/x90/xb9/xaf RUMI NUMBER SEVENTY
++<U00010E70> /xf0/x90/xb9/xb0 RUMI NUMBER EIGHTY
++<U00010E71> /xf0/x90/xb9/xb1 RUMI NUMBER NINETY
++<U00010E72> /xf0/x90/xb9/xb2 RUMI NUMBER ONE HUNDRED
++<U00010E73> /xf0/x90/xb9/xb3 RUMI NUMBER TWO HUNDRED
++<U00010E74> /xf0/x90/xb9/xb4 RUMI NUMBER THREE HUNDRED
++<U00010E75> /xf0/x90/xb9/xb5 RUMI NUMBER FOUR HUNDRED
++<U00010E76> /xf0/x90/xb9/xb6 RUMI NUMBER FIVE HUNDRED
++<U00010E77> /xf0/x90/xb9/xb7 RUMI NUMBER SIX HUNDRED
++<U00010E78> /xf0/x90/xb9/xb8 RUMI NUMBER SEVEN HUNDRED
++<U00010E79> /xf0/x90/xb9/xb9 RUMI NUMBER EIGHT HUNDRED
++<U00010E7A> /xf0/x90/xb9/xba RUMI NUMBER NINE HUNDRED
++<U00010E7B> /xf0/x90/xb9/xbb RUMI FRACTION ONE HALF
++<U00010E7C> /xf0/x90/xb9/xbc RUMI FRACTION ONE QUARTER
++<U00010E7D> /xf0/x90/xb9/xbd RUMI FRACTION ONE THIRD
++<U00010E7E> /xf0/x90/xb9/xbe RUMI FRACTION TWO THIRDS
++<U00011000> /xf0/x91/x80/x80 BRAHMI SIGN CANDRABINDU
++<U00011001> /xf0/x91/x80/x81 BRAHMI SIGN ANUSVARA
++<U00011002> /xf0/x91/x80/x82 BRAHMI SIGN VISARGA
++<U00011003> /xf0/x91/x80/x83 BRAHMI SIGN JIHVAMULIYA
++<U00011004> /xf0/x91/x80/x84 BRAHMI SIGN UPADHMANIYA
++<U00011005> /xf0/x91/x80/x85 BRAHMI LETTER A
++<U00011006> /xf0/x91/x80/x86 BRAHMI LETTER AA
++<U00011007> /xf0/x91/x80/x87 BRAHMI LETTER I
++<U00011008> /xf0/x91/x80/x88 BRAHMI LETTER II
++<U00011009> /xf0/x91/x80/x89 BRAHMI LETTER U
++<U0001100A> /xf0/x91/x80/x8a BRAHMI LETTER UU
++<U0001100B> /xf0/x91/x80/x8b BRAHMI LETTER VOCALIC R
++<U0001100C> /xf0/x91/x80/x8c BRAHMI LETTER VOCALIC RR
++<U0001100D> /xf0/x91/x80/x8d BRAHMI LETTER VOCALIC L
++<U0001100E> /xf0/x91/x80/x8e BRAHMI LETTER VOCALIC LL
++<U0001100F> /xf0/x91/x80/x8f BRAHMI LETTER E
++<U00011010> /xf0/x91/x80/x90 BRAHMI LETTER AI
++<U00011011> /xf0/x91/x80/x91 BRAHMI LETTER O
++<U00011012> /xf0/x91/x80/x92 BRAHMI LETTER AU
++<U00011013> /xf0/x91/x80/x93 BRAHMI LETTER KA
++<U00011014> /xf0/x91/x80/x94 BRAHMI LETTER KHA
++<U00011015> /xf0/x91/x80/x95 BRAHMI LETTER GA
++<U00011016> /xf0/x91/x80/x96 BRAHMI LETTER GHA
++<U00011017> /xf0/x91/x80/x97 BRAHMI LETTER NGA
++<U00011018> /xf0/x91/x80/x98 BRAHMI LETTER CA
++<U00011019> /xf0/x91/x80/x99 BRAHMI LETTER CHA
++<U0001101A> /xf0/x91/x80/x9a BRAHMI LETTER JA
++<U0001101B> /xf0/x91/x80/x9b BRAHMI LETTER JHA
++<U0001101C> /xf0/x91/x80/x9c BRAHMI LETTER NYA
++<U0001101D> /xf0/x91/x80/x9d BRAHMI LETTER TTA
++<U0001101E> /xf0/x91/x80/x9e BRAHMI LETTER TTHA
++<U0001101F> /xf0/x91/x80/x9f BRAHMI LETTER DDA
++<U00011020> /xf0/x91/x80/xa0 BRAHMI LETTER DDHA
++<U00011021> /xf0/x91/x80/xa1 BRAHMI LETTER NNA
++<U00011022> /xf0/x91/x80/xa2 BRAHMI LETTER TA
++<U00011023> /xf0/x91/x80/xa3 BRAHMI LETTER THA
++<U00011024> /xf0/x91/x80/xa4 BRAHMI LETTER DA
++<U00011025> /xf0/x91/x80/xa5 BRAHMI LETTER DHA
++<U00011026> /xf0/x91/x80/xa6 BRAHMI LETTER NA
++<U00011027> /xf0/x91/x80/xa7 BRAHMI LETTER PA
++<U00011028> /xf0/x91/x80/xa8 BRAHMI LETTER PHA
++<U00011029> /xf0/x91/x80/xa9 BRAHMI LETTER BA
++<U0001102A> /xf0/x91/x80/xaa BRAHMI LETTER BHA
++<U0001102B> /xf0/x91/x80/xab BRAHMI LETTER MA
++<U0001102C> /xf0/x91/x80/xac BRAHMI LETTER YA
++<U0001102D> /xf0/x91/x80/xad BRAHMI LETTER RA
++<U0001102E> /xf0/x91/x80/xae BRAHMI LETTER LA
++<U0001102F> /xf0/x91/x80/xaf BRAHMI LETTER VA
++<U00011030> /xf0/x91/x80/xb0 BRAHMI LETTER SHA
++<U00011031> /xf0/x91/x80/xb1 BRAHMI LETTER SSA
++<U00011032> /xf0/x91/x80/xb2 BRAHMI LETTER SA
++<U00011033> /xf0/x91/x80/xb3 BRAHMI LETTER HA
++<U00011034> /xf0/x91/x80/xb4 BRAHMI LETTER LLA
++<U00011035> /xf0/x91/x80/xb5 BRAHMI LETTER OLD TAMIL LLLA
++<U00011036> /xf0/x91/x80/xb6 BRAHMI LETTER OLD TAMIL RRA
++<U00011037> /xf0/x91/x80/xb7 BRAHMI LETTER OLD TAMIL NNNA
++<U00011038> /xf0/x91/x80/xb8 BRAHMI VOWEL SIGN AA
++<U00011039> /xf0/x91/x80/xb9 BRAHMI VOWEL SIGN BHATTIPROLU AA
++<U0001103A> /xf0/x91/x80/xba BRAHMI VOWEL SIGN I
++<U0001103B> /xf0/x91/x80/xbb BRAHMI VOWEL SIGN II
++<U0001103C> /xf0/x91/x80/xbc BRAHMI VOWEL SIGN U
++<U0001103D> /xf0/x91/x80/xbd BRAHMI VOWEL SIGN UU
++<U0001103E> /xf0/x91/x80/xbe BRAHMI VOWEL SIGN VOCALIC R
++<U0001103F> /xf0/x91/x80/xbf BRAHMI VOWEL SIGN VOCALIC RR
++<U00011040> /xf0/x91/x81/x80 BRAHMI VOWEL SIGN VOCALIC L
++<U00011041> /xf0/x91/x81/x81 BRAHMI VOWEL SIGN VOCALIC LL
++<U00011042> /xf0/x91/x81/x82 BRAHMI VOWEL SIGN E
++<U00011043> /xf0/x91/x81/x83 BRAHMI VOWEL SIGN AI
++<U00011044> /xf0/x91/x81/x84 BRAHMI VOWEL SIGN O
++<U00011045> /xf0/x91/x81/x85 BRAHMI VOWEL SIGN AU
++<U00011046> /xf0/x91/x81/x86 BRAHMI VIRAMA
++<U00011047> /xf0/x91/x81/x87 BRAHMI DANDA
++<U00011048> /xf0/x91/x81/x88 BRAHMI DOUBLE DANDA
++<U00011049> /xf0/x91/x81/x89 BRAHMI PUNCTUATION DOT
++<U0001104A> /xf0/x91/x81/x8a BRAHMI PUNCTUATION DOUBLE DOT
++<U0001104B> /xf0/x91/x81/x8b BRAHMI PUNCTUATION LINE
++<U0001104C> /xf0/x91/x81/x8c BRAHMI PUNCTUATION CRESCENT BAR
++<U0001104D> /xf0/x91/x81/x8d BRAHMI PUNCTUATION LOTUS
++<U00011052> /xf0/x91/x81/x92 BRAHMI NUMBER ONE
++<U00011053> /xf0/x91/x81/x93 BRAHMI NUMBER TWO
++<U00011054> /xf0/x91/x81/x94 BRAHMI NUMBER THREE
++<U00011055> /xf0/x91/x81/x95 BRAHMI NUMBER FOUR
++<U00011056> /xf0/x91/x81/x96 BRAHMI NUMBER FIVE
++<U00011057> /xf0/x91/x81/x97 BRAHMI NUMBER SIX
++<U00011058> /xf0/x91/x81/x98 BRAHMI NUMBER SEVEN
++<U00011059> /xf0/x91/x81/x99 BRAHMI NUMBER EIGHT
++<U0001105A> /xf0/x91/x81/x9a BRAHMI NUMBER NINE
++<U0001105B> /xf0/x91/x81/x9b BRAHMI NUMBER TEN
++<U0001105C> /xf0/x91/x81/x9c BRAHMI NUMBER TWENTY
++<U0001105D> /xf0/x91/x81/x9d BRAHMI NUMBER THIRTY
++<U0001105E> /xf0/x91/x81/x9e BRAHMI NUMBER FORTY
++<U0001105F> /xf0/x91/x81/x9f BRAHMI NUMBER FIFTY
++<U00011060> /xf0/x91/x81/xa0 BRAHMI NUMBER SIXTY
++<U00011061> /xf0/x91/x81/xa1 BRAHMI NUMBER SEVENTY
++<U00011062> /xf0/x91/x81/xa2 BRAHMI NUMBER EIGHTY
++<U00011063> /xf0/x91/x81/xa3 BRAHMI NUMBER NINETY
++<U00011064> /xf0/x91/x81/xa4 BRAHMI NUMBER ONE HUNDRED
++<U00011065> /xf0/x91/x81/xa5 BRAHMI NUMBER ONE THOUSAND
++<U00011066> /xf0/x91/x81/xa6 BRAHMI DIGIT ZERO
++<U00011067> /xf0/x91/x81/xa7 BRAHMI DIGIT ONE
++<U00011068> /xf0/x91/x81/xa8 BRAHMI DIGIT TWO
++<U00011069> /xf0/x91/x81/xa9 BRAHMI DIGIT THREE
++<U0001106A> /xf0/x91/x81/xaa BRAHMI DIGIT FOUR
++<U0001106B> /xf0/x91/x81/xab BRAHMI DIGIT FIVE
++<U0001106C> /xf0/x91/x81/xac BRAHMI DIGIT SIX
++<U0001106D> /xf0/x91/x81/xad BRAHMI DIGIT SEVEN
++<U0001106E> /xf0/x91/x81/xae BRAHMI DIGIT EIGHT
++<U0001106F> /xf0/x91/x81/xaf BRAHMI DIGIT NINE
++<U00011080> /xf0/x91/x82/x80 KAITHI SIGN CANDRABINDU
++<U00011081> /xf0/x91/x82/x81 KAITHI SIGN ANUSVARA
++<U00011082> /xf0/x91/x82/x82 KAITHI SIGN VISARGA
++<U00011083> /xf0/x91/x82/x83 KAITHI LETTER A
++<U00011084> /xf0/x91/x82/x84 KAITHI LETTER AA
++<U00011085> /xf0/x91/x82/x85 KAITHI LETTER I
++<U00011086> /xf0/x91/x82/x86 KAITHI LETTER II
++<U00011087> /xf0/x91/x82/x87 KAITHI LETTER U
++<U00011088> /xf0/x91/x82/x88 KAITHI LETTER UU
++<U00011089> /xf0/x91/x82/x89 KAITHI LETTER E
++<U0001108A> /xf0/x91/x82/x8a KAITHI LETTER AI
++<U0001108B> /xf0/x91/x82/x8b KAITHI LETTER O
++<U0001108C> /xf0/x91/x82/x8c KAITHI LETTER AU
++<U0001108D> /xf0/x91/x82/x8d KAITHI LETTER KA
++<U0001108E> /xf0/x91/x82/x8e KAITHI LETTER KHA
++<U0001108F> /xf0/x91/x82/x8f KAITHI LETTER GA
++<U00011090> /xf0/x91/x82/x90 KAITHI LETTER GHA
++<U00011091> /xf0/x91/x82/x91 KAITHI LETTER NGA
++<U00011092> /xf0/x91/x82/x92 KAITHI LETTER CA
++<U00011093> /xf0/x91/x82/x93 KAITHI LETTER CHA
++<U00011094> /xf0/x91/x82/x94 KAITHI LETTER JA
++<U00011095> /xf0/x91/x82/x95 KAITHI LETTER JHA
++<U00011096> /xf0/x91/x82/x96 KAITHI LETTER NYA
++<U00011097> /xf0/x91/x82/x97 KAITHI LETTER TTA
++<U00011098> /xf0/x91/x82/x98 KAITHI LETTER TTHA
++<U00011099> /xf0/x91/x82/x99 KAITHI LETTER DDA
++<U0001109A> /xf0/x91/x82/x9a KAITHI LETTER DDDHA
++<U0001109B> /xf0/x91/x82/x9b KAITHI LETTER DDHA
++<U0001109C> /xf0/x91/x82/x9c KAITHI LETTER RHA
++<U0001109D> /xf0/x91/x82/x9d KAITHI LETTER NNA
++<U0001109E> /xf0/x91/x82/x9e KAITHI LETTER TA
++<U0001109F> /xf0/x91/x82/x9f KAITHI LETTER THA
++<U000110A0> /xf0/x91/x82/xa0 KAITHI LETTER DA
++<U000110A1> /xf0/x91/x82/xa1 KAITHI LETTER DHA
++<U000110A2> /xf0/x91/x82/xa2 KAITHI LETTER NA
++<U000110A3> /xf0/x91/x82/xa3 KAITHI LETTER PA
++<U000110A4> /xf0/x91/x82/xa4 KAITHI LETTER PHA
++<U000110A5> /xf0/x91/x82/xa5 KAITHI LETTER BA
++<U000110A6> /xf0/x91/x82/xa6 KAITHI LETTER BHA
++<U000110A7> /xf0/x91/x82/xa7 KAITHI LETTER MA
++<U000110A8> /xf0/x91/x82/xa8 KAITHI LETTER YA
++<U000110A9> /xf0/x91/x82/xa9 KAITHI LETTER RA
++<U000110AA> /xf0/x91/x82/xaa KAITHI LETTER LA
++<U000110AB> /xf0/x91/x82/xab KAITHI LETTER VA
++<U000110AC> /xf0/x91/x82/xac KAITHI LETTER SHA
++<U000110AD> /xf0/x91/x82/xad KAITHI LETTER SSA
++<U000110AE> /xf0/x91/x82/xae KAITHI LETTER SA
++<U000110AF> /xf0/x91/x82/xaf KAITHI LETTER HA
++<U000110B0> /xf0/x91/x82/xb0 KAITHI VOWEL SIGN AA
++<U000110B1> /xf0/x91/x82/xb1 KAITHI VOWEL SIGN I
++<U000110B2> /xf0/x91/x82/xb2 KAITHI VOWEL SIGN II
++<U000110B3> /xf0/x91/x82/xb3 KAITHI VOWEL SIGN U
++<U000110B4> /xf0/x91/x82/xb4 KAITHI VOWEL SIGN UU
++<U000110B5> /xf0/x91/x82/xb5 KAITHI VOWEL SIGN E
++<U000110B6> /xf0/x91/x82/xb6 KAITHI VOWEL SIGN AI
++<U000110B7> /xf0/x91/x82/xb7 KAITHI VOWEL SIGN O
++<U000110B8> /xf0/x91/x82/xb8 KAITHI VOWEL SIGN AU
++<U000110B9> /xf0/x91/x82/xb9 KAITHI SIGN VIRAMA
++<U000110BA> /xf0/x91/x82/xba KAITHI SIGN NUKTA
++<U000110BB> /xf0/x91/x82/xbb KAITHI ABBREVIATION SIGN
++<U000110BC> /xf0/x91/x82/xbc KAITHI ENUMERATION SIGN
++<U000110BD> /xf0/x91/x82/xbd KAITHI NUMBER SIGN
++<U000110BE> /xf0/x91/x82/xbe KAITHI SECTION MARK
++<U000110BF> /xf0/x91/x82/xbf KAITHI DOUBLE SECTION MARK
++<U000110C0> /xf0/x91/x83/x80 KAITHI DANDA
++<U000110C1> /xf0/x91/x83/x81 KAITHI DOUBLE DANDA
+ <U00012000> /xf0/x92/x80/x80 CUNEIFORM SIGN A
+ <U00012001> /xf0/x92/x80/x81 CUNEIFORM SIGN A TIMES A
+ <U00012002> /xf0/x92/x80/x82 CUNEIFORM SIGN A TIMES BAD
+@@ -28370,6 +30022,1648 @@ CHARMAP
+ <U00012471> /xf0/x92/x91/xb1 CUNEIFORM PUNCTUATION SIGN VERTICAL COLON
+ <U00012472> /xf0/x92/x91/xb2 CUNEIFORM PUNCTUATION SIGN DIAGONAL COLON
+ <U00012473> /xf0/x92/x91/xb3 CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON
++<U00013000> /xf0/x93/x80/x80 EGYPTIAN HIEROGLYPH A001
++<U00013001> /xf0/x93/x80/x81 EGYPTIAN HIEROGLYPH A002
++<U00013002> /xf0/x93/x80/x82 EGYPTIAN HIEROGLYPH A003
++<U00013003> /xf0/x93/x80/x83 EGYPTIAN HIEROGLYPH A004
++<U00013004> /xf0/x93/x80/x84 EGYPTIAN HIEROGLYPH A005
++<U00013005> /xf0/x93/x80/x85 EGYPTIAN HIEROGLYPH A005A
++<U00013006> /xf0/x93/x80/x86 EGYPTIAN HIEROGLYPH A006
++<U00013007> /xf0/x93/x80/x87 EGYPTIAN HIEROGLYPH A006A
++<U00013008> /xf0/x93/x80/x88 EGYPTIAN HIEROGLYPH A006B
++<U00013009> /xf0/x93/x80/x89 EGYPTIAN HIEROGLYPH A007
++<U0001300A> /xf0/x93/x80/x8a EGYPTIAN HIEROGLYPH A008
++<U0001300B> /xf0/x93/x80/x8b EGYPTIAN HIEROGLYPH A009
++<U0001300C> /xf0/x93/x80/x8c EGYPTIAN HIEROGLYPH A010
++<U0001300D> /xf0/x93/x80/x8d EGYPTIAN HIEROGLYPH A011
++<U0001300E> /xf0/x93/x80/x8e EGYPTIAN HIEROGLYPH A012
++<U0001300F> /xf0/x93/x80/x8f EGYPTIAN HIEROGLYPH A013
++<U00013010> /xf0/x93/x80/x90 EGYPTIAN HIEROGLYPH A014
++<U00013011> /xf0/x93/x80/x91 EGYPTIAN HIEROGLYPH A014A
++<U00013012> /xf0/x93/x80/x92 EGYPTIAN HIEROGLYPH A015
++<U00013013> /xf0/x93/x80/x93 EGYPTIAN HIEROGLYPH A016
++<U00013014> /xf0/x93/x80/x94 EGYPTIAN HIEROGLYPH A017
++<U00013015> /xf0/x93/x80/x95 EGYPTIAN HIEROGLYPH A017A
++<U00013016> /xf0/x93/x80/x96 EGYPTIAN HIEROGLYPH A018
++<U00013017> /xf0/x93/x80/x97 EGYPTIAN HIEROGLYPH A019
++<U00013018> /xf0/x93/x80/x98 EGYPTIAN HIEROGLYPH A020
++<U00013019> /xf0/x93/x80/x99 EGYPTIAN HIEROGLYPH A021
++<U0001301A> /xf0/x93/x80/x9a EGYPTIAN HIEROGLYPH A022
++<U0001301B> /xf0/x93/x80/x9b EGYPTIAN HIEROGLYPH A023
++<U0001301C> /xf0/x93/x80/x9c EGYPTIAN HIEROGLYPH A024
++<U0001301D> /xf0/x93/x80/x9d EGYPTIAN HIEROGLYPH A025
++<U0001301E> /xf0/x93/x80/x9e EGYPTIAN HIEROGLYPH A026
++<U0001301F> /xf0/x93/x80/x9f EGYPTIAN HIEROGLYPH A027
++<U00013020> /xf0/x93/x80/xa0 EGYPTIAN HIEROGLYPH A028
++<U00013021> /xf0/x93/x80/xa1 EGYPTIAN HIEROGLYPH A029
++<U00013022> /xf0/x93/x80/xa2 EGYPTIAN HIEROGLYPH A030
++<U00013023> /xf0/x93/x80/xa3 EGYPTIAN HIEROGLYPH A031
++<U00013024> /xf0/x93/x80/xa4 EGYPTIAN HIEROGLYPH A032
++<U00013025> /xf0/x93/x80/xa5 EGYPTIAN HIEROGLYPH A032A
++<U00013026> /xf0/x93/x80/xa6 EGYPTIAN HIEROGLYPH A033
++<U00013027> /xf0/x93/x80/xa7 EGYPTIAN HIEROGLYPH A034
++<U00013028> /xf0/x93/x80/xa8 EGYPTIAN HIEROGLYPH A035
++<U00013029> /xf0/x93/x80/xa9 EGYPTIAN HIEROGLYPH A036
++<U0001302A> /xf0/x93/x80/xaa EGYPTIAN HIEROGLYPH A037
++<U0001302B> /xf0/x93/x80/xab EGYPTIAN HIEROGLYPH A038
++<U0001302C> /xf0/x93/x80/xac EGYPTIAN HIEROGLYPH A039
++<U0001302D> /xf0/x93/x80/xad EGYPTIAN HIEROGLYPH A040
++<U0001302E> /xf0/x93/x80/xae EGYPTIAN HIEROGLYPH A040A
++<U0001302F> /xf0/x93/x80/xaf EGYPTIAN HIEROGLYPH A041
++<U00013030> /xf0/x93/x80/xb0 EGYPTIAN HIEROGLYPH A042
++<U00013031> /xf0/x93/x80/xb1 EGYPTIAN HIEROGLYPH A042A
++<U00013032> /xf0/x93/x80/xb2 EGYPTIAN HIEROGLYPH A043
++<U00013033> /xf0/x93/x80/xb3 EGYPTIAN HIEROGLYPH A043A
++<U00013034> /xf0/x93/x80/xb4 EGYPTIAN HIEROGLYPH A044
++<U00013035> /xf0/x93/x80/xb5 EGYPTIAN HIEROGLYPH A045
++<U00013036> /xf0/x93/x80/xb6 EGYPTIAN HIEROGLYPH A045A
++<U00013037> /xf0/x93/x80/xb7 EGYPTIAN HIEROGLYPH A046
++<U00013038> /xf0/x93/x80/xb8 EGYPTIAN HIEROGLYPH A047
++<U00013039> /xf0/x93/x80/xb9 EGYPTIAN HIEROGLYPH A048
++<U0001303A> /xf0/x93/x80/xba EGYPTIAN HIEROGLYPH A049
++<U0001303B> /xf0/x93/x80/xbb EGYPTIAN HIEROGLYPH A050
++<U0001303C> /xf0/x93/x80/xbc EGYPTIAN HIEROGLYPH A051
++<U0001303D> /xf0/x93/x80/xbd EGYPTIAN HIEROGLYPH A052
++<U0001303E> /xf0/x93/x80/xbe EGYPTIAN HIEROGLYPH A053
++<U0001303F> /xf0/x93/x80/xbf EGYPTIAN HIEROGLYPH A054
++<U00013040> /xf0/x93/x81/x80 EGYPTIAN HIEROGLYPH A055
++<U00013041> /xf0/x93/x81/x81 EGYPTIAN HIEROGLYPH A056
++<U00013042> /xf0/x93/x81/x82 EGYPTIAN HIEROGLYPH A057
++<U00013043> /xf0/x93/x81/x83 EGYPTIAN HIEROGLYPH A058
++<U00013044> /xf0/x93/x81/x84 EGYPTIAN HIEROGLYPH A059
++<U00013045> /xf0/x93/x81/x85 EGYPTIAN HIEROGLYPH A060
++<U00013046> /xf0/x93/x81/x86 EGYPTIAN HIEROGLYPH A061
++<U00013047> /xf0/x93/x81/x87 EGYPTIAN HIEROGLYPH A062
++<U00013048> /xf0/x93/x81/x88 EGYPTIAN HIEROGLYPH A063
++<U00013049> /xf0/x93/x81/x89 EGYPTIAN HIEROGLYPH A064
++<U0001304A> /xf0/x93/x81/x8a EGYPTIAN HIEROGLYPH A065
++<U0001304B> /xf0/x93/x81/x8b EGYPTIAN HIEROGLYPH A066
++<U0001304C> /xf0/x93/x81/x8c EGYPTIAN HIEROGLYPH A067
++<U0001304D> /xf0/x93/x81/x8d EGYPTIAN HIEROGLYPH A068
++<U0001304E> /xf0/x93/x81/x8e EGYPTIAN HIEROGLYPH A069
++<U0001304F> /xf0/x93/x81/x8f EGYPTIAN HIEROGLYPH A070
++<U00013050> /xf0/x93/x81/x90 EGYPTIAN HIEROGLYPH B001
++<U00013051> /xf0/x93/x81/x91 EGYPTIAN HIEROGLYPH B002
++<U00013052> /xf0/x93/x81/x92 EGYPTIAN HIEROGLYPH B003
++<U00013053> /xf0/x93/x81/x93 EGYPTIAN HIEROGLYPH B004
++<U00013054> /xf0/x93/x81/x94 EGYPTIAN HIEROGLYPH B005
++<U00013055> /xf0/x93/x81/x95 EGYPTIAN HIEROGLYPH B005A
++<U00013056> /xf0/x93/x81/x96 EGYPTIAN HIEROGLYPH B006
++<U00013057> /xf0/x93/x81/x97 EGYPTIAN HIEROGLYPH B007
++<U00013058> /xf0/x93/x81/x98 EGYPTIAN HIEROGLYPH B008
++<U00013059> /xf0/x93/x81/x99 EGYPTIAN HIEROGLYPH B009
++<U0001305A> /xf0/x93/x81/x9a EGYPTIAN HIEROGLYPH C001
++<U0001305B> /xf0/x93/x81/x9b EGYPTIAN HIEROGLYPH C002
++<U0001305C> /xf0/x93/x81/x9c EGYPTIAN HIEROGLYPH C002A
++<U0001305D> /xf0/x93/x81/x9d EGYPTIAN HIEROGLYPH C002B
++<U0001305E> /xf0/x93/x81/x9e EGYPTIAN HIEROGLYPH C002C
++<U0001305F> /xf0/x93/x81/x9f EGYPTIAN HIEROGLYPH C003
++<U00013060> /xf0/x93/x81/xa0 EGYPTIAN HIEROGLYPH C004
++<U00013061> /xf0/x93/x81/xa1 EGYPTIAN HIEROGLYPH C005
++<U00013062> /xf0/x93/x81/xa2 EGYPTIAN HIEROGLYPH C006
++<U00013063> /xf0/x93/x81/xa3 EGYPTIAN HIEROGLYPH C007
++<U00013064> /xf0/x93/x81/xa4 EGYPTIAN HIEROGLYPH C008
++<U00013065> /xf0/x93/x81/xa5 EGYPTIAN HIEROGLYPH C009
++<U00013066> /xf0/x93/x81/xa6 EGYPTIAN HIEROGLYPH C010
++<U00013067> /xf0/x93/x81/xa7 EGYPTIAN HIEROGLYPH C010A
++<U00013068> /xf0/x93/x81/xa8 EGYPTIAN HIEROGLYPH C011
++<U00013069> /xf0/x93/x81/xa9 EGYPTIAN HIEROGLYPH C012
++<U0001306A> /xf0/x93/x81/xaa EGYPTIAN HIEROGLYPH C013
++<U0001306B> /xf0/x93/x81/xab EGYPTIAN HIEROGLYPH C014
++<U0001306C> /xf0/x93/x81/xac EGYPTIAN HIEROGLYPH C015
++<U0001306D> /xf0/x93/x81/xad EGYPTIAN HIEROGLYPH C016
++<U0001306E> /xf0/x93/x81/xae EGYPTIAN HIEROGLYPH C017
++<U0001306F> /xf0/x93/x81/xaf EGYPTIAN HIEROGLYPH C018
++<U00013070> /xf0/x93/x81/xb0 EGYPTIAN HIEROGLYPH C019
++<U00013071> /xf0/x93/x81/xb1 EGYPTIAN HIEROGLYPH C020
++<U00013072> /xf0/x93/x81/xb2 EGYPTIAN HIEROGLYPH C021
++<U00013073> /xf0/x93/x81/xb3 EGYPTIAN HIEROGLYPH C022
++<U00013074> /xf0/x93/x81/xb4 EGYPTIAN HIEROGLYPH C023
++<U00013075> /xf0/x93/x81/xb5 EGYPTIAN HIEROGLYPH C024
++<U00013076> /xf0/x93/x81/xb6 EGYPTIAN HIEROGLYPH D001
++<U00013077> /xf0/x93/x81/xb7 EGYPTIAN HIEROGLYPH D002
++<U00013078> /xf0/x93/x81/xb8 EGYPTIAN HIEROGLYPH D003
++<U00013079> /xf0/x93/x81/xb9 EGYPTIAN HIEROGLYPH D004
++<U0001307A> /xf0/x93/x81/xba EGYPTIAN HIEROGLYPH D005
++<U0001307B> /xf0/x93/x81/xbb EGYPTIAN HIEROGLYPH D006
++<U0001307C> /xf0/x93/x81/xbc EGYPTIAN HIEROGLYPH D007
++<U0001307D> /xf0/x93/x81/xbd EGYPTIAN HIEROGLYPH D008
++<U0001307E> /xf0/x93/x81/xbe EGYPTIAN HIEROGLYPH D008A
++<U0001307F> /xf0/x93/x81/xbf EGYPTIAN HIEROGLYPH D009
++<U00013080> /xf0/x93/x82/x80 EGYPTIAN HIEROGLYPH D010
++<U00013081> /xf0/x93/x82/x81 EGYPTIAN HIEROGLYPH D011
++<U00013082> /xf0/x93/x82/x82 EGYPTIAN HIEROGLYPH D012
++<U00013083> /xf0/x93/x82/x83 EGYPTIAN HIEROGLYPH D013
++<U00013084> /xf0/x93/x82/x84 EGYPTIAN HIEROGLYPH D014
++<U00013085> /xf0/x93/x82/x85 EGYPTIAN HIEROGLYPH D015
++<U00013086> /xf0/x93/x82/x86 EGYPTIAN HIEROGLYPH D016
++<U00013087> /xf0/x93/x82/x87 EGYPTIAN HIEROGLYPH D017
++<U00013088> /xf0/x93/x82/x88 EGYPTIAN HIEROGLYPH D018
++<U00013089> /xf0/x93/x82/x89 EGYPTIAN HIEROGLYPH D019
++<U0001308A> /xf0/x93/x82/x8a EGYPTIAN HIEROGLYPH D020
++<U0001308B> /xf0/x93/x82/x8b EGYPTIAN HIEROGLYPH D021
++<U0001308C> /xf0/x93/x82/x8c EGYPTIAN HIEROGLYPH D022
++<U0001308D> /xf0/x93/x82/x8d EGYPTIAN HIEROGLYPH D023
++<U0001308E> /xf0/x93/x82/x8e EGYPTIAN HIEROGLYPH D024
++<U0001308F> /xf0/x93/x82/x8f EGYPTIAN HIEROGLYPH D025
++<U00013090> /xf0/x93/x82/x90 EGYPTIAN HIEROGLYPH D026
++<U00013091> /xf0/x93/x82/x91 EGYPTIAN HIEROGLYPH D027
++<U00013092> /xf0/x93/x82/x92 EGYPTIAN HIEROGLYPH D027A
++<U00013093> /xf0/x93/x82/x93 EGYPTIAN HIEROGLYPH D028
++<U00013094> /xf0/x93/x82/x94 EGYPTIAN HIEROGLYPH D029
++<U00013095> /xf0/x93/x82/x95 EGYPTIAN HIEROGLYPH D030
++<U00013096> /xf0/x93/x82/x96 EGYPTIAN HIEROGLYPH D031
++<U00013097> /xf0/x93/x82/x97 EGYPTIAN HIEROGLYPH D031A
++<U00013098> /xf0/x93/x82/x98 EGYPTIAN HIEROGLYPH D032
++<U00013099> /xf0/x93/x82/x99 EGYPTIAN HIEROGLYPH D033
++<U0001309A> /xf0/x93/x82/x9a EGYPTIAN HIEROGLYPH D034
++<U0001309B> /xf0/x93/x82/x9b EGYPTIAN HIEROGLYPH D034A
++<U0001309C> /xf0/x93/x82/x9c EGYPTIAN HIEROGLYPH D035
++<U0001309D> /xf0/x93/x82/x9d EGYPTIAN HIEROGLYPH D036
++<U0001309E> /xf0/x93/x82/x9e EGYPTIAN HIEROGLYPH D037
++<U0001309F> /xf0/x93/x82/x9f EGYPTIAN HIEROGLYPH D038
++<U000130A0> /xf0/x93/x82/xa0 EGYPTIAN HIEROGLYPH D039
++<U000130A1> /xf0/x93/x82/xa1 EGYPTIAN HIEROGLYPH D040
++<U000130A2> /xf0/x93/x82/xa2 EGYPTIAN HIEROGLYPH D041
++<U000130A3> /xf0/x93/x82/xa3 EGYPTIAN HIEROGLYPH D042
++<U000130A4> /xf0/x93/x82/xa4 EGYPTIAN HIEROGLYPH D043
++<U000130A5> /xf0/x93/x82/xa5 EGYPTIAN HIEROGLYPH D044
++<U000130A6> /xf0/x93/x82/xa6 EGYPTIAN HIEROGLYPH D045
++<U000130A7> /xf0/x93/x82/xa7 EGYPTIAN HIEROGLYPH D046
++<U000130A8> /xf0/x93/x82/xa8 EGYPTIAN HIEROGLYPH D046A
++<U000130A9> /xf0/x93/x82/xa9 EGYPTIAN HIEROGLYPH D047
++<U000130AA> /xf0/x93/x82/xaa EGYPTIAN HIEROGLYPH D048
++<U000130AB> /xf0/x93/x82/xab EGYPTIAN HIEROGLYPH D048A
++<U000130AC> /xf0/x93/x82/xac EGYPTIAN HIEROGLYPH D049
++<U000130AD> /xf0/x93/x82/xad EGYPTIAN HIEROGLYPH D050
++<U000130AE> /xf0/x93/x82/xae EGYPTIAN HIEROGLYPH D050A
++<U000130AF> /xf0/x93/x82/xaf EGYPTIAN HIEROGLYPH D050B
++<U000130B0> /xf0/x93/x82/xb0 EGYPTIAN HIEROGLYPH D050C
++<U000130B1> /xf0/x93/x82/xb1 EGYPTIAN HIEROGLYPH D050D
++<U000130B2> /xf0/x93/x82/xb2 EGYPTIAN HIEROGLYPH D050E
++<U000130B3> /xf0/x93/x82/xb3 EGYPTIAN HIEROGLYPH D050F
++<U000130B4> /xf0/x93/x82/xb4 EGYPTIAN HIEROGLYPH D050G
++<U000130B5> /xf0/x93/x82/xb5 EGYPTIAN HIEROGLYPH D050H
++<U000130B6> /xf0/x93/x82/xb6 EGYPTIAN HIEROGLYPH D050I
++<U000130B7> /xf0/x93/x82/xb7 EGYPTIAN HIEROGLYPH D051
++<U000130B8> /xf0/x93/x82/xb8 EGYPTIAN HIEROGLYPH D052
++<U000130B9> /xf0/x93/x82/xb9 EGYPTIAN HIEROGLYPH D052A
++<U000130BA> /xf0/x93/x82/xba EGYPTIAN HIEROGLYPH D053
++<U000130BB> /xf0/x93/x82/xbb EGYPTIAN HIEROGLYPH D054
++<U000130BC> /xf0/x93/x82/xbc EGYPTIAN HIEROGLYPH D054A
++<U000130BD> /xf0/x93/x82/xbd EGYPTIAN HIEROGLYPH D055
++<U000130BE> /xf0/x93/x82/xbe EGYPTIAN HIEROGLYPH D056
++<U000130BF> /xf0/x93/x82/xbf EGYPTIAN HIEROGLYPH D057
++<U000130C0> /xf0/x93/x83/x80 EGYPTIAN HIEROGLYPH D058
++<U000130C1> /xf0/x93/x83/x81 EGYPTIAN HIEROGLYPH D059
++<U000130C2> /xf0/x93/x83/x82 EGYPTIAN HIEROGLYPH D060
++<U000130C3> /xf0/x93/x83/x83 EGYPTIAN HIEROGLYPH D061
++<U000130C4> /xf0/x93/x83/x84 EGYPTIAN HIEROGLYPH D062
++<U000130C5> /xf0/x93/x83/x85 EGYPTIAN HIEROGLYPH D063
++<U000130C6> /xf0/x93/x83/x86 EGYPTIAN HIEROGLYPH D064
++<U000130C7> /xf0/x93/x83/x87 EGYPTIAN HIEROGLYPH D065
++<U000130C8> /xf0/x93/x83/x88 EGYPTIAN HIEROGLYPH D066
++<U000130C9> /xf0/x93/x83/x89 EGYPTIAN HIEROGLYPH D067
++<U000130CA> /xf0/x93/x83/x8a EGYPTIAN HIEROGLYPH D067A
++<U000130CB> /xf0/x93/x83/x8b EGYPTIAN HIEROGLYPH D067B
++<U000130CC> /xf0/x93/x83/x8c EGYPTIAN HIEROGLYPH D067C
++<U000130CD> /xf0/x93/x83/x8d EGYPTIAN HIEROGLYPH D067D
++<U000130CE> /xf0/x93/x83/x8e EGYPTIAN HIEROGLYPH D067E
++<U000130CF> /xf0/x93/x83/x8f EGYPTIAN HIEROGLYPH D067F
++<U000130D0> /xf0/x93/x83/x90 EGYPTIAN HIEROGLYPH D067G
++<U000130D1> /xf0/x93/x83/x91 EGYPTIAN HIEROGLYPH D067H
++<U000130D2> /xf0/x93/x83/x92 EGYPTIAN HIEROGLYPH E001
++<U000130D3> /xf0/x93/x83/x93 EGYPTIAN HIEROGLYPH E002
++<U000130D4> /xf0/x93/x83/x94 EGYPTIAN HIEROGLYPH E003
++<U000130D5> /xf0/x93/x83/x95 EGYPTIAN HIEROGLYPH E004
++<U000130D6> /xf0/x93/x83/x96 EGYPTIAN HIEROGLYPH E005
++<U000130D7> /xf0/x93/x83/x97 EGYPTIAN HIEROGLYPH E006
++<U000130D8> /xf0/x93/x83/x98 EGYPTIAN HIEROGLYPH E007
++<U000130D9> /xf0/x93/x83/x99 EGYPTIAN HIEROGLYPH E008
++<U000130DA> /xf0/x93/x83/x9a EGYPTIAN HIEROGLYPH E008A
++<U000130DB> /xf0/x93/x83/x9b EGYPTIAN HIEROGLYPH E009
++<U000130DC> /xf0/x93/x83/x9c EGYPTIAN HIEROGLYPH E009A
++<U000130DD> /xf0/x93/x83/x9d EGYPTIAN HIEROGLYPH E010
++<U000130DE> /xf0/x93/x83/x9e EGYPTIAN HIEROGLYPH E011
++<U000130DF> /xf0/x93/x83/x9f EGYPTIAN HIEROGLYPH E012
++<U000130E0> /xf0/x93/x83/xa0 EGYPTIAN HIEROGLYPH E013
++<U000130E1> /xf0/x93/x83/xa1 EGYPTIAN HIEROGLYPH E014
++<U000130E2> /xf0/x93/x83/xa2 EGYPTIAN HIEROGLYPH E015
++<U000130E3> /xf0/x93/x83/xa3 EGYPTIAN HIEROGLYPH E016
++<U000130E4> /xf0/x93/x83/xa4 EGYPTIAN HIEROGLYPH E016A
++<U000130E5> /xf0/x93/x83/xa5 EGYPTIAN HIEROGLYPH E017
++<U000130E6> /xf0/x93/x83/xa6 EGYPTIAN HIEROGLYPH E017A
++<U000130E7> /xf0/x93/x83/xa7 EGYPTIAN HIEROGLYPH E018
++<U000130E8> /xf0/x93/x83/xa8 EGYPTIAN HIEROGLYPH E019
++<U000130E9> /xf0/x93/x83/xa9 EGYPTIAN HIEROGLYPH E020
++<U000130EA> /xf0/x93/x83/xaa EGYPTIAN HIEROGLYPH E020A
++<U000130EB> /xf0/x93/x83/xab EGYPTIAN HIEROGLYPH E021
++<U000130EC> /xf0/x93/x83/xac EGYPTIAN HIEROGLYPH E022
++<U000130ED> /xf0/x93/x83/xad EGYPTIAN HIEROGLYPH E023
++<U000130EE> /xf0/x93/x83/xae EGYPTIAN HIEROGLYPH E024
++<U000130EF> /xf0/x93/x83/xaf EGYPTIAN HIEROGLYPH E025
++<U000130F0> /xf0/x93/x83/xb0 EGYPTIAN HIEROGLYPH E026
++<U000130F1> /xf0/x93/x83/xb1 EGYPTIAN HIEROGLYPH E027
++<U000130F2> /xf0/x93/x83/xb2 EGYPTIAN HIEROGLYPH E028
++<U000130F3> /xf0/x93/x83/xb3 EGYPTIAN HIEROGLYPH E028A
++<U000130F4> /xf0/x93/x83/xb4 EGYPTIAN HIEROGLYPH E029
++<U000130F5> /xf0/x93/x83/xb5 EGYPTIAN HIEROGLYPH E030
++<U000130F6> /xf0/x93/x83/xb6 EGYPTIAN HIEROGLYPH E031
++<U000130F7> /xf0/x93/x83/xb7 EGYPTIAN HIEROGLYPH E032
++<U000130F8> /xf0/x93/x83/xb8 EGYPTIAN HIEROGLYPH E033
++<U000130F9> /xf0/x93/x83/xb9 EGYPTIAN HIEROGLYPH E034
++<U000130FA> /xf0/x93/x83/xba EGYPTIAN HIEROGLYPH E034A
++<U000130FB> /xf0/x93/x83/xbb EGYPTIAN HIEROGLYPH E036
++<U000130FC> /xf0/x93/x83/xbc EGYPTIAN HIEROGLYPH E037
++<U000130FD> /xf0/x93/x83/xbd EGYPTIAN HIEROGLYPH E038
++<U000130FE> /xf0/x93/x83/xbe EGYPTIAN HIEROGLYPH F001
++<U000130FF> /xf0/x93/x83/xbf EGYPTIAN HIEROGLYPH F001A
++<U00013100> /xf0/x93/x84/x80 EGYPTIAN HIEROGLYPH F002
++<U00013101> /xf0/x93/x84/x81 EGYPTIAN HIEROGLYPH F003
++<U00013102> /xf0/x93/x84/x82 EGYPTIAN HIEROGLYPH F004
++<U00013103> /xf0/x93/x84/x83 EGYPTIAN HIEROGLYPH F005
++<U00013104> /xf0/x93/x84/x84 EGYPTIAN HIEROGLYPH F006
++<U00013105> /xf0/x93/x84/x85 EGYPTIAN HIEROGLYPH F007
++<U00013106> /xf0/x93/x84/x86 EGYPTIAN HIEROGLYPH F008
++<U00013107> /xf0/x93/x84/x87 EGYPTIAN HIEROGLYPH F009
++<U00013108> /xf0/x93/x84/x88 EGYPTIAN HIEROGLYPH F010
++<U00013109> /xf0/x93/x84/x89 EGYPTIAN HIEROGLYPH F011
++<U0001310A> /xf0/x93/x84/x8a EGYPTIAN HIEROGLYPH F012
++<U0001310B> /xf0/x93/x84/x8b EGYPTIAN HIEROGLYPH F013
++<U0001310C> /xf0/x93/x84/x8c EGYPTIAN HIEROGLYPH F013A
++<U0001310D> /xf0/x93/x84/x8d EGYPTIAN HIEROGLYPH F014
++<U0001310E> /xf0/x93/x84/x8e EGYPTIAN HIEROGLYPH F015
++<U0001310F> /xf0/x93/x84/x8f EGYPTIAN HIEROGLYPH F016
++<U00013110> /xf0/x93/x84/x90 EGYPTIAN HIEROGLYPH F017
++<U00013111> /xf0/x93/x84/x91 EGYPTIAN HIEROGLYPH F018
++<U00013112> /xf0/x93/x84/x92 EGYPTIAN HIEROGLYPH F019
++<U00013113> /xf0/x93/x84/x93 EGYPTIAN HIEROGLYPH F020
++<U00013114> /xf0/x93/x84/x94 EGYPTIAN HIEROGLYPH F021
++<U00013115> /xf0/x93/x84/x95 EGYPTIAN HIEROGLYPH F021A
++<U00013116> /xf0/x93/x84/x96 EGYPTIAN HIEROGLYPH F022
++<U00013117> /xf0/x93/x84/x97 EGYPTIAN HIEROGLYPH F023
++<U00013118> /xf0/x93/x84/x98 EGYPTIAN HIEROGLYPH F024
++<U00013119> /xf0/x93/x84/x99 EGYPTIAN HIEROGLYPH F025
++<U0001311A> /xf0/x93/x84/x9a EGYPTIAN HIEROGLYPH F026
++<U0001311B> /xf0/x93/x84/x9b EGYPTIAN HIEROGLYPH F027
++<U0001311C> /xf0/x93/x84/x9c EGYPTIAN HIEROGLYPH F028
++<U0001311D> /xf0/x93/x84/x9d EGYPTIAN HIEROGLYPH F029
++<U0001311E> /xf0/x93/x84/x9e EGYPTIAN HIEROGLYPH F030
++<U0001311F> /xf0/x93/x84/x9f EGYPTIAN HIEROGLYPH F031
++<U00013120> /xf0/x93/x84/xa0 EGYPTIAN HIEROGLYPH F031A
++<U00013121> /xf0/x93/x84/xa1 EGYPTIAN HIEROGLYPH F032
++<U00013122> /xf0/x93/x84/xa2 EGYPTIAN HIEROGLYPH F033
++<U00013123> /xf0/x93/x84/xa3 EGYPTIAN HIEROGLYPH F034
++<U00013124> /xf0/x93/x84/xa4 EGYPTIAN HIEROGLYPH F035
++<U00013125> /xf0/x93/x84/xa5 EGYPTIAN HIEROGLYPH F036
++<U00013126> /xf0/x93/x84/xa6 EGYPTIAN HIEROGLYPH F037
++<U00013127> /xf0/x93/x84/xa7 EGYPTIAN HIEROGLYPH F037A
++<U00013128> /xf0/x93/x84/xa8 EGYPTIAN HIEROGLYPH F038
++<U00013129> /xf0/x93/x84/xa9 EGYPTIAN HIEROGLYPH F038A
++<U0001312A> /xf0/x93/x84/xaa EGYPTIAN HIEROGLYPH F039
++<U0001312B> /xf0/x93/x84/xab EGYPTIAN HIEROGLYPH F040
++<U0001312C> /xf0/x93/x84/xac EGYPTIAN HIEROGLYPH F041
++<U0001312D> /xf0/x93/x84/xad EGYPTIAN HIEROGLYPH F042
++<U0001312E> /xf0/x93/x84/xae EGYPTIAN HIEROGLYPH F043
++<U0001312F> /xf0/x93/x84/xaf EGYPTIAN HIEROGLYPH F044
++<U00013130> /xf0/x93/x84/xb0 EGYPTIAN HIEROGLYPH F045
++<U00013131> /xf0/x93/x84/xb1 EGYPTIAN HIEROGLYPH F045A
++<U00013132> /xf0/x93/x84/xb2 EGYPTIAN HIEROGLYPH F046
++<U00013133> /xf0/x93/x84/xb3 EGYPTIAN HIEROGLYPH F046A
++<U00013134> /xf0/x93/x84/xb4 EGYPTIAN HIEROGLYPH F047
++<U00013135> /xf0/x93/x84/xb5 EGYPTIAN HIEROGLYPH F047A
++<U00013136> /xf0/x93/x84/xb6 EGYPTIAN HIEROGLYPH F048
++<U00013137> /xf0/x93/x84/xb7 EGYPTIAN HIEROGLYPH F049
++<U00013138> /xf0/x93/x84/xb8 EGYPTIAN HIEROGLYPH F050
++<U00013139> /xf0/x93/x84/xb9 EGYPTIAN HIEROGLYPH F051
++<U0001313A> /xf0/x93/x84/xba EGYPTIAN HIEROGLYPH F051A
++<U0001313B> /xf0/x93/x84/xbb EGYPTIAN HIEROGLYPH F051B
++<U0001313C> /xf0/x93/x84/xbc EGYPTIAN HIEROGLYPH F051C
++<U0001313D> /xf0/x93/x84/xbd EGYPTIAN HIEROGLYPH F052
++<U0001313E> /xf0/x93/x84/xbe EGYPTIAN HIEROGLYPH F053
++<U0001313F> /xf0/x93/x84/xbf EGYPTIAN HIEROGLYPH G001
++<U00013140> /xf0/x93/x85/x80 EGYPTIAN HIEROGLYPH G002
++<U00013141> /xf0/x93/x85/x81 EGYPTIAN HIEROGLYPH G003
++<U00013142> /xf0/x93/x85/x82 EGYPTIAN HIEROGLYPH G004
++<U00013143> /xf0/x93/x85/x83 EGYPTIAN HIEROGLYPH G005
++<U00013144> /xf0/x93/x85/x84 EGYPTIAN HIEROGLYPH G006
++<U00013145> /xf0/x93/x85/x85 EGYPTIAN HIEROGLYPH G006A
++<U00013146> /xf0/x93/x85/x86 EGYPTIAN HIEROGLYPH G007
++<U00013147> /xf0/x93/x85/x87 EGYPTIAN HIEROGLYPH G007A
++<U00013148> /xf0/x93/x85/x88 EGYPTIAN HIEROGLYPH G007B
++<U00013149> /xf0/x93/x85/x89 EGYPTIAN HIEROGLYPH G008
++<U0001314A> /xf0/x93/x85/x8a EGYPTIAN HIEROGLYPH G009
++<U0001314B> /xf0/x93/x85/x8b EGYPTIAN HIEROGLYPH G010
++<U0001314C> /xf0/x93/x85/x8c EGYPTIAN HIEROGLYPH G011
++<U0001314D> /xf0/x93/x85/x8d EGYPTIAN HIEROGLYPH G011A
++<U0001314E> /xf0/x93/x85/x8e EGYPTIAN HIEROGLYPH G012
++<U0001314F> /xf0/x93/x85/x8f EGYPTIAN HIEROGLYPH G013
++<U00013150> /xf0/x93/x85/x90 EGYPTIAN HIEROGLYPH G014
++<U00013151> /xf0/x93/x85/x91 EGYPTIAN HIEROGLYPH G015
++<U00013152> /xf0/x93/x85/x92 EGYPTIAN HIEROGLYPH G016
++<U00013153> /xf0/x93/x85/x93 EGYPTIAN HIEROGLYPH G017
++<U00013154> /xf0/x93/x85/x94 EGYPTIAN HIEROGLYPH G018
++<U00013155> /xf0/x93/x85/x95 EGYPTIAN HIEROGLYPH G019
++<U00013156> /xf0/x93/x85/x96 EGYPTIAN HIEROGLYPH G020
++<U00013157> /xf0/x93/x85/x97 EGYPTIAN HIEROGLYPH G020A
++<U00013158> /xf0/x93/x85/x98 EGYPTIAN HIEROGLYPH G021
++<U00013159> /xf0/x93/x85/x99 EGYPTIAN HIEROGLYPH G022
++<U0001315A> /xf0/x93/x85/x9a EGYPTIAN HIEROGLYPH G023
++<U0001315B> /xf0/x93/x85/x9b EGYPTIAN HIEROGLYPH G024
++<U0001315C> /xf0/x93/x85/x9c EGYPTIAN HIEROGLYPH G025
++<U0001315D> /xf0/x93/x85/x9d EGYPTIAN HIEROGLYPH G026
++<U0001315E> /xf0/x93/x85/x9e EGYPTIAN HIEROGLYPH G026A
++<U0001315F> /xf0/x93/x85/x9f EGYPTIAN HIEROGLYPH G027
++<U00013160> /xf0/x93/x85/xa0 EGYPTIAN HIEROGLYPH G028
++<U00013161> /xf0/x93/x85/xa1 EGYPTIAN HIEROGLYPH G029
++<U00013162> /xf0/x93/x85/xa2 EGYPTIAN HIEROGLYPH G030
++<U00013163> /xf0/x93/x85/xa3 EGYPTIAN HIEROGLYPH G031
++<U00013164> /xf0/x93/x85/xa4 EGYPTIAN HIEROGLYPH G032
++<U00013165> /xf0/x93/x85/xa5 EGYPTIAN HIEROGLYPH G033
++<U00013166> /xf0/x93/x85/xa6 EGYPTIAN HIEROGLYPH G034
++<U00013167> /xf0/x93/x85/xa7 EGYPTIAN HIEROGLYPH G035
++<U00013168> /xf0/x93/x85/xa8 EGYPTIAN HIEROGLYPH G036
++<U00013169> /xf0/x93/x85/xa9 EGYPTIAN HIEROGLYPH G036A
++<U0001316A> /xf0/x93/x85/xaa EGYPTIAN HIEROGLYPH G037
++<U0001316B> /xf0/x93/x85/xab EGYPTIAN HIEROGLYPH G037A
++<U0001316C> /xf0/x93/x85/xac EGYPTIAN HIEROGLYPH G038
++<U0001316D> /xf0/x93/x85/xad EGYPTIAN HIEROGLYPH G039
++<U0001316E> /xf0/x93/x85/xae EGYPTIAN HIEROGLYPH G040
++<U0001316F> /xf0/x93/x85/xaf EGYPTIAN HIEROGLYPH G041
++<U00013170> /xf0/x93/x85/xb0 EGYPTIAN HIEROGLYPH G042
++<U00013171> /xf0/x93/x85/xb1 EGYPTIAN HIEROGLYPH G043
++<U00013172> /xf0/x93/x85/xb2 EGYPTIAN HIEROGLYPH G043A
++<U00013173> /xf0/x93/x85/xb3 EGYPTIAN HIEROGLYPH G044
++<U00013174> /xf0/x93/x85/xb4 EGYPTIAN HIEROGLYPH G045
++<U00013175> /xf0/x93/x85/xb5 EGYPTIAN HIEROGLYPH G045A
++<U00013176> /xf0/x93/x85/xb6 EGYPTIAN HIEROGLYPH G046
++<U00013177> /xf0/x93/x85/xb7 EGYPTIAN HIEROGLYPH G047
++<U00013178> /xf0/x93/x85/xb8 EGYPTIAN HIEROGLYPH G048
++<U00013179> /xf0/x93/x85/xb9 EGYPTIAN HIEROGLYPH G049
++<U0001317A> /xf0/x93/x85/xba EGYPTIAN HIEROGLYPH G050
++<U0001317B> /xf0/x93/x85/xbb EGYPTIAN HIEROGLYPH G051
++<U0001317C> /xf0/x93/x85/xbc EGYPTIAN HIEROGLYPH G052
++<U0001317D> /xf0/x93/x85/xbd EGYPTIAN HIEROGLYPH G053
++<U0001317E> /xf0/x93/x85/xbe EGYPTIAN HIEROGLYPH G054
++<U0001317F> /xf0/x93/x85/xbf EGYPTIAN HIEROGLYPH H001
++<U00013180> /xf0/x93/x86/x80 EGYPTIAN HIEROGLYPH H002
++<U00013181> /xf0/x93/x86/x81 EGYPTIAN HIEROGLYPH H003
++<U00013182> /xf0/x93/x86/x82 EGYPTIAN HIEROGLYPH H004
++<U00013183> /xf0/x93/x86/x83 EGYPTIAN HIEROGLYPH H005
++<U00013184> /xf0/x93/x86/x84 EGYPTIAN HIEROGLYPH H006
++<U00013185> /xf0/x93/x86/x85 EGYPTIAN HIEROGLYPH H006A
++<U00013186> /xf0/x93/x86/x86 EGYPTIAN HIEROGLYPH H007
++<U00013187> /xf0/x93/x86/x87 EGYPTIAN HIEROGLYPH H008
++<U00013188> /xf0/x93/x86/x88 EGYPTIAN HIEROGLYPH I001
++<U00013189> /xf0/x93/x86/x89 EGYPTIAN HIEROGLYPH I002
++<U0001318A> /xf0/x93/x86/x8a EGYPTIAN HIEROGLYPH I003
++<U0001318B> /xf0/x93/x86/x8b EGYPTIAN HIEROGLYPH I004
++<U0001318C> /xf0/x93/x86/x8c EGYPTIAN HIEROGLYPH I005
++<U0001318D> /xf0/x93/x86/x8d EGYPTIAN HIEROGLYPH I005A
++<U0001318E> /xf0/x93/x86/x8e EGYPTIAN HIEROGLYPH I006
++<U0001318F> /xf0/x93/x86/x8f EGYPTIAN HIEROGLYPH I007
++<U00013190> /xf0/x93/x86/x90 EGYPTIAN HIEROGLYPH I008
++<U00013191> /xf0/x93/x86/x91 EGYPTIAN HIEROGLYPH I009
++<U00013192> /xf0/x93/x86/x92 EGYPTIAN HIEROGLYPH I009A
++<U00013193> /xf0/x93/x86/x93 EGYPTIAN HIEROGLYPH I010
++<U00013194> /xf0/x93/x86/x94 EGYPTIAN HIEROGLYPH I010A
++<U00013195> /xf0/x93/x86/x95 EGYPTIAN HIEROGLYPH I011
++<U00013196> /xf0/x93/x86/x96 EGYPTIAN HIEROGLYPH I011A
++<U00013197> /xf0/x93/x86/x97 EGYPTIAN HIEROGLYPH I012
++<U00013198> /xf0/x93/x86/x98 EGYPTIAN HIEROGLYPH I013
++<U00013199> /xf0/x93/x86/x99 EGYPTIAN HIEROGLYPH I014
++<U0001319A> /xf0/x93/x86/x9a EGYPTIAN HIEROGLYPH I015
++<U0001319B> /xf0/x93/x86/x9b EGYPTIAN HIEROGLYPH K001
++<U0001319C> /xf0/x93/x86/x9c EGYPTIAN HIEROGLYPH K002
++<U0001319D> /xf0/x93/x86/x9d EGYPTIAN HIEROGLYPH K003
++<U0001319E> /xf0/x93/x86/x9e EGYPTIAN HIEROGLYPH K004
++<U0001319F> /xf0/x93/x86/x9f EGYPTIAN HIEROGLYPH K005
++<U000131A0> /xf0/x93/x86/xa0 EGYPTIAN HIEROGLYPH K006
++<U000131A1> /xf0/x93/x86/xa1 EGYPTIAN HIEROGLYPH K007
++<U000131A2> /xf0/x93/x86/xa2 EGYPTIAN HIEROGLYPH K008
++<U000131A3> /xf0/x93/x86/xa3 EGYPTIAN HIEROGLYPH L001
++<U000131A4> /xf0/x93/x86/xa4 EGYPTIAN HIEROGLYPH L002
++<U000131A5> /xf0/x93/x86/xa5 EGYPTIAN HIEROGLYPH L002A
++<U000131A6> /xf0/x93/x86/xa6 EGYPTIAN HIEROGLYPH L003
++<U000131A7> /xf0/x93/x86/xa7 EGYPTIAN HIEROGLYPH L004
++<U000131A8> /xf0/x93/x86/xa8 EGYPTIAN HIEROGLYPH L005
++<U000131A9> /xf0/x93/x86/xa9 EGYPTIAN HIEROGLYPH L006
++<U000131AA> /xf0/x93/x86/xaa EGYPTIAN HIEROGLYPH L006A
++<U000131AB> /xf0/x93/x86/xab EGYPTIAN HIEROGLYPH L007
++<U000131AC> /xf0/x93/x86/xac EGYPTIAN HIEROGLYPH L008
++<U000131AD> /xf0/x93/x86/xad EGYPTIAN HIEROGLYPH M001
++<U000131AE> /xf0/x93/x86/xae EGYPTIAN HIEROGLYPH M001A
++<U000131AF> /xf0/x93/x86/xaf EGYPTIAN HIEROGLYPH M001B
++<U000131B0> /xf0/x93/x86/xb0 EGYPTIAN HIEROGLYPH M002
++<U000131B1> /xf0/x93/x86/xb1 EGYPTIAN HIEROGLYPH M003
++<U000131B2> /xf0/x93/x86/xb2 EGYPTIAN HIEROGLYPH M003A
++<U000131B3> /xf0/x93/x86/xb3 EGYPTIAN HIEROGLYPH M004
++<U000131B4> /xf0/x93/x86/xb4 EGYPTIAN HIEROGLYPH M005
++<U000131B5> /xf0/x93/x86/xb5 EGYPTIAN HIEROGLYPH M006
++<U000131B6> /xf0/x93/x86/xb6 EGYPTIAN HIEROGLYPH M007
++<U000131B7> /xf0/x93/x86/xb7 EGYPTIAN HIEROGLYPH M008
++<U000131B8> /xf0/x93/x86/xb8 EGYPTIAN HIEROGLYPH M009
++<U000131B9> /xf0/x93/x86/xb9 EGYPTIAN HIEROGLYPH M010
++<U000131BA> /xf0/x93/x86/xba EGYPTIAN HIEROGLYPH M010A
++<U000131BB> /xf0/x93/x86/xbb EGYPTIAN HIEROGLYPH M011
++<U000131BC> /xf0/x93/x86/xbc EGYPTIAN HIEROGLYPH M012
++<U000131BD> /xf0/x93/x86/xbd EGYPTIAN HIEROGLYPH M012A
++<U000131BE> /xf0/x93/x86/xbe EGYPTIAN HIEROGLYPH M012B
++<U000131BF> /xf0/x93/x86/xbf EGYPTIAN HIEROGLYPH M012C
++<U000131C0> /xf0/x93/x87/x80 EGYPTIAN HIEROGLYPH M012D
++<U000131C1> /xf0/x93/x87/x81 EGYPTIAN HIEROGLYPH M012E
++<U000131C2> /xf0/x93/x87/x82 EGYPTIAN HIEROGLYPH M012F
++<U000131C3> /xf0/x93/x87/x83 EGYPTIAN HIEROGLYPH M012G
++<U000131C4> /xf0/x93/x87/x84 EGYPTIAN HIEROGLYPH M012H
++<U000131C5> /xf0/x93/x87/x85 EGYPTIAN HIEROGLYPH M013
++<U000131C6> /xf0/x93/x87/x86 EGYPTIAN HIEROGLYPH M014
++<U000131C7> /xf0/x93/x87/x87 EGYPTIAN HIEROGLYPH M015
++<U000131C8> /xf0/x93/x87/x88 EGYPTIAN HIEROGLYPH M015A
++<U000131C9> /xf0/x93/x87/x89 EGYPTIAN HIEROGLYPH M016
++<U000131CA> /xf0/x93/x87/x8a EGYPTIAN HIEROGLYPH M016A
++<U000131CB> /xf0/x93/x87/x8b EGYPTIAN HIEROGLYPH M017
++<U000131CC> /xf0/x93/x87/x8c EGYPTIAN HIEROGLYPH M017A
++<U000131CD> /xf0/x93/x87/x8d EGYPTIAN HIEROGLYPH M018
++<U000131CE> /xf0/x93/x87/x8e EGYPTIAN HIEROGLYPH M019
++<U000131CF> /xf0/x93/x87/x8f EGYPTIAN HIEROGLYPH M020
++<U000131D0> /xf0/x93/x87/x90 EGYPTIAN HIEROGLYPH M021
++<U000131D1> /xf0/x93/x87/x91 EGYPTIAN HIEROGLYPH M022
++<U000131D2> /xf0/x93/x87/x92 EGYPTIAN HIEROGLYPH M022A
++<U000131D3> /xf0/x93/x87/x93 EGYPTIAN HIEROGLYPH M023
++<U000131D4> /xf0/x93/x87/x94 EGYPTIAN HIEROGLYPH M024
++<U000131D5> /xf0/x93/x87/x95 EGYPTIAN HIEROGLYPH M024A
++<U000131D6> /xf0/x93/x87/x96 EGYPTIAN HIEROGLYPH M025
++<U000131D7> /xf0/x93/x87/x97 EGYPTIAN HIEROGLYPH M026
++<U000131D8> /xf0/x93/x87/x98 EGYPTIAN HIEROGLYPH M027
++<U000131D9> /xf0/x93/x87/x99 EGYPTIAN HIEROGLYPH M028
++<U000131DA> /xf0/x93/x87/x9a EGYPTIAN HIEROGLYPH M028A
++<U000131DB> /xf0/x93/x87/x9b EGYPTIAN HIEROGLYPH M029
++<U000131DC> /xf0/x93/x87/x9c EGYPTIAN HIEROGLYPH M030
++<U000131DD> /xf0/x93/x87/x9d EGYPTIAN HIEROGLYPH M031
++<U000131DE> /xf0/x93/x87/x9e EGYPTIAN HIEROGLYPH M031A
++<U000131DF> /xf0/x93/x87/x9f EGYPTIAN HIEROGLYPH M032
++<U000131E0> /xf0/x93/x87/xa0 EGYPTIAN HIEROGLYPH M033
++<U000131E1> /xf0/x93/x87/xa1 EGYPTIAN HIEROGLYPH M033A
++<U000131E2> /xf0/x93/x87/xa2 EGYPTIAN HIEROGLYPH M033B
++<U000131E3> /xf0/x93/x87/xa3 EGYPTIAN HIEROGLYPH M034
++<U000131E4> /xf0/x93/x87/xa4 EGYPTIAN HIEROGLYPH M035
++<U000131E5> /xf0/x93/x87/xa5 EGYPTIAN HIEROGLYPH M036
++<U000131E6> /xf0/x93/x87/xa6 EGYPTIAN HIEROGLYPH M037
++<U000131E7> /xf0/x93/x87/xa7 EGYPTIAN HIEROGLYPH M038
++<U000131E8> /xf0/x93/x87/xa8 EGYPTIAN HIEROGLYPH M039
++<U000131E9> /xf0/x93/x87/xa9 EGYPTIAN HIEROGLYPH M040
++<U000131EA> /xf0/x93/x87/xaa EGYPTIAN HIEROGLYPH M040A
++<U000131EB> /xf0/x93/x87/xab EGYPTIAN HIEROGLYPH M041
++<U000131EC> /xf0/x93/x87/xac EGYPTIAN HIEROGLYPH M042
++<U000131ED> /xf0/x93/x87/xad EGYPTIAN HIEROGLYPH M043
++<U000131EE> /xf0/x93/x87/xae EGYPTIAN HIEROGLYPH M044
++<U000131EF> /xf0/x93/x87/xaf EGYPTIAN HIEROGLYPH N001
++<U000131F0> /xf0/x93/x87/xb0 EGYPTIAN HIEROGLYPH N002
++<U000131F1> /xf0/x93/x87/xb1 EGYPTIAN HIEROGLYPH N003
++<U000131F2> /xf0/x93/x87/xb2 EGYPTIAN HIEROGLYPH N004
++<U000131F3> /xf0/x93/x87/xb3 EGYPTIAN HIEROGLYPH N005
++<U000131F4> /xf0/x93/x87/xb4 EGYPTIAN HIEROGLYPH N006
++<U000131F5> /xf0/x93/x87/xb5 EGYPTIAN HIEROGLYPH N007
++<U000131F6> /xf0/x93/x87/xb6 EGYPTIAN HIEROGLYPH N008
++<U000131F7> /xf0/x93/x87/xb7 EGYPTIAN HIEROGLYPH N009
++<U000131F8> /xf0/x93/x87/xb8 EGYPTIAN HIEROGLYPH N010
++<U000131F9> /xf0/x93/x87/xb9 EGYPTIAN HIEROGLYPH N011
++<U000131FA> /xf0/x93/x87/xba EGYPTIAN HIEROGLYPH N012
++<U000131FB> /xf0/x93/x87/xbb EGYPTIAN HIEROGLYPH N013
++<U000131FC> /xf0/x93/x87/xbc EGYPTIAN HIEROGLYPH N014
++<U000131FD> /xf0/x93/x87/xbd EGYPTIAN HIEROGLYPH N015
++<U000131FE> /xf0/x93/x87/xbe EGYPTIAN HIEROGLYPH N016
++<U000131FF> /xf0/x93/x87/xbf EGYPTIAN HIEROGLYPH N017
++<U00013200> /xf0/x93/x88/x80 EGYPTIAN HIEROGLYPH N018
++<U00013201> /xf0/x93/x88/x81 EGYPTIAN HIEROGLYPH N018A
++<U00013202> /xf0/x93/x88/x82 EGYPTIAN HIEROGLYPH N018B
++<U00013203> /xf0/x93/x88/x83 EGYPTIAN HIEROGLYPH N019
++<U00013204> /xf0/x93/x88/x84 EGYPTIAN HIEROGLYPH N020
++<U00013205> /xf0/x93/x88/x85 EGYPTIAN HIEROGLYPH N021
++<U00013206> /xf0/x93/x88/x86 EGYPTIAN HIEROGLYPH N022
++<U00013207> /xf0/x93/x88/x87 EGYPTIAN HIEROGLYPH N023
++<U00013208> /xf0/x93/x88/x88 EGYPTIAN HIEROGLYPH N024
++<U00013209> /xf0/x93/x88/x89 EGYPTIAN HIEROGLYPH N025
++<U0001320A> /xf0/x93/x88/x8a EGYPTIAN HIEROGLYPH N025A
++<U0001320B> /xf0/x93/x88/x8b EGYPTIAN HIEROGLYPH N026
++<U0001320C> /xf0/x93/x88/x8c EGYPTIAN HIEROGLYPH N027
++<U0001320D> /xf0/x93/x88/x8d EGYPTIAN HIEROGLYPH N028
++<U0001320E> /xf0/x93/x88/x8e EGYPTIAN HIEROGLYPH N029
++<U0001320F> /xf0/x93/x88/x8f EGYPTIAN HIEROGLYPH N030
++<U00013210> /xf0/x93/x88/x90 EGYPTIAN HIEROGLYPH N031
++<U00013211> /xf0/x93/x88/x91 EGYPTIAN HIEROGLYPH N032
++<U00013212> /xf0/x93/x88/x92 EGYPTIAN HIEROGLYPH N033
++<U00013213> /xf0/x93/x88/x93 EGYPTIAN HIEROGLYPH N033A
++<U00013214> /xf0/x93/x88/x94 EGYPTIAN HIEROGLYPH N034
++<U00013215> /xf0/x93/x88/x95 EGYPTIAN HIEROGLYPH N034A
++<U00013216> /xf0/x93/x88/x96 EGYPTIAN HIEROGLYPH N035
++<U00013217> /xf0/x93/x88/x97 EGYPTIAN HIEROGLYPH N035A
++<U00013218> /xf0/x93/x88/x98 EGYPTIAN HIEROGLYPH N036
++<U00013219> /xf0/x93/x88/x99 EGYPTIAN HIEROGLYPH N037
++<U0001321A> /xf0/x93/x88/x9a EGYPTIAN HIEROGLYPH N037A
++<U0001321B> /xf0/x93/x88/x9b EGYPTIAN HIEROGLYPH N038
++<U0001321C> /xf0/x93/x88/x9c EGYPTIAN HIEROGLYPH N039
++<U0001321D> /xf0/x93/x88/x9d EGYPTIAN HIEROGLYPH N040
++<U0001321E> /xf0/x93/x88/x9e EGYPTIAN HIEROGLYPH N041
++<U0001321F> /xf0/x93/x88/x9f EGYPTIAN HIEROGLYPH N042
++<U00013220> /xf0/x93/x88/xa0 EGYPTIAN HIEROGLYPH NL001
++<U00013221> /xf0/x93/x88/xa1 EGYPTIAN HIEROGLYPH NL002
++<U00013222> /xf0/x93/x88/xa2 EGYPTIAN HIEROGLYPH NL003
++<U00013223> /xf0/x93/x88/xa3 EGYPTIAN HIEROGLYPH NL004
++<U00013224> /xf0/x93/x88/xa4 EGYPTIAN HIEROGLYPH NL005
++<U00013225> /xf0/x93/x88/xa5 EGYPTIAN HIEROGLYPH NL005A
++<U00013226> /xf0/x93/x88/xa6 EGYPTIAN HIEROGLYPH NL006
++<U00013227> /xf0/x93/x88/xa7 EGYPTIAN HIEROGLYPH NL007
++<U00013228> /xf0/x93/x88/xa8 EGYPTIAN HIEROGLYPH NL008
++<U00013229> /xf0/x93/x88/xa9 EGYPTIAN HIEROGLYPH NL009
++<U0001322A> /xf0/x93/x88/xaa EGYPTIAN HIEROGLYPH NL010
++<U0001322B> /xf0/x93/x88/xab EGYPTIAN HIEROGLYPH NL011
++<U0001322C> /xf0/x93/x88/xac EGYPTIAN HIEROGLYPH NL012
++<U0001322D> /xf0/x93/x88/xad EGYPTIAN HIEROGLYPH NL013
++<U0001322E> /xf0/x93/x88/xae EGYPTIAN HIEROGLYPH NL014
++<U0001322F> /xf0/x93/x88/xaf EGYPTIAN HIEROGLYPH NL015
++<U00013230> /xf0/x93/x88/xb0 EGYPTIAN HIEROGLYPH NL016
++<U00013231> /xf0/x93/x88/xb1 EGYPTIAN HIEROGLYPH NL017
++<U00013232> /xf0/x93/x88/xb2 EGYPTIAN HIEROGLYPH NL017A
++<U00013233> /xf0/x93/x88/xb3 EGYPTIAN HIEROGLYPH NL018
++<U00013234> /xf0/x93/x88/xb4 EGYPTIAN HIEROGLYPH NL019
++<U00013235> /xf0/x93/x88/xb5 EGYPTIAN HIEROGLYPH NL020
++<U00013236> /xf0/x93/x88/xb6 EGYPTIAN HIEROGLYPH NU001
++<U00013237> /xf0/x93/x88/xb7 EGYPTIAN HIEROGLYPH NU002
++<U00013238> /xf0/x93/x88/xb8 EGYPTIAN HIEROGLYPH NU003
++<U00013239> /xf0/x93/x88/xb9 EGYPTIAN HIEROGLYPH NU004
++<U0001323A> /xf0/x93/x88/xba EGYPTIAN HIEROGLYPH NU005
++<U0001323B> /xf0/x93/x88/xbb EGYPTIAN HIEROGLYPH NU006
++<U0001323C> /xf0/x93/x88/xbc EGYPTIAN HIEROGLYPH NU007
++<U0001323D> /xf0/x93/x88/xbd EGYPTIAN HIEROGLYPH NU008
++<U0001323E> /xf0/x93/x88/xbe EGYPTIAN HIEROGLYPH NU009
++<U0001323F> /xf0/x93/x88/xbf EGYPTIAN HIEROGLYPH NU010
++<U00013240> /xf0/x93/x89/x80 EGYPTIAN HIEROGLYPH NU010A
++<U00013241> /xf0/x93/x89/x81 EGYPTIAN HIEROGLYPH NU011
++<U00013242> /xf0/x93/x89/x82 EGYPTIAN HIEROGLYPH NU011A
++<U00013243> /xf0/x93/x89/x83 EGYPTIAN HIEROGLYPH NU012
++<U00013244> /xf0/x93/x89/x84 EGYPTIAN HIEROGLYPH NU013
++<U00013245> /xf0/x93/x89/x85 EGYPTIAN HIEROGLYPH NU014
++<U00013246> /xf0/x93/x89/x86 EGYPTIAN HIEROGLYPH NU015
++<U00013247> /xf0/x93/x89/x87 EGYPTIAN HIEROGLYPH NU016
++<U00013248> /xf0/x93/x89/x88 EGYPTIAN HIEROGLYPH NU017
++<U00013249> /xf0/x93/x89/x89 EGYPTIAN HIEROGLYPH NU018
++<U0001324A> /xf0/x93/x89/x8a EGYPTIAN HIEROGLYPH NU018A
++<U0001324B> /xf0/x93/x89/x8b EGYPTIAN HIEROGLYPH NU019
++<U0001324C> /xf0/x93/x89/x8c EGYPTIAN HIEROGLYPH NU020
++<U0001324D> /xf0/x93/x89/x8d EGYPTIAN HIEROGLYPH NU021
++<U0001324E> /xf0/x93/x89/x8e EGYPTIAN HIEROGLYPH NU022
++<U0001324F> /xf0/x93/x89/x8f EGYPTIAN HIEROGLYPH NU022A
++<U00013250> /xf0/x93/x89/x90 EGYPTIAN HIEROGLYPH O001
++<U00013251> /xf0/x93/x89/x91 EGYPTIAN HIEROGLYPH O001A
++<U00013252> /xf0/x93/x89/x92 EGYPTIAN HIEROGLYPH O002
++<U00013253> /xf0/x93/x89/x93 EGYPTIAN HIEROGLYPH O003
++<U00013254> /xf0/x93/x89/x94 EGYPTIAN HIEROGLYPH O004
++<U00013255> /xf0/x93/x89/x95 EGYPTIAN HIEROGLYPH O005
++<U00013256> /xf0/x93/x89/x96 EGYPTIAN HIEROGLYPH O005A
++<U00013257> /xf0/x93/x89/x97 EGYPTIAN HIEROGLYPH O006
++<U00013258> /xf0/x93/x89/x98 EGYPTIAN HIEROGLYPH O006A
++<U00013259> /xf0/x93/x89/x99 EGYPTIAN HIEROGLYPH O006B
++<U0001325A> /xf0/x93/x89/x9a EGYPTIAN HIEROGLYPH O006C
++<U0001325B> /xf0/x93/x89/x9b EGYPTIAN HIEROGLYPH O006D
++<U0001325C> /xf0/x93/x89/x9c EGYPTIAN HIEROGLYPH O006E
++<U0001325D> /xf0/x93/x89/x9d EGYPTIAN HIEROGLYPH O006F
++<U0001325E> /xf0/x93/x89/x9e EGYPTIAN HIEROGLYPH O007
++<U0001325F> /xf0/x93/x89/x9f EGYPTIAN HIEROGLYPH O008
++<U00013260> /xf0/x93/x89/xa0 EGYPTIAN HIEROGLYPH O009
++<U00013261> /xf0/x93/x89/xa1 EGYPTIAN HIEROGLYPH O010
++<U00013262> /xf0/x93/x89/xa2 EGYPTIAN HIEROGLYPH O010A
++<U00013263> /xf0/x93/x89/xa3 EGYPTIAN HIEROGLYPH O010B
++<U00013264> /xf0/x93/x89/xa4 EGYPTIAN HIEROGLYPH O010C
++<U00013265> /xf0/x93/x89/xa5 EGYPTIAN HIEROGLYPH O011
++<U00013266> /xf0/x93/x89/xa6 EGYPTIAN HIEROGLYPH O012
++<U00013267> /xf0/x93/x89/xa7 EGYPTIAN HIEROGLYPH O013
++<U00013268> /xf0/x93/x89/xa8 EGYPTIAN HIEROGLYPH O014
++<U00013269> /xf0/x93/x89/xa9 EGYPTIAN HIEROGLYPH O015
++<U0001326A> /xf0/x93/x89/xaa EGYPTIAN HIEROGLYPH O016
++<U0001326B> /xf0/x93/x89/xab EGYPTIAN HIEROGLYPH O017
++<U0001326C> /xf0/x93/x89/xac EGYPTIAN HIEROGLYPH O018
++<U0001326D> /xf0/x93/x89/xad EGYPTIAN HIEROGLYPH O019
++<U0001326E> /xf0/x93/x89/xae EGYPTIAN HIEROGLYPH O019A
++<U0001326F> /xf0/x93/x89/xaf EGYPTIAN HIEROGLYPH O020
++<U00013270> /xf0/x93/x89/xb0 EGYPTIAN HIEROGLYPH O020A
++<U00013271> /xf0/x93/x89/xb1 EGYPTIAN HIEROGLYPH O021
++<U00013272> /xf0/x93/x89/xb2 EGYPTIAN HIEROGLYPH O022
++<U00013273> /xf0/x93/x89/xb3 EGYPTIAN HIEROGLYPH O023
++<U00013274> /xf0/x93/x89/xb4 EGYPTIAN HIEROGLYPH O024
++<U00013275> /xf0/x93/x89/xb5 EGYPTIAN HIEROGLYPH O024A
++<U00013276> /xf0/x93/x89/xb6 EGYPTIAN HIEROGLYPH O025
++<U00013277> /xf0/x93/x89/xb7 EGYPTIAN HIEROGLYPH O025A
++<U00013278> /xf0/x93/x89/xb8 EGYPTIAN HIEROGLYPH O026
++<U00013279> /xf0/x93/x89/xb9 EGYPTIAN HIEROGLYPH O027
++<U0001327A> /xf0/x93/x89/xba EGYPTIAN HIEROGLYPH O028
++<U0001327B> /xf0/x93/x89/xbb EGYPTIAN HIEROGLYPH O029
++<U0001327C> /xf0/x93/x89/xbc EGYPTIAN HIEROGLYPH O029A
++<U0001327D> /xf0/x93/x89/xbd EGYPTIAN HIEROGLYPH O030
++<U0001327E> /xf0/x93/x89/xbe EGYPTIAN HIEROGLYPH O030A
++<U0001327F> /xf0/x93/x89/xbf EGYPTIAN HIEROGLYPH O031
++<U00013280> /xf0/x93/x8a/x80 EGYPTIAN HIEROGLYPH O032
++<U00013281> /xf0/x93/x8a/x81 EGYPTIAN HIEROGLYPH O033
++<U00013282> /xf0/x93/x8a/x82 EGYPTIAN HIEROGLYPH O033A
++<U00013283> /xf0/x93/x8a/x83 EGYPTIAN HIEROGLYPH O034
++<U00013284> /xf0/x93/x8a/x84 EGYPTIAN HIEROGLYPH O035
++<U00013285> /xf0/x93/x8a/x85 EGYPTIAN HIEROGLYPH O036
++<U00013286> /xf0/x93/x8a/x86 EGYPTIAN HIEROGLYPH O036A
++<U00013287> /xf0/x93/x8a/x87 EGYPTIAN HIEROGLYPH O036B
++<U00013288> /xf0/x93/x8a/x88 EGYPTIAN HIEROGLYPH O036C
++<U00013289> /xf0/x93/x8a/x89 EGYPTIAN HIEROGLYPH O036D
++<U0001328A> /xf0/x93/x8a/x8a EGYPTIAN HIEROGLYPH O037
++<U0001328B> /xf0/x93/x8a/x8b EGYPTIAN HIEROGLYPH O038
++<U0001328C> /xf0/x93/x8a/x8c EGYPTIAN HIEROGLYPH O039
++<U0001328D> /xf0/x93/x8a/x8d EGYPTIAN HIEROGLYPH O040
++<U0001328E> /xf0/x93/x8a/x8e EGYPTIAN HIEROGLYPH O041
++<U0001328F> /xf0/x93/x8a/x8f EGYPTIAN HIEROGLYPH O042
++<U00013290> /xf0/x93/x8a/x90 EGYPTIAN HIEROGLYPH O043
++<U00013291> /xf0/x93/x8a/x91 EGYPTIAN HIEROGLYPH O044
++<U00013292> /xf0/x93/x8a/x92 EGYPTIAN HIEROGLYPH O045
++<U00013293> /xf0/x93/x8a/x93 EGYPTIAN HIEROGLYPH O046
++<U00013294> /xf0/x93/x8a/x94 EGYPTIAN HIEROGLYPH O047
++<U00013295> /xf0/x93/x8a/x95 EGYPTIAN HIEROGLYPH O048
++<U00013296> /xf0/x93/x8a/x96 EGYPTIAN HIEROGLYPH O049
++<U00013297> /xf0/x93/x8a/x97 EGYPTIAN HIEROGLYPH O050
++<U00013298> /xf0/x93/x8a/x98 EGYPTIAN HIEROGLYPH O050A
++<U00013299> /xf0/x93/x8a/x99 EGYPTIAN HIEROGLYPH O050B
++<U0001329A> /xf0/x93/x8a/x9a EGYPTIAN HIEROGLYPH O051
++<U0001329B> /xf0/x93/x8a/x9b EGYPTIAN HIEROGLYPH P001
++<U0001329C> /xf0/x93/x8a/x9c EGYPTIAN HIEROGLYPH P001A
++<U0001329D> /xf0/x93/x8a/x9d EGYPTIAN HIEROGLYPH P002
++<U0001329E> /xf0/x93/x8a/x9e EGYPTIAN HIEROGLYPH P003
++<U0001329F> /xf0/x93/x8a/x9f EGYPTIAN HIEROGLYPH P003A
++<U000132A0> /xf0/x93/x8a/xa0 EGYPTIAN HIEROGLYPH P004
++<U000132A1> /xf0/x93/x8a/xa1 EGYPTIAN HIEROGLYPH P005
++<U000132A2> /xf0/x93/x8a/xa2 EGYPTIAN HIEROGLYPH P006
++<U000132A3> /xf0/x93/x8a/xa3 EGYPTIAN HIEROGLYPH P007
++<U000132A4> /xf0/x93/x8a/xa4 EGYPTIAN HIEROGLYPH P008
++<U000132A5> /xf0/x93/x8a/xa5 EGYPTIAN HIEROGLYPH P009
++<U000132A6> /xf0/x93/x8a/xa6 EGYPTIAN HIEROGLYPH P010
++<U000132A7> /xf0/x93/x8a/xa7 EGYPTIAN HIEROGLYPH P011
++<U000132A8> /xf0/x93/x8a/xa8 EGYPTIAN HIEROGLYPH Q001
++<U000132A9> /xf0/x93/x8a/xa9 EGYPTIAN HIEROGLYPH Q002
++<U000132AA> /xf0/x93/x8a/xaa EGYPTIAN HIEROGLYPH Q003
++<U000132AB> /xf0/x93/x8a/xab EGYPTIAN HIEROGLYPH Q004
++<U000132AC> /xf0/x93/x8a/xac EGYPTIAN HIEROGLYPH Q005
++<U000132AD> /xf0/x93/x8a/xad EGYPTIAN HIEROGLYPH Q006
++<U000132AE> /xf0/x93/x8a/xae EGYPTIAN HIEROGLYPH Q007
++<U000132AF> /xf0/x93/x8a/xaf EGYPTIAN HIEROGLYPH R001
++<U000132B0> /xf0/x93/x8a/xb0 EGYPTIAN HIEROGLYPH R002
++<U000132B1> /xf0/x93/x8a/xb1 EGYPTIAN HIEROGLYPH R002A
++<U000132B2> /xf0/x93/x8a/xb2 EGYPTIAN HIEROGLYPH R003
++<U000132B3> /xf0/x93/x8a/xb3 EGYPTIAN HIEROGLYPH R003A
++<U000132B4> /xf0/x93/x8a/xb4 EGYPTIAN HIEROGLYPH R003B
++<U000132B5> /xf0/x93/x8a/xb5 EGYPTIAN HIEROGLYPH R004
++<U000132B6> /xf0/x93/x8a/xb6 EGYPTIAN HIEROGLYPH R005
++<U000132B7> /xf0/x93/x8a/xb7 EGYPTIAN HIEROGLYPH R006
++<U000132B8> /xf0/x93/x8a/xb8 EGYPTIAN HIEROGLYPH R007
++<U000132B9> /xf0/x93/x8a/xb9 EGYPTIAN HIEROGLYPH R008
++<U000132BA> /xf0/x93/x8a/xba EGYPTIAN HIEROGLYPH R009
++<U000132BB> /xf0/x93/x8a/xbb EGYPTIAN HIEROGLYPH R010
++<U000132BC> /xf0/x93/x8a/xbc EGYPTIAN HIEROGLYPH R010A
++<U000132BD> /xf0/x93/x8a/xbd EGYPTIAN HIEROGLYPH R011
++<U000132BE> /xf0/x93/x8a/xbe EGYPTIAN HIEROGLYPH R012
++<U000132BF> /xf0/x93/x8a/xbf EGYPTIAN HIEROGLYPH R013
++<U000132C0> /xf0/x93/x8b/x80 EGYPTIAN HIEROGLYPH R014
++<U000132C1> /xf0/x93/x8b/x81 EGYPTIAN HIEROGLYPH R015
++<U000132C2> /xf0/x93/x8b/x82 EGYPTIAN HIEROGLYPH R016
++<U000132C3> /xf0/x93/x8b/x83 EGYPTIAN HIEROGLYPH R016A
++<U000132C4> /xf0/x93/x8b/x84 EGYPTIAN HIEROGLYPH R017
++<U000132C5> /xf0/x93/x8b/x85 EGYPTIAN HIEROGLYPH R018
++<U000132C6> /xf0/x93/x8b/x86 EGYPTIAN HIEROGLYPH R019
++<U000132C7> /xf0/x93/x8b/x87 EGYPTIAN HIEROGLYPH R020
++<U000132C8> /xf0/x93/x8b/x88 EGYPTIAN HIEROGLYPH R021
++<U000132C9> /xf0/x93/x8b/x89 EGYPTIAN HIEROGLYPH R022
++<U000132CA> /xf0/x93/x8b/x8a EGYPTIAN HIEROGLYPH R023
++<U000132CB> /xf0/x93/x8b/x8b EGYPTIAN HIEROGLYPH R024
++<U000132CC> /xf0/x93/x8b/x8c EGYPTIAN HIEROGLYPH R025
++<U000132CD> /xf0/x93/x8b/x8d EGYPTIAN HIEROGLYPH R026
++<U000132CE> /xf0/x93/x8b/x8e EGYPTIAN HIEROGLYPH R027
++<U000132CF> /xf0/x93/x8b/x8f EGYPTIAN HIEROGLYPH R028
++<U000132D0> /xf0/x93/x8b/x90 EGYPTIAN HIEROGLYPH R029
++<U000132D1> /xf0/x93/x8b/x91 EGYPTIAN HIEROGLYPH S001
++<U000132D2> /xf0/x93/x8b/x92 EGYPTIAN HIEROGLYPH S002
++<U000132D3> /xf0/x93/x8b/x93 EGYPTIAN HIEROGLYPH S002A
++<U000132D4> /xf0/x93/x8b/x94 EGYPTIAN HIEROGLYPH S003
++<U000132D5> /xf0/x93/x8b/x95 EGYPTIAN HIEROGLYPH S004
++<U000132D6> /xf0/x93/x8b/x96 EGYPTIAN HIEROGLYPH S005
++<U000132D7> /xf0/x93/x8b/x97 EGYPTIAN HIEROGLYPH S006
++<U000132D8> /xf0/x93/x8b/x98 EGYPTIAN HIEROGLYPH S006A
++<U000132D9> /xf0/x93/x8b/x99 EGYPTIAN HIEROGLYPH S007
++<U000132DA> /xf0/x93/x8b/x9a EGYPTIAN HIEROGLYPH S008
++<U000132DB> /xf0/x93/x8b/x9b EGYPTIAN HIEROGLYPH S009
++<U000132DC> /xf0/x93/x8b/x9c EGYPTIAN HIEROGLYPH S010
++<U000132DD> /xf0/x93/x8b/x9d EGYPTIAN HIEROGLYPH S011
++<U000132DE> /xf0/x93/x8b/x9e EGYPTIAN HIEROGLYPH S012
++<U000132DF> /xf0/x93/x8b/x9f EGYPTIAN HIEROGLYPH S013
++<U000132E0> /xf0/x93/x8b/xa0 EGYPTIAN HIEROGLYPH S014
++<U000132E1> /xf0/x93/x8b/xa1 EGYPTIAN HIEROGLYPH S014A
++<U000132E2> /xf0/x93/x8b/xa2 EGYPTIAN HIEROGLYPH S014B
++<U000132E3> /xf0/x93/x8b/xa3 EGYPTIAN HIEROGLYPH S015
++<U000132E4> /xf0/x93/x8b/xa4 EGYPTIAN HIEROGLYPH S016
++<U000132E5> /xf0/x93/x8b/xa5 EGYPTIAN HIEROGLYPH S017
++<U000132E6> /xf0/x93/x8b/xa6 EGYPTIAN HIEROGLYPH S017A
++<U000132E7> /xf0/x93/x8b/xa7 EGYPTIAN HIEROGLYPH S018
++<U000132E8> /xf0/x93/x8b/xa8 EGYPTIAN HIEROGLYPH S019
++<U000132E9> /xf0/x93/x8b/xa9 EGYPTIAN HIEROGLYPH S020
++<U000132EA> /xf0/x93/x8b/xaa EGYPTIAN HIEROGLYPH S021
++<U000132EB> /xf0/x93/x8b/xab EGYPTIAN HIEROGLYPH S022
++<U000132EC> /xf0/x93/x8b/xac EGYPTIAN HIEROGLYPH S023
++<U000132ED> /xf0/x93/x8b/xad EGYPTIAN HIEROGLYPH S024
++<U000132EE> /xf0/x93/x8b/xae EGYPTIAN HIEROGLYPH S025
++<U000132EF> /xf0/x93/x8b/xaf EGYPTIAN HIEROGLYPH S026
++<U000132F0> /xf0/x93/x8b/xb0 EGYPTIAN HIEROGLYPH S026A
++<U000132F1> /xf0/x93/x8b/xb1 EGYPTIAN HIEROGLYPH S026B
++<U000132F2> /xf0/x93/x8b/xb2 EGYPTIAN HIEROGLYPH S027
++<U000132F3> /xf0/x93/x8b/xb3 EGYPTIAN HIEROGLYPH S028
++<U000132F4> /xf0/x93/x8b/xb4 EGYPTIAN HIEROGLYPH S029
++<U000132F5> /xf0/x93/x8b/xb5 EGYPTIAN HIEROGLYPH S030
++<U000132F6> /xf0/x93/x8b/xb6 EGYPTIAN HIEROGLYPH S031
++<U000132F7> /xf0/x93/x8b/xb7 EGYPTIAN HIEROGLYPH S032
++<U000132F8> /xf0/x93/x8b/xb8 EGYPTIAN HIEROGLYPH S033
++<U000132F9> /xf0/x93/x8b/xb9 EGYPTIAN HIEROGLYPH S034
++<U000132FA> /xf0/x93/x8b/xba EGYPTIAN HIEROGLYPH S035
++<U000132FB> /xf0/x93/x8b/xbb EGYPTIAN HIEROGLYPH S035A
++<U000132FC> /xf0/x93/x8b/xbc EGYPTIAN HIEROGLYPH S036
++<U000132FD> /xf0/x93/x8b/xbd EGYPTIAN HIEROGLYPH S037
++<U000132FE> /xf0/x93/x8b/xbe EGYPTIAN HIEROGLYPH S038
++<U000132FF> /xf0/x93/x8b/xbf EGYPTIAN HIEROGLYPH S039
++<U00013300> /xf0/x93/x8c/x80 EGYPTIAN HIEROGLYPH S040
++<U00013301> /xf0/x93/x8c/x81 EGYPTIAN HIEROGLYPH S041
++<U00013302> /xf0/x93/x8c/x82 EGYPTIAN HIEROGLYPH S042
++<U00013303> /xf0/x93/x8c/x83 EGYPTIAN HIEROGLYPH S043
++<U00013304> /xf0/x93/x8c/x84 EGYPTIAN HIEROGLYPH S044
++<U00013305> /xf0/x93/x8c/x85 EGYPTIAN HIEROGLYPH S045
++<U00013306> /xf0/x93/x8c/x86 EGYPTIAN HIEROGLYPH S046
++<U00013307> /xf0/x93/x8c/x87 EGYPTIAN HIEROGLYPH T001
++<U00013308> /xf0/x93/x8c/x88 EGYPTIAN HIEROGLYPH T002
++<U00013309> /xf0/x93/x8c/x89 EGYPTIAN HIEROGLYPH T003
++<U0001330A> /xf0/x93/x8c/x8a EGYPTIAN HIEROGLYPH T003A
++<U0001330B> /xf0/x93/x8c/x8b EGYPTIAN HIEROGLYPH T004
++<U0001330C> /xf0/x93/x8c/x8c EGYPTIAN HIEROGLYPH T005
++<U0001330D> /xf0/x93/x8c/x8d EGYPTIAN HIEROGLYPH T006
++<U0001330E> /xf0/x93/x8c/x8e EGYPTIAN HIEROGLYPH T007
++<U0001330F> /xf0/x93/x8c/x8f EGYPTIAN HIEROGLYPH T007A
++<U00013310> /xf0/x93/x8c/x90 EGYPTIAN HIEROGLYPH T008
++<U00013311> /xf0/x93/x8c/x91 EGYPTIAN HIEROGLYPH T008A
++<U00013312> /xf0/x93/x8c/x92 EGYPTIAN HIEROGLYPH T009
++<U00013313> /xf0/x93/x8c/x93 EGYPTIAN HIEROGLYPH T009A
++<U00013314> /xf0/x93/x8c/x94 EGYPTIAN HIEROGLYPH T010
++<U00013315> /xf0/x93/x8c/x95 EGYPTIAN HIEROGLYPH T011
++<U00013316> /xf0/x93/x8c/x96 EGYPTIAN HIEROGLYPH T011A
++<U00013317> /xf0/x93/x8c/x97 EGYPTIAN HIEROGLYPH T012
++<U00013318> /xf0/x93/x8c/x98 EGYPTIAN HIEROGLYPH T013
++<U00013319> /xf0/x93/x8c/x99 EGYPTIAN HIEROGLYPH T014
++<U0001331A> /xf0/x93/x8c/x9a EGYPTIAN HIEROGLYPH T015
++<U0001331B> /xf0/x93/x8c/x9b EGYPTIAN HIEROGLYPH T016
++<U0001331C> /xf0/x93/x8c/x9c EGYPTIAN HIEROGLYPH T016A
++<U0001331D> /xf0/x93/x8c/x9d EGYPTIAN HIEROGLYPH T017
++<U0001331E> /xf0/x93/x8c/x9e EGYPTIAN HIEROGLYPH T018
++<U0001331F> /xf0/x93/x8c/x9f EGYPTIAN HIEROGLYPH T019
++<U00013320> /xf0/x93/x8c/xa0 EGYPTIAN HIEROGLYPH T020
++<U00013321> /xf0/x93/x8c/xa1 EGYPTIAN HIEROGLYPH T021
++<U00013322> /xf0/x93/x8c/xa2 EGYPTIAN HIEROGLYPH T022
++<U00013323> /xf0/x93/x8c/xa3 EGYPTIAN HIEROGLYPH T023
++<U00013324> /xf0/x93/x8c/xa4 EGYPTIAN HIEROGLYPH T024
++<U00013325> /xf0/x93/x8c/xa5 EGYPTIAN HIEROGLYPH T025
++<U00013326> /xf0/x93/x8c/xa6 EGYPTIAN HIEROGLYPH T026
++<U00013327> /xf0/x93/x8c/xa7 EGYPTIAN HIEROGLYPH T027
++<U00013328> /xf0/x93/x8c/xa8 EGYPTIAN HIEROGLYPH T028
++<U00013329> /xf0/x93/x8c/xa9 EGYPTIAN HIEROGLYPH T029
++<U0001332A> /xf0/x93/x8c/xaa EGYPTIAN HIEROGLYPH T030
++<U0001332B> /xf0/x93/x8c/xab EGYPTIAN HIEROGLYPH T031
++<U0001332C> /xf0/x93/x8c/xac EGYPTIAN HIEROGLYPH T032
++<U0001332D> /xf0/x93/x8c/xad EGYPTIAN HIEROGLYPH T032A
++<U0001332E> /xf0/x93/x8c/xae EGYPTIAN HIEROGLYPH T033
++<U0001332F> /xf0/x93/x8c/xaf EGYPTIAN HIEROGLYPH T033A
++<U00013330> /xf0/x93/x8c/xb0 EGYPTIAN HIEROGLYPH T034
++<U00013331> /xf0/x93/x8c/xb1 EGYPTIAN HIEROGLYPH T035
++<U00013332> /xf0/x93/x8c/xb2 EGYPTIAN HIEROGLYPH T036
++<U00013333> /xf0/x93/x8c/xb3 EGYPTIAN HIEROGLYPH U001
++<U00013334> /xf0/x93/x8c/xb4 EGYPTIAN HIEROGLYPH U002
++<U00013335> /xf0/x93/x8c/xb5 EGYPTIAN HIEROGLYPH U003
++<U00013336> /xf0/x93/x8c/xb6 EGYPTIAN HIEROGLYPH U004
++<U00013337> /xf0/x93/x8c/xb7 EGYPTIAN HIEROGLYPH U005
++<U00013338> /xf0/x93/x8c/xb8 EGYPTIAN HIEROGLYPH U006
++<U00013339> /xf0/x93/x8c/xb9 EGYPTIAN HIEROGLYPH U006A
++<U0001333A> /xf0/x93/x8c/xba EGYPTIAN HIEROGLYPH U006B
++<U0001333B> /xf0/x93/x8c/xbb EGYPTIAN HIEROGLYPH U007
++<U0001333C> /xf0/x93/x8c/xbc EGYPTIAN HIEROGLYPH U008
++<U0001333D> /xf0/x93/x8c/xbd EGYPTIAN HIEROGLYPH U009
++<U0001333E> /xf0/x93/x8c/xbe EGYPTIAN HIEROGLYPH U010
++<U0001333F> /xf0/x93/x8c/xbf EGYPTIAN HIEROGLYPH U011
++<U00013340> /xf0/x93/x8d/x80 EGYPTIAN HIEROGLYPH U012
++<U00013341> /xf0/x93/x8d/x81 EGYPTIAN HIEROGLYPH U013
++<U00013342> /xf0/x93/x8d/x82 EGYPTIAN HIEROGLYPH U014
++<U00013343> /xf0/x93/x8d/x83 EGYPTIAN HIEROGLYPH U015
++<U00013344> /xf0/x93/x8d/x84 EGYPTIAN HIEROGLYPH U016
++<U00013345> /xf0/x93/x8d/x85 EGYPTIAN HIEROGLYPH U017
++<U00013346> /xf0/x93/x8d/x86 EGYPTIAN HIEROGLYPH U018
++<U00013347> /xf0/x93/x8d/x87 EGYPTIAN HIEROGLYPH U019
++<U00013348> /xf0/x93/x8d/x88 EGYPTIAN HIEROGLYPH U020
++<U00013349> /xf0/x93/x8d/x89 EGYPTIAN HIEROGLYPH U021
++<U0001334A> /xf0/x93/x8d/x8a EGYPTIAN HIEROGLYPH U022
++<U0001334B> /xf0/x93/x8d/x8b EGYPTIAN HIEROGLYPH U023
++<U0001334C> /xf0/x93/x8d/x8c EGYPTIAN HIEROGLYPH U023A
++<U0001334D> /xf0/x93/x8d/x8d EGYPTIAN HIEROGLYPH U024
++<U0001334E> /xf0/x93/x8d/x8e EGYPTIAN HIEROGLYPH U025
++<U0001334F> /xf0/x93/x8d/x8f EGYPTIAN HIEROGLYPH U026
++<U00013350> /xf0/x93/x8d/x90 EGYPTIAN HIEROGLYPH U027
++<U00013351> /xf0/x93/x8d/x91 EGYPTIAN HIEROGLYPH U028
++<U00013352> /xf0/x93/x8d/x92 EGYPTIAN HIEROGLYPH U029
++<U00013353> /xf0/x93/x8d/x93 EGYPTIAN HIEROGLYPH U029A
++<U00013354> /xf0/x93/x8d/x94 EGYPTIAN HIEROGLYPH U030
++<U00013355> /xf0/x93/x8d/x95 EGYPTIAN HIEROGLYPH U031
++<U00013356> /xf0/x93/x8d/x96 EGYPTIAN HIEROGLYPH U032
++<U00013357> /xf0/x93/x8d/x97 EGYPTIAN HIEROGLYPH U032A
++<U00013358> /xf0/x93/x8d/x98 EGYPTIAN HIEROGLYPH U033
++<U00013359> /xf0/x93/x8d/x99 EGYPTIAN HIEROGLYPH U034
++<U0001335A> /xf0/x93/x8d/x9a EGYPTIAN HIEROGLYPH U035
++<U0001335B> /xf0/x93/x8d/x9b EGYPTIAN HIEROGLYPH U036
++<U0001335C> /xf0/x93/x8d/x9c EGYPTIAN HIEROGLYPH U037
++<U0001335D> /xf0/x93/x8d/x9d EGYPTIAN HIEROGLYPH U038
++<U0001335E> /xf0/x93/x8d/x9e EGYPTIAN HIEROGLYPH U039
++<U0001335F> /xf0/x93/x8d/x9f EGYPTIAN HIEROGLYPH U040
++<U00013360> /xf0/x93/x8d/xa0 EGYPTIAN HIEROGLYPH U041
++<U00013361> /xf0/x93/x8d/xa1 EGYPTIAN HIEROGLYPH U042
++<U00013362> /xf0/x93/x8d/xa2 EGYPTIAN HIEROGLYPH V001
++<U00013363> /xf0/x93/x8d/xa3 EGYPTIAN HIEROGLYPH V001A
++<U00013364> /xf0/x93/x8d/xa4 EGYPTIAN HIEROGLYPH V001B
++<U00013365> /xf0/x93/x8d/xa5 EGYPTIAN HIEROGLYPH V001C
++<U00013366> /xf0/x93/x8d/xa6 EGYPTIAN HIEROGLYPH V001D
++<U00013367> /xf0/x93/x8d/xa7 EGYPTIAN HIEROGLYPH V001E
++<U00013368> /xf0/x93/x8d/xa8 EGYPTIAN HIEROGLYPH V001F
++<U00013369> /xf0/x93/x8d/xa9 EGYPTIAN HIEROGLYPH V001G
++<U0001336A> /xf0/x93/x8d/xaa EGYPTIAN HIEROGLYPH V001H
++<U0001336B> /xf0/x93/x8d/xab EGYPTIAN HIEROGLYPH V001I
++<U0001336C> /xf0/x93/x8d/xac EGYPTIAN HIEROGLYPH V002
++<U0001336D> /xf0/x93/x8d/xad EGYPTIAN HIEROGLYPH V002A
++<U0001336E> /xf0/x93/x8d/xae EGYPTIAN HIEROGLYPH V003
++<U0001336F> /xf0/x93/x8d/xaf EGYPTIAN HIEROGLYPH V004
++<U00013370> /xf0/x93/x8d/xb0 EGYPTIAN HIEROGLYPH V005
++<U00013371> /xf0/x93/x8d/xb1 EGYPTIAN HIEROGLYPH V006
++<U00013372> /xf0/x93/x8d/xb2 EGYPTIAN HIEROGLYPH V007
++<U00013373> /xf0/x93/x8d/xb3 EGYPTIAN HIEROGLYPH V007A
++<U00013374> /xf0/x93/x8d/xb4 EGYPTIAN HIEROGLYPH V007B
++<U00013375> /xf0/x93/x8d/xb5 EGYPTIAN HIEROGLYPH V008
++<U00013376> /xf0/x93/x8d/xb6 EGYPTIAN HIEROGLYPH V009
++<U00013377> /xf0/x93/x8d/xb7 EGYPTIAN HIEROGLYPH V010
++<U00013378> /xf0/x93/x8d/xb8 EGYPTIAN HIEROGLYPH V011
++<U00013379> /xf0/x93/x8d/xb9 EGYPTIAN HIEROGLYPH V011A
++<U0001337A> /xf0/x93/x8d/xba EGYPTIAN HIEROGLYPH V011B
++<U0001337B> /xf0/x93/x8d/xbb EGYPTIAN HIEROGLYPH V011C
++<U0001337C> /xf0/x93/x8d/xbc EGYPTIAN HIEROGLYPH V012
++<U0001337D> /xf0/x93/x8d/xbd EGYPTIAN HIEROGLYPH V012A
++<U0001337E> /xf0/x93/x8d/xbe EGYPTIAN HIEROGLYPH V012B
++<U0001337F> /xf0/x93/x8d/xbf EGYPTIAN HIEROGLYPH V013
++<U00013380> /xf0/x93/x8e/x80 EGYPTIAN HIEROGLYPH V014
++<U00013381> /xf0/x93/x8e/x81 EGYPTIAN HIEROGLYPH V015
++<U00013382> /xf0/x93/x8e/x82 EGYPTIAN HIEROGLYPH V016
++<U00013383> /xf0/x93/x8e/x83 EGYPTIAN HIEROGLYPH V017
++<U00013384> /xf0/x93/x8e/x84 EGYPTIAN HIEROGLYPH V018
++<U00013385> /xf0/x93/x8e/x85 EGYPTIAN HIEROGLYPH V019
++<U00013386> /xf0/x93/x8e/x86 EGYPTIAN HIEROGLYPH V020
++<U00013387> /xf0/x93/x8e/x87 EGYPTIAN HIEROGLYPH V020A
++<U00013388> /xf0/x93/x8e/x88 EGYPTIAN HIEROGLYPH V020B
++<U00013389> /xf0/x93/x8e/x89 EGYPTIAN HIEROGLYPH V020C
++<U0001338A> /xf0/x93/x8e/x8a EGYPTIAN HIEROGLYPH V020D
++<U0001338B> /xf0/x93/x8e/x8b EGYPTIAN HIEROGLYPH V020E
++<U0001338C> /xf0/x93/x8e/x8c EGYPTIAN HIEROGLYPH V020F
++<U0001338D> /xf0/x93/x8e/x8d EGYPTIAN HIEROGLYPH V020G
++<U0001338E> /xf0/x93/x8e/x8e EGYPTIAN HIEROGLYPH V020H
++<U0001338F> /xf0/x93/x8e/x8f EGYPTIAN HIEROGLYPH V020I
++<U00013390> /xf0/x93/x8e/x90 EGYPTIAN HIEROGLYPH V020J
++<U00013391> /xf0/x93/x8e/x91 EGYPTIAN HIEROGLYPH V020K
++<U00013392> /xf0/x93/x8e/x92 EGYPTIAN HIEROGLYPH V020L
++<U00013393> /xf0/x93/x8e/x93 EGYPTIAN HIEROGLYPH V021
++<U00013394> /xf0/x93/x8e/x94 EGYPTIAN HIEROGLYPH V022
++<U00013395> /xf0/x93/x8e/x95 EGYPTIAN HIEROGLYPH V023
++<U00013396> /xf0/x93/x8e/x96 EGYPTIAN HIEROGLYPH V023A
++<U00013397> /xf0/x93/x8e/x97 EGYPTIAN HIEROGLYPH V024
++<U00013398> /xf0/x93/x8e/x98 EGYPTIAN HIEROGLYPH V025
++<U00013399> /xf0/x93/x8e/x99 EGYPTIAN HIEROGLYPH V026
++<U0001339A> /xf0/x93/x8e/x9a EGYPTIAN HIEROGLYPH V027
++<U0001339B> /xf0/x93/x8e/x9b EGYPTIAN HIEROGLYPH V028
++<U0001339C> /xf0/x93/x8e/x9c EGYPTIAN HIEROGLYPH V028A
++<U0001339D> /xf0/x93/x8e/x9d EGYPTIAN HIEROGLYPH V029
++<U0001339E> /xf0/x93/x8e/x9e EGYPTIAN HIEROGLYPH V029A
++<U0001339F> /xf0/x93/x8e/x9f EGYPTIAN HIEROGLYPH V030
++<U000133A0> /xf0/x93/x8e/xa0 EGYPTIAN HIEROGLYPH V030A
++<U000133A1> /xf0/x93/x8e/xa1 EGYPTIAN HIEROGLYPH V031
++<U000133A2> /xf0/x93/x8e/xa2 EGYPTIAN HIEROGLYPH V031A
++<U000133A3> /xf0/x93/x8e/xa3 EGYPTIAN HIEROGLYPH V032
++<U000133A4> /xf0/x93/x8e/xa4 EGYPTIAN HIEROGLYPH V033
++<U000133A5> /xf0/x93/x8e/xa5 EGYPTIAN HIEROGLYPH V033A
++<U000133A6> /xf0/x93/x8e/xa6 EGYPTIAN HIEROGLYPH V034
++<U000133A7> /xf0/x93/x8e/xa7 EGYPTIAN HIEROGLYPH V035
++<U000133A8> /xf0/x93/x8e/xa8 EGYPTIAN HIEROGLYPH V036
++<U000133A9> /xf0/x93/x8e/xa9 EGYPTIAN HIEROGLYPH V037
++<U000133AA> /xf0/x93/x8e/xaa EGYPTIAN HIEROGLYPH V037A
++<U000133AB> /xf0/x93/x8e/xab EGYPTIAN HIEROGLYPH V038
++<U000133AC> /xf0/x93/x8e/xac EGYPTIAN HIEROGLYPH V039
++<U000133AD> /xf0/x93/x8e/xad EGYPTIAN HIEROGLYPH V040
++<U000133AE> /xf0/x93/x8e/xae EGYPTIAN HIEROGLYPH V040A
++<U000133AF> /xf0/x93/x8e/xaf EGYPTIAN HIEROGLYPH W001
++<U000133B0> /xf0/x93/x8e/xb0 EGYPTIAN HIEROGLYPH W002
++<U000133B1> /xf0/x93/x8e/xb1 EGYPTIAN HIEROGLYPH W003
++<U000133B2> /xf0/x93/x8e/xb2 EGYPTIAN HIEROGLYPH W003A
++<U000133B3> /xf0/x93/x8e/xb3 EGYPTIAN HIEROGLYPH W004
++<U000133B4> /xf0/x93/x8e/xb4 EGYPTIAN HIEROGLYPH W005
++<U000133B5> /xf0/x93/x8e/xb5 EGYPTIAN HIEROGLYPH W006
++<U000133B6> /xf0/x93/x8e/xb6 EGYPTIAN HIEROGLYPH W007
++<U000133B7> /xf0/x93/x8e/xb7 EGYPTIAN HIEROGLYPH W008
++<U000133B8> /xf0/x93/x8e/xb8 EGYPTIAN HIEROGLYPH W009
++<U000133B9> /xf0/x93/x8e/xb9 EGYPTIAN HIEROGLYPH W009A
++<U000133BA> /xf0/x93/x8e/xba EGYPTIAN HIEROGLYPH W010
++<U000133BB> /xf0/x93/x8e/xbb EGYPTIAN HIEROGLYPH W010A
++<U000133BC> /xf0/x93/x8e/xbc EGYPTIAN HIEROGLYPH W011
++<U000133BD> /xf0/x93/x8e/xbd EGYPTIAN HIEROGLYPH W012
++<U000133BE> /xf0/x93/x8e/xbe EGYPTIAN HIEROGLYPH W013
++<U000133BF> /xf0/x93/x8e/xbf EGYPTIAN HIEROGLYPH W014
++<U000133C0> /xf0/x93/x8f/x80 EGYPTIAN HIEROGLYPH W014A
++<U000133C1> /xf0/x93/x8f/x81 EGYPTIAN HIEROGLYPH W015
++<U000133C2> /xf0/x93/x8f/x82 EGYPTIAN HIEROGLYPH W016
++<U000133C3> /xf0/x93/x8f/x83 EGYPTIAN HIEROGLYPH W017
++<U000133C4> /xf0/x93/x8f/x84 EGYPTIAN HIEROGLYPH W017A
++<U000133C5> /xf0/x93/x8f/x85 EGYPTIAN HIEROGLYPH W018
++<U000133C6> /xf0/x93/x8f/x86 EGYPTIAN HIEROGLYPH W018A
++<U000133C7> /xf0/x93/x8f/x87 EGYPTIAN HIEROGLYPH W019
++<U000133C8> /xf0/x93/x8f/x88 EGYPTIAN HIEROGLYPH W020
++<U000133C9> /xf0/x93/x8f/x89 EGYPTIAN HIEROGLYPH W021
++<U000133CA> /xf0/x93/x8f/x8a EGYPTIAN HIEROGLYPH W022
++<U000133CB> /xf0/x93/x8f/x8b EGYPTIAN HIEROGLYPH W023
++<U000133CC> /xf0/x93/x8f/x8c EGYPTIAN HIEROGLYPH W024
++<U000133CD> /xf0/x93/x8f/x8d EGYPTIAN HIEROGLYPH W024A
++<U000133CE> /xf0/x93/x8f/x8e EGYPTIAN HIEROGLYPH W025
++<U000133CF> /xf0/x93/x8f/x8f EGYPTIAN HIEROGLYPH X001
++<U000133D0> /xf0/x93/x8f/x90 EGYPTIAN HIEROGLYPH X002
++<U000133D1> /xf0/x93/x8f/x91 EGYPTIAN HIEROGLYPH X003
++<U000133D2> /xf0/x93/x8f/x92 EGYPTIAN HIEROGLYPH X004
++<U000133D3> /xf0/x93/x8f/x93 EGYPTIAN HIEROGLYPH X004A
++<U000133D4> /xf0/x93/x8f/x94 EGYPTIAN HIEROGLYPH X004B
++<U000133D5> /xf0/x93/x8f/x95 EGYPTIAN HIEROGLYPH X005
++<U000133D6> /xf0/x93/x8f/x96 EGYPTIAN HIEROGLYPH X006
++<U000133D7> /xf0/x93/x8f/x97 EGYPTIAN HIEROGLYPH X006A
++<U000133D8> /xf0/x93/x8f/x98 EGYPTIAN HIEROGLYPH X007
++<U000133D9> /xf0/x93/x8f/x99 EGYPTIAN HIEROGLYPH X008
++<U000133DA> /xf0/x93/x8f/x9a EGYPTIAN HIEROGLYPH X008A
++<U000133DB> /xf0/x93/x8f/x9b EGYPTIAN HIEROGLYPH Y001
++<U000133DC> /xf0/x93/x8f/x9c EGYPTIAN HIEROGLYPH Y001A
++<U000133DD> /xf0/x93/x8f/x9d EGYPTIAN HIEROGLYPH Y002
++<U000133DE> /xf0/x93/x8f/x9e EGYPTIAN HIEROGLYPH Y003
++<U000133DF> /xf0/x93/x8f/x9f EGYPTIAN HIEROGLYPH Y004
++<U000133E0> /xf0/x93/x8f/xa0 EGYPTIAN HIEROGLYPH Y005
++<U000133E1> /xf0/x93/x8f/xa1 EGYPTIAN HIEROGLYPH Y006
++<U000133E2> /xf0/x93/x8f/xa2 EGYPTIAN HIEROGLYPH Y007
++<U000133E3> /xf0/x93/x8f/xa3 EGYPTIAN HIEROGLYPH Y008
++<U000133E4> /xf0/x93/x8f/xa4 EGYPTIAN HIEROGLYPH Z001
++<U000133E5> /xf0/x93/x8f/xa5 EGYPTIAN HIEROGLYPH Z002
++<U000133E6> /xf0/x93/x8f/xa6 EGYPTIAN HIEROGLYPH Z002A
++<U000133E7> /xf0/x93/x8f/xa7 EGYPTIAN HIEROGLYPH Z002B
++<U000133E8> /xf0/x93/x8f/xa8 EGYPTIAN HIEROGLYPH Z002C
++<U000133E9> /xf0/x93/x8f/xa9 EGYPTIAN HIEROGLYPH Z002D
++<U000133EA> /xf0/x93/x8f/xaa EGYPTIAN HIEROGLYPH Z003
++<U000133EB> /xf0/x93/x8f/xab EGYPTIAN HIEROGLYPH Z003A
++<U000133EC> /xf0/x93/x8f/xac EGYPTIAN HIEROGLYPH Z003B
++<U000133ED> /xf0/x93/x8f/xad EGYPTIAN HIEROGLYPH Z004
++<U000133EE> /xf0/x93/x8f/xae EGYPTIAN HIEROGLYPH Z004A
++<U000133EF> /xf0/x93/x8f/xaf EGYPTIAN HIEROGLYPH Z005
++<U000133F0> /xf0/x93/x8f/xb0 EGYPTIAN HIEROGLYPH Z005A
++<U000133F1> /xf0/x93/x8f/xb1 EGYPTIAN HIEROGLYPH Z006
++<U000133F2> /xf0/x93/x8f/xb2 EGYPTIAN HIEROGLYPH Z007
++<U000133F3> /xf0/x93/x8f/xb3 EGYPTIAN HIEROGLYPH Z008
++<U000133F4> /xf0/x93/x8f/xb4 EGYPTIAN HIEROGLYPH Z009
++<U000133F5> /xf0/x93/x8f/xb5 EGYPTIAN HIEROGLYPH Z010
++<U000133F6> /xf0/x93/x8f/xb6 EGYPTIAN HIEROGLYPH Z011
++<U000133F7> /xf0/x93/x8f/xb7 EGYPTIAN HIEROGLYPH Z012
++<U000133F8> /xf0/x93/x8f/xb8 EGYPTIAN HIEROGLYPH Z013
++<U000133F9> /xf0/x93/x8f/xb9 EGYPTIAN HIEROGLYPH Z014
++<U000133FA> /xf0/x93/x8f/xba EGYPTIAN HIEROGLYPH Z015
++<U000133FB> /xf0/x93/x8f/xbb EGYPTIAN HIEROGLYPH Z015A
++<U000133FC> /xf0/x93/x8f/xbc EGYPTIAN HIEROGLYPH Z015B
++<U000133FD> /xf0/x93/x8f/xbd EGYPTIAN HIEROGLYPH Z015C
++<U000133FE> /xf0/x93/x8f/xbe EGYPTIAN HIEROGLYPH Z015D
++<U000133FF> /xf0/x93/x8f/xbf EGYPTIAN HIEROGLYPH Z015E
++<U00013400> /xf0/x93/x90/x80 EGYPTIAN HIEROGLYPH Z015F
++<U00013401> /xf0/x93/x90/x81 EGYPTIAN HIEROGLYPH Z015G
++<U00013402> /xf0/x93/x90/x82 EGYPTIAN HIEROGLYPH Z015H
++<U00013403> /xf0/x93/x90/x83 EGYPTIAN HIEROGLYPH Z015I
++<U00013404> /xf0/x93/x90/x84 EGYPTIAN HIEROGLYPH Z016
++<U00013405> /xf0/x93/x90/x85 EGYPTIAN HIEROGLYPH Z016A
++<U00013406> /xf0/x93/x90/x86 EGYPTIAN HIEROGLYPH Z016B
++<U00013407> /xf0/x93/x90/x87 EGYPTIAN HIEROGLYPH Z016C
++<U00013408> /xf0/x93/x90/x88 EGYPTIAN HIEROGLYPH Z016D
++<U00013409> /xf0/x93/x90/x89 EGYPTIAN HIEROGLYPH Z016E
++<U0001340A> /xf0/x93/x90/x8a EGYPTIAN HIEROGLYPH Z016F
++<U0001340B> /xf0/x93/x90/x8b EGYPTIAN HIEROGLYPH Z016G
++<U0001340C> /xf0/x93/x90/x8c EGYPTIAN HIEROGLYPH Z016H
++<U0001340D> /xf0/x93/x90/x8d EGYPTIAN HIEROGLYPH AA001
++<U0001340E> /xf0/x93/x90/x8e EGYPTIAN HIEROGLYPH AA002
++<U0001340F> /xf0/x93/x90/x8f EGYPTIAN HIEROGLYPH AA003
++<U00013410> /xf0/x93/x90/x90 EGYPTIAN HIEROGLYPH AA004
++<U00013411> /xf0/x93/x90/x91 EGYPTIAN HIEROGLYPH AA005
++<U00013412> /xf0/x93/x90/x92 EGYPTIAN HIEROGLYPH AA006
++<U00013413> /xf0/x93/x90/x93 EGYPTIAN HIEROGLYPH AA007
++<U00013414> /xf0/x93/x90/x94 EGYPTIAN HIEROGLYPH AA007A
++<U00013415> /xf0/x93/x90/x95 EGYPTIAN HIEROGLYPH AA007B
++<U00013416> /xf0/x93/x90/x96 EGYPTIAN HIEROGLYPH AA008
++<U00013417> /xf0/x93/x90/x97 EGYPTIAN HIEROGLYPH AA009
++<U00013418> /xf0/x93/x90/x98 EGYPTIAN HIEROGLYPH AA010
++<U00013419> /xf0/x93/x90/x99 EGYPTIAN HIEROGLYPH AA011
++<U0001341A> /xf0/x93/x90/x9a EGYPTIAN HIEROGLYPH AA012
++<U0001341B> /xf0/x93/x90/x9b EGYPTIAN HIEROGLYPH AA013
++<U0001341C> /xf0/x93/x90/x9c EGYPTIAN HIEROGLYPH AA014
++<U0001341D> /xf0/x93/x90/x9d EGYPTIAN HIEROGLYPH AA015
++<U0001341E> /xf0/x93/x90/x9e EGYPTIAN HIEROGLYPH AA016
++<U0001341F> /xf0/x93/x90/x9f EGYPTIAN HIEROGLYPH AA017
++<U00013420> /xf0/x93/x90/xa0 EGYPTIAN HIEROGLYPH AA018
++<U00013421> /xf0/x93/x90/xa1 EGYPTIAN HIEROGLYPH AA019
++<U00013422> /xf0/x93/x90/xa2 EGYPTIAN HIEROGLYPH AA020
++<U00013423> /xf0/x93/x90/xa3 EGYPTIAN HIEROGLYPH AA021
++<U00013424> /xf0/x93/x90/xa4 EGYPTIAN HIEROGLYPH AA022
++<U00013425> /xf0/x93/x90/xa5 EGYPTIAN HIEROGLYPH AA023
++<U00013426> /xf0/x93/x90/xa6 EGYPTIAN HIEROGLYPH AA024
++<U00013427> /xf0/x93/x90/xa7 EGYPTIAN HIEROGLYPH AA025
++<U00013428> /xf0/x93/x90/xa8 EGYPTIAN HIEROGLYPH AA026
++<U00013429> /xf0/x93/x90/xa9 EGYPTIAN HIEROGLYPH AA027
++<U0001342A> /xf0/x93/x90/xaa EGYPTIAN HIEROGLYPH AA028
++<U0001342B> /xf0/x93/x90/xab EGYPTIAN HIEROGLYPH AA029
++<U0001342C> /xf0/x93/x90/xac EGYPTIAN HIEROGLYPH AA030
++<U0001342D> /xf0/x93/x90/xad EGYPTIAN HIEROGLYPH AA031
++<U0001342E> /xf0/x93/x90/xae EGYPTIAN HIEROGLYPH AA032
++<U00016800> /xf0/x96/xa0/x80 BAMUM LETTER PHASE-A NGKUE MFON
++<U00016801> /xf0/x96/xa0/x81 BAMUM LETTER PHASE-A GBIEE FON
++<U00016802> /xf0/x96/xa0/x82 BAMUM LETTER PHASE-A PON MFON PIPAEMGBIEE
++<U00016803> /xf0/x96/xa0/x83 BAMUM LETTER PHASE-A PON MFON PIPAEMBA
++<U00016804> /xf0/x96/xa0/x84 BAMUM LETTER PHASE-A NAA MFON
++<U00016805> /xf0/x96/xa0/x85 BAMUM LETTER PHASE-A SHUENSHUET
++<U00016806> /xf0/x96/xa0/x86 BAMUM LETTER PHASE-A TITA MFON
++<U00016807> /xf0/x96/xa0/x87 BAMUM LETTER PHASE-A NZA MFON
++<U00016808> /xf0/x96/xa0/x88 BAMUM LETTER PHASE-A SHINDA PA NJI
++<U00016809> /xf0/x96/xa0/x89 BAMUM LETTER PHASE-A PON PA NJI PIPAEMGBIEE
++<U0001680A> /xf0/x96/xa0/x8a BAMUM LETTER PHASE-A PON PA NJI PIPAEMBA
++<U0001680B> /xf0/x96/xa0/x8b BAMUM LETTER PHASE-A MAEMBGBIEE
++<U0001680C> /xf0/x96/xa0/x8c BAMUM LETTER PHASE-A TU MAEMBA
++<U0001680D> /xf0/x96/xa0/x8d BAMUM LETTER PHASE-A NGANGU
++<U0001680E> /xf0/x96/xa0/x8e BAMUM LETTER PHASE-A MAEMVEUX
++<U0001680F> /xf0/x96/xa0/x8f BAMUM LETTER PHASE-A MANSUAE
++<U00016810> /xf0/x96/xa0/x90 BAMUM LETTER PHASE-A MVEUAENGAM
++<U00016811> /xf0/x96/xa0/x91 BAMUM LETTER PHASE-A SEUNYAM
++<U00016812> /xf0/x96/xa0/x92 BAMUM LETTER PHASE-A NTOQPEN
++<U00016813> /xf0/x96/xa0/x93 BAMUM LETTER PHASE-A KEUKEUTNDA
++<U00016814> /xf0/x96/xa0/x94 BAMUM LETTER PHASE-A NKINDI
++<U00016815> /xf0/x96/xa0/x95 BAMUM LETTER PHASE-A SUU
++<U00016816> /xf0/x96/xa0/x96 BAMUM LETTER PHASE-A NGKUENZEUM
++<U00016817> /xf0/x96/xa0/x97 BAMUM LETTER PHASE-A LAPAQ
++<U00016818> /xf0/x96/xa0/x98 BAMUM LETTER PHASE-A LET KUT
++<U00016819> /xf0/x96/xa0/x99 BAMUM LETTER PHASE-A NTAP MFAA
++<U0001681A> /xf0/x96/xa0/x9a BAMUM LETTER PHASE-A MAEKEUP
++<U0001681B> /xf0/x96/xa0/x9b BAMUM LETTER PHASE-A PASHAE
++<U0001681C> /xf0/x96/xa0/x9c BAMUM LETTER PHASE-A GHEUAERAE
++<U0001681D> /xf0/x96/xa0/x9d BAMUM LETTER PHASE-A PAMSHAE
++<U0001681E> /xf0/x96/xa0/x9e BAMUM LETTER PHASE-A MON NGGEUAET
++<U0001681F> /xf0/x96/xa0/x9f BAMUM LETTER PHASE-A NZUN MEUT
++<U00016820> /xf0/x96/xa0/xa0 BAMUM LETTER PHASE-A U YUQ NAE
++<U00016821> /xf0/x96/xa0/xa1 BAMUM LETTER PHASE-A GHEUAEGHEUAE
++<U00016822> /xf0/x96/xa0/xa2 BAMUM LETTER PHASE-A NTAP NTAA
++<U00016823> /xf0/x96/xa0/xa3 BAMUM LETTER PHASE-A SISA
++<U00016824> /xf0/x96/xa0/xa4 BAMUM LETTER PHASE-A MGBASA
++<U00016825> /xf0/x96/xa0/xa5 BAMUM LETTER PHASE-A MEUNJOMNDEUQ
++<U00016826> /xf0/x96/xa0/xa6 BAMUM LETTER PHASE-A MOOMPUQ
++<U00016827> /xf0/x96/xa0/xa7 BAMUM LETTER PHASE-A KAFA
++<U00016828> /xf0/x96/xa0/xa8 BAMUM LETTER PHASE-A PA LEERAEWA
++<U00016829> /xf0/x96/xa0/xa9 BAMUM LETTER PHASE-A NDA LEERAEWA
++<U0001682A> /xf0/x96/xa0/xaa BAMUM LETTER PHASE-A PET
++<U0001682B> /xf0/x96/xa0/xab BAMUM LETTER PHASE-A MAEMKPEN
++<U0001682C> /xf0/x96/xa0/xac BAMUM LETTER PHASE-A NIKA
++<U0001682D> /xf0/x96/xa0/xad BAMUM LETTER PHASE-A PUP
++<U0001682E> /xf0/x96/xa0/xae BAMUM LETTER PHASE-A TUAEP
++<U0001682F> /xf0/x96/xa0/xaf BAMUM LETTER PHASE-A LUAEP
++<U00016830> /xf0/x96/xa0/xb0 BAMUM LETTER PHASE-A SONJAM
++<U00016831> /xf0/x96/xa0/xb1 BAMUM LETTER PHASE-A TEUTEUWEN
++<U00016832> /xf0/x96/xa0/xb2 BAMUM LETTER PHASE-A MAENYI
++<U00016833> /xf0/x96/xa0/xb3 BAMUM LETTER PHASE-A KET
++<U00016834> /xf0/x96/xa0/xb4 BAMUM LETTER PHASE-A NDAANGGEUAET
++<U00016835> /xf0/x96/xa0/xb5 BAMUM LETTER PHASE-A KUOQ
++<U00016836> /xf0/x96/xa0/xb6 BAMUM LETTER PHASE-A MOOMEUT
++<U00016837> /xf0/x96/xa0/xb7 BAMUM LETTER PHASE-A SHUM
++<U00016838> /xf0/x96/xa0/xb8 BAMUM LETTER PHASE-A LOMMAE
++<U00016839> /xf0/x96/xa0/xb9 BAMUM LETTER PHASE-A FIRI
++<U0001683A> /xf0/x96/xa0/xba BAMUM LETTER PHASE-A ROM
++<U0001683B> /xf0/x96/xa0/xbb BAMUM LETTER PHASE-A KPOQ
++<U0001683C> /xf0/x96/xa0/xbc BAMUM LETTER PHASE-A SOQ
++<U0001683D> /xf0/x96/xa0/xbd BAMUM LETTER PHASE-A MAP PIEET
++<U0001683E> /xf0/x96/xa0/xbe BAMUM LETTER PHASE-A SHIRAE
++<U0001683F> /xf0/x96/xa0/xbf BAMUM LETTER PHASE-A NTAP
++<U00016840> /xf0/x96/xa1/x80 BAMUM LETTER PHASE-A SHOQ NSHUT YUM
++<U00016841> /xf0/x96/xa1/x81 BAMUM LETTER PHASE-A NYIT MONGKEUAEQ
++<U00016842> /xf0/x96/xa1/x82 BAMUM LETTER PHASE-A PAARAE
++<U00016843> /xf0/x96/xa1/x83 BAMUM LETTER PHASE-A NKAARAE
++<U00016844> /xf0/x96/xa1/x84 BAMUM LETTER PHASE-A UNKNOWN
++<U00016845> /xf0/x96/xa1/x85 BAMUM LETTER PHASE-A NGGEN
++<U00016846> /xf0/x96/xa1/x86 BAMUM LETTER PHASE-A MAESI
++<U00016847> /xf0/x96/xa1/x87 BAMUM LETTER PHASE-A NJAM
++<U00016848> /xf0/x96/xa1/x88 BAMUM LETTER PHASE-A MBANYI
++<U00016849> /xf0/x96/xa1/x89 BAMUM LETTER PHASE-A NYET
++<U0001684A> /xf0/x96/xa1/x8a BAMUM LETTER PHASE-A TEUAEN
++<U0001684B> /xf0/x96/xa1/x8b BAMUM LETTER PHASE-A SOT
++<U0001684C> /xf0/x96/xa1/x8c BAMUM LETTER PHASE-A PAAM
++<U0001684D> /xf0/x96/xa1/x8d BAMUM LETTER PHASE-A NSHIEE
++<U0001684E> /xf0/x96/xa1/x8e BAMUM LETTER PHASE-A MAEM
++<U0001684F> /xf0/x96/xa1/x8f BAMUM LETTER PHASE-A NYI
++<U00016850> /xf0/x96/xa1/x90 BAMUM LETTER PHASE-A KAQ
++<U00016851> /xf0/x96/xa1/x91 BAMUM LETTER PHASE-A NSHA
++<U00016852> /xf0/x96/xa1/x92 BAMUM LETTER PHASE-A VEE
++<U00016853> /xf0/x96/xa1/x93 BAMUM LETTER PHASE-A LU
++<U00016854> /xf0/x96/xa1/x94 BAMUM LETTER PHASE-A NEN
++<U00016855> /xf0/x96/xa1/x95 BAMUM LETTER PHASE-A NAQ
++<U00016856> /xf0/x96/xa1/x96 BAMUM LETTER PHASE-A MBAQ
++<U00016857> /xf0/x96/xa1/x97 BAMUM LETTER PHASE-B NSHUET
++<U00016858> /xf0/x96/xa1/x98 BAMUM LETTER PHASE-B TU MAEMGBIEE
++<U00016859> /xf0/x96/xa1/x99 BAMUM LETTER PHASE-B SIEE
++<U0001685A> /xf0/x96/xa1/x9a BAMUM LETTER PHASE-B SET TU
++<U0001685B> /xf0/x96/xa1/x9b BAMUM LETTER PHASE-B LOM NTEUM
++<U0001685C> /xf0/x96/xa1/x9c BAMUM LETTER PHASE-B MBA MAELEE
++<U0001685D> /xf0/x96/xa1/x9d BAMUM LETTER PHASE-B KIEEM
++<U0001685E> /xf0/x96/xa1/x9e BAMUM LETTER PHASE-B YEURAE
++<U0001685F> /xf0/x96/xa1/x9f BAMUM LETTER PHASE-B MBAARAE
++<U00016860> /xf0/x96/xa1/xa0 BAMUM LETTER PHASE-B KAM
++<U00016861> /xf0/x96/xa1/xa1 BAMUM LETTER PHASE-B PEESHI
++<U00016862> /xf0/x96/xa1/xa2 BAMUM LETTER PHASE-B YAFU LEERAEWA
++<U00016863> /xf0/x96/xa1/xa3 BAMUM LETTER PHASE-B LAM NSHUT NYAM
++<U00016864> /xf0/x96/xa1/xa4 BAMUM LETTER PHASE-B NTIEE SHEUOQ
++<U00016865> /xf0/x96/xa1/xa5 BAMUM LETTER PHASE-B NDU NJAA
++<U00016866> /xf0/x96/xa1/xa6 BAMUM LETTER PHASE-B GHEUGHEUAEM
++<U00016867> /xf0/x96/xa1/xa7 BAMUM LETTER PHASE-B PIT
++<U00016868> /xf0/x96/xa1/xa8 BAMUM LETTER PHASE-B TU NSIEE
++<U00016869> /xf0/x96/xa1/xa9 BAMUM LETTER PHASE-B SHET NJAQ
++<U0001686A> /xf0/x96/xa1/xaa BAMUM LETTER PHASE-B SHEUAEQTU
++<U0001686B> /xf0/x96/xa1/xab BAMUM LETTER PHASE-B MFON TEUAEQ
++<U0001686C> /xf0/x96/xa1/xac BAMUM LETTER PHASE-B MBIT MBAAKET
++<U0001686D> /xf0/x96/xa1/xad BAMUM LETTER PHASE-B NYI NTEUM
++<U0001686E> /xf0/x96/xa1/xae BAMUM LETTER PHASE-B KEUPUQ
++<U0001686F> /xf0/x96/xa1/xaf BAMUM LETTER PHASE-B GHEUGHEN
++<U00016870> /xf0/x96/xa1/xb0 BAMUM LETTER PHASE-B KEUYEUX
++<U00016871> /xf0/x96/xa1/xb1 BAMUM LETTER PHASE-B LAANAE
++<U00016872> /xf0/x96/xa1/xb2 BAMUM LETTER PHASE-B PARUM
++<U00016873> /xf0/x96/xa1/xb3 BAMUM LETTER PHASE-B VEUM
++<U00016874> /xf0/x96/xa1/xb4 BAMUM LETTER PHASE-B NGKINDI MVOP
++<U00016875> /xf0/x96/xa1/xb5 BAMUM LETTER PHASE-B NGGEU MBU
++<U00016876> /xf0/x96/xa1/xb6 BAMUM LETTER PHASE-B WUAET
++<U00016877> /xf0/x96/xa1/xb7 BAMUM LETTER PHASE-B SAKEUAE
++<U00016878> /xf0/x96/xa1/xb8 BAMUM LETTER PHASE-B TAAM
++<U00016879> /xf0/x96/xa1/xb9 BAMUM LETTER PHASE-B MEUQ
++<U0001687A> /xf0/x96/xa1/xba BAMUM LETTER PHASE-B NGGUOQ
++<U0001687B> /xf0/x96/xa1/xbb BAMUM LETTER PHASE-B NGGUOQ LARGE
++<U0001687C> /xf0/x96/xa1/xbc BAMUM LETTER PHASE-B MFIYAQ
++<U0001687D> /xf0/x96/xa1/xbd BAMUM LETTER PHASE-B SUE
++<U0001687E> /xf0/x96/xa1/xbe BAMUM LETTER PHASE-B MBEURI
++<U0001687F> /xf0/x96/xa1/xbf BAMUM LETTER PHASE-B MONTIEEN
++<U00016880> /xf0/x96/xa2/x80 BAMUM LETTER PHASE-B NYAEMAE
++<U00016881> /xf0/x96/xa2/x81 BAMUM LETTER PHASE-B PUNGAAM
++<U00016882> /xf0/x96/xa2/x82 BAMUM LETTER PHASE-B MEUT NGGEET
++<U00016883> /xf0/x96/xa2/x83 BAMUM LETTER PHASE-B FEUX
++<U00016884> /xf0/x96/xa2/x84 BAMUM LETTER PHASE-B MBUOQ
++<U00016885> /xf0/x96/xa2/x85 BAMUM LETTER PHASE-B FEE
++<U00016886> /xf0/x96/xa2/x86 BAMUM LETTER PHASE-B KEUAEM
++<U00016887> /xf0/x96/xa2/x87 BAMUM LETTER PHASE-B MA NJEUAENA
++<U00016888> /xf0/x96/xa2/x88 BAMUM LETTER PHASE-B MA NJUQA
++<U00016889> /xf0/x96/xa2/x89 BAMUM LETTER PHASE-B LET
++<U0001688A> /xf0/x96/xa2/x8a BAMUM LETTER PHASE-B NGGAAM
++<U0001688B> /xf0/x96/xa2/x8b BAMUM LETTER PHASE-B NSEN
++<U0001688C> /xf0/x96/xa2/x8c BAMUM LETTER PHASE-B MA
++<U0001688D> /xf0/x96/xa2/x8d BAMUM LETTER PHASE-B KIQ
++<U0001688E> /xf0/x96/xa2/x8e BAMUM LETTER PHASE-B NGOM
++<U0001688F> /xf0/x96/xa2/x8f BAMUM LETTER PHASE-C NGKUE MAEMBA
++<U00016890> /xf0/x96/xa2/x90 BAMUM LETTER PHASE-C NZA
++<U00016891> /xf0/x96/xa2/x91 BAMUM LETTER PHASE-C YUM
++<U00016892> /xf0/x96/xa2/x92 BAMUM LETTER PHASE-C WANGKUOQ
++<U00016893> /xf0/x96/xa2/x93 BAMUM LETTER PHASE-C NGGEN
++<U00016894> /xf0/x96/xa2/x94 BAMUM LETTER PHASE-C NDEUAEREE
++<U00016895> /xf0/x96/xa2/x95 BAMUM LETTER PHASE-C NGKAQ
++<U00016896> /xf0/x96/xa2/x96 BAMUM LETTER PHASE-C GHARAE
++<U00016897> /xf0/x96/xa2/x97 BAMUM LETTER PHASE-C MBEEKEET
++<U00016898> /xf0/x96/xa2/x98 BAMUM LETTER PHASE-C GBAYI
++<U00016899> /xf0/x96/xa2/x99 BAMUM LETTER PHASE-C NYIR MKPARAQ MEUN
++<U0001689A> /xf0/x96/xa2/x9a BAMUM LETTER PHASE-C NTU MBIT
++<U0001689B> /xf0/x96/xa2/x9b BAMUM LETTER PHASE-C MBEUM
++<U0001689C> /xf0/x96/xa2/x9c BAMUM LETTER PHASE-C PIRIEEN
++<U0001689D> /xf0/x96/xa2/x9d BAMUM LETTER PHASE-C NDOMBU
++<U0001689E> /xf0/x96/xa2/x9e BAMUM LETTER PHASE-C MBAA CABBAGE-TREE
++<U0001689F> /xf0/x96/xa2/x9f BAMUM LETTER PHASE-C KEUSHEUAEP
++<U000168A0> /xf0/x96/xa2/xa0 BAMUM LETTER PHASE-C GHAP
++<U000168A1> /xf0/x96/xa2/xa1 BAMUM LETTER PHASE-C KEUKAQ
++<U000168A2> /xf0/x96/xa2/xa2 BAMUM LETTER PHASE-C YU MUOMAE
++<U000168A3> /xf0/x96/xa2/xa3 BAMUM LETTER PHASE-C NZEUM
++<U000168A4> /xf0/x96/xa2/xa4 BAMUM LETTER PHASE-C MBUE
++<U000168A5> /xf0/x96/xa2/xa5 BAMUM LETTER PHASE-C NSEUAEN
++<U000168A6> /xf0/x96/xa2/xa6 BAMUM LETTER PHASE-C MBIT
++<U000168A7> /xf0/x96/xa2/xa7 BAMUM LETTER PHASE-C YEUQ
++<U000168A8> /xf0/x96/xa2/xa8 BAMUM LETTER PHASE-C KPARAQ
++<U000168A9> /xf0/x96/xa2/xa9 BAMUM LETTER PHASE-C KAA
++<U000168AA> /xf0/x96/xa2/xaa BAMUM LETTER PHASE-C SEUX
++<U000168AB> /xf0/x96/xa2/xab BAMUM LETTER PHASE-C NDIDA
++<U000168AC> /xf0/x96/xa2/xac BAMUM LETTER PHASE-C TAASHAE
++<U000168AD> /xf0/x96/xa2/xad BAMUM LETTER PHASE-C NJUEQ
++<U000168AE> /xf0/x96/xa2/xae BAMUM LETTER PHASE-C TITA YUE
++<U000168AF> /xf0/x96/xa2/xaf BAMUM LETTER PHASE-C SUAET
++<U000168B0> /xf0/x96/xa2/xb0 BAMUM LETTER PHASE-C NGGUAEN NYAM
++<U000168B1> /xf0/x96/xa2/xb1 BAMUM LETTER PHASE-C VEUX
++<U000168B2> /xf0/x96/xa2/xb2 BAMUM LETTER PHASE-C NANSANAQ
++<U000168B3> /xf0/x96/xa2/xb3 BAMUM LETTER PHASE-C MA KEUAERI
++<U000168B4> /xf0/x96/xa2/xb4 BAMUM LETTER PHASE-C NTAA
++<U000168B5> /xf0/x96/xa2/xb5 BAMUM LETTER PHASE-C NGGUON
++<U000168B6> /xf0/x96/xa2/xb6 BAMUM LETTER PHASE-C LAP
++<U000168B7> /xf0/x96/xa2/xb7 BAMUM LETTER PHASE-C MBIRIEEN
++<U000168B8> /xf0/x96/xa2/xb8 BAMUM LETTER PHASE-C MGBASAQ
++<U000168B9> /xf0/x96/xa2/xb9 BAMUM LETTER PHASE-C NTEUNGBA
++<U000168BA> /xf0/x96/xa2/xba BAMUM LETTER PHASE-C TEUTEUX
++<U000168BB> /xf0/x96/xa2/xbb BAMUM LETTER PHASE-C NGGUM
++<U000168BC> /xf0/x96/xa2/xbc BAMUM LETTER PHASE-C FUE
++<U000168BD> /xf0/x96/xa2/xbd BAMUM LETTER PHASE-C NDEUT
++<U000168BE> /xf0/x96/xa2/xbe BAMUM LETTER PHASE-C NSA
++<U000168BF> /xf0/x96/xa2/xbf BAMUM LETTER PHASE-C NSHAQ
++<U000168C0> /xf0/x96/xa3/x80 BAMUM LETTER PHASE-C BUNG
++<U000168C1> /xf0/x96/xa3/x81 BAMUM LETTER PHASE-C VEUAEPEN
++<U000168C2> /xf0/x96/xa3/x82 BAMUM LETTER PHASE-C MBERAE
++<U000168C3> /xf0/x96/xa3/x83 BAMUM LETTER PHASE-C RU
++<U000168C4> /xf0/x96/xa3/x84 BAMUM LETTER PHASE-C NJAEM
++<U000168C5> /xf0/x96/xa3/x85 BAMUM LETTER PHASE-C LAM
++<U000168C6> /xf0/x96/xa3/x86 BAMUM LETTER PHASE-C TITUAEP
++<U000168C7> /xf0/x96/xa3/x87 BAMUM LETTER PHASE-C NSUOT NGOM
++<U000168C8> /xf0/x96/xa3/x88 BAMUM LETTER PHASE-C NJEEEE
++<U000168C9> /xf0/x96/xa3/x89 BAMUM LETTER PHASE-C KET
++<U000168CA> /xf0/x96/xa3/x8a BAMUM LETTER PHASE-C NGGU
++<U000168CB> /xf0/x96/xa3/x8b BAMUM LETTER PHASE-C MAESI
++<U000168CC> /xf0/x96/xa3/x8c BAMUM LETTER PHASE-C MBUAEM
++<U000168CD> /xf0/x96/xa3/x8d BAMUM LETTER PHASE-C LU
++<U000168CE> /xf0/x96/xa3/x8e BAMUM LETTER PHASE-C KUT
++<U000168CF> /xf0/x96/xa3/x8f BAMUM LETTER PHASE-C NJAM
++<U000168D0> /xf0/x96/xa3/x90 BAMUM LETTER PHASE-C NGOM
++<U000168D1> /xf0/x96/xa3/x91 BAMUM LETTER PHASE-C WUP
++<U000168D2> /xf0/x96/xa3/x92 BAMUM LETTER PHASE-C NGGUEET
++<U000168D3> /xf0/x96/xa3/x93 BAMUM LETTER PHASE-C NSOM
++<U000168D4> /xf0/x96/xa3/x94 BAMUM LETTER PHASE-C NTEN
++<U000168D5> /xf0/x96/xa3/x95 BAMUM LETTER PHASE-C KUOP NKAARAE
++<U000168D6> /xf0/x96/xa3/x96 BAMUM LETTER PHASE-C NSUN
++<U000168D7> /xf0/x96/xa3/x97 BAMUM LETTER PHASE-C NDAM
++<U000168D8> /xf0/x96/xa3/x98 BAMUM LETTER PHASE-C MA NSIEE
++<U000168D9> /xf0/x96/xa3/x99 BAMUM LETTER PHASE-C YAA
++<U000168DA> /xf0/x96/xa3/x9a BAMUM LETTER PHASE-C NDAP
++<U000168DB> /xf0/x96/xa3/x9b BAMUM LETTER PHASE-C SHUEQ
++<U000168DC> /xf0/x96/xa3/x9c BAMUM LETTER PHASE-C SETFON
++<U000168DD> /xf0/x96/xa3/x9d BAMUM LETTER PHASE-C MBI
++<U000168DE> /xf0/x96/xa3/x9e BAMUM LETTER PHASE-C MAEMBA
++<U000168DF> /xf0/x96/xa3/x9f BAMUM LETTER PHASE-C MBANYI
++<U000168E0> /xf0/x96/xa3/xa0 BAMUM LETTER PHASE-C KEUSEUX
++<U000168E1> /xf0/x96/xa3/xa1 BAMUM LETTER PHASE-C MBEUX
++<U000168E2> /xf0/x96/xa3/xa2 BAMUM LETTER PHASE-C KEUM
++<U000168E3> /xf0/x96/xa3/xa3 BAMUM LETTER PHASE-C MBAA PICKET
++<U000168E4> /xf0/x96/xa3/xa4 BAMUM LETTER PHASE-C YUWOQ
++<U000168E5> /xf0/x96/xa3/xa5 BAMUM LETTER PHASE-C NJEUX
++<U000168E6> /xf0/x96/xa3/xa6 BAMUM LETTER PHASE-C MIEE
++<U000168E7> /xf0/x96/xa3/xa7 BAMUM LETTER PHASE-C MUAE
++<U000168E8> /xf0/x96/xa3/xa8 BAMUM LETTER PHASE-C SHIQ
++<U000168E9> /xf0/x96/xa3/xa9 BAMUM LETTER PHASE-C KEN LAW
++<U000168EA> /xf0/x96/xa3/xaa BAMUM LETTER PHASE-C KEN FATIGUE
++<U000168EB> /xf0/x96/xa3/xab BAMUM LETTER PHASE-C NGAQ
++<U000168EC> /xf0/x96/xa3/xac BAMUM LETTER PHASE-C NAQ
++<U000168ED> /xf0/x96/xa3/xad BAMUM LETTER PHASE-C LIQ
++<U000168EE> /xf0/x96/xa3/xae BAMUM LETTER PHASE-C PIN
++<U000168EF> /xf0/x96/xa3/xaf BAMUM LETTER PHASE-C PEN
++<U000168F0> /xf0/x96/xa3/xb0 BAMUM LETTER PHASE-C TET
++<U000168F1> /xf0/x96/xa3/xb1 BAMUM LETTER PHASE-D MBUO
++<U000168F2> /xf0/x96/xa3/xb2 BAMUM LETTER PHASE-D WAP
++<U000168F3> /xf0/x96/xa3/xb3 BAMUM LETTER PHASE-D NJI
++<U000168F4> /xf0/x96/xa3/xb4 BAMUM LETTER PHASE-D MFON
++<U000168F5> /xf0/x96/xa3/xb5 BAMUM LETTER PHASE-D NJIEE
++<U000168F6> /xf0/x96/xa3/xb6 BAMUM LETTER PHASE-D LIEE
++<U000168F7> /xf0/x96/xa3/xb7 BAMUM LETTER PHASE-D NJEUT
++<U000168F8> /xf0/x96/xa3/xb8 BAMUM LETTER PHASE-D NSHEE
++<U000168F9> /xf0/x96/xa3/xb9 BAMUM LETTER PHASE-D NGGAAMAE
++<U000168FA> /xf0/x96/xa3/xba BAMUM LETTER PHASE-D NYAM
++<U000168FB> /xf0/x96/xa3/xbb BAMUM LETTER PHASE-D WUAEN
++<U000168FC> /xf0/x96/xa3/xbc BAMUM LETTER PHASE-D NGKUN
++<U000168FD> /xf0/x96/xa3/xbd BAMUM LETTER PHASE-D SHEE
++<U000168FE> /xf0/x96/xa3/xbe BAMUM LETTER PHASE-D NGKAP
++<U000168FF> /xf0/x96/xa3/xbf BAMUM LETTER PHASE-D KEUAETMEUN
++<U00016900> /xf0/x96/xa4/x80 BAMUM LETTER PHASE-D TEUT
++<U00016901> /xf0/x96/xa4/x81 BAMUM LETTER PHASE-D SHEUAE
++<U00016902> /xf0/x96/xa4/x82 BAMUM LETTER PHASE-D NJAP
++<U00016903> /xf0/x96/xa4/x83 BAMUM LETTER PHASE-D SUE
++<U00016904> /xf0/x96/xa4/x84 BAMUM LETTER PHASE-D KET
++<U00016905> /xf0/x96/xa4/x85 BAMUM LETTER PHASE-D YAEMMAE
++<U00016906> /xf0/x96/xa4/x86 BAMUM LETTER PHASE-D KUOM
++<U00016907> /xf0/x96/xa4/x87 BAMUM LETTER PHASE-D SAP
++<U00016908> /xf0/x96/xa4/x88 BAMUM LETTER PHASE-D MFEUT
++<U00016909> /xf0/x96/xa4/x89 BAMUM LETTER PHASE-D NDEUX
++<U0001690A> /xf0/x96/xa4/x8a BAMUM LETTER PHASE-D MALEERI
++<U0001690B> /xf0/x96/xa4/x8b BAMUM LETTER PHASE-D MEUT
++<U0001690C> /xf0/x96/xa4/x8c BAMUM LETTER PHASE-D SEUAEQ
++<U0001690D> /xf0/x96/xa4/x8d BAMUM LETTER PHASE-D YEN
++<U0001690E> /xf0/x96/xa4/x8e BAMUM LETTER PHASE-D NJEUAEM
++<U0001690F> /xf0/x96/xa4/x8f BAMUM LETTER PHASE-D KEUOT MBUAE
++<U00016910> /xf0/x96/xa4/x90 BAMUM LETTER PHASE-D NGKEURI
++<U00016911> /xf0/x96/xa4/x91 BAMUM LETTER PHASE-D TU
++<U00016912> /xf0/x96/xa4/x92 BAMUM LETTER PHASE-D GHAA
++<U00016913> /xf0/x96/xa4/x93 BAMUM LETTER PHASE-D NGKYEE
++<U00016914> /xf0/x96/xa4/x94 BAMUM LETTER PHASE-D FEUFEUAET
++<U00016915> /xf0/x96/xa4/x95 BAMUM LETTER PHASE-D NDEE
++<U00016916> /xf0/x96/xa4/x96 BAMUM LETTER PHASE-D MGBOFUM
++<U00016917> /xf0/x96/xa4/x97 BAMUM LETTER PHASE-D LEUAEP
++<U00016918> /xf0/x96/xa4/x98 BAMUM LETTER PHASE-D NDON
++<U00016919> /xf0/x96/xa4/x99 BAMUM LETTER PHASE-D MONI
++<U0001691A> /xf0/x96/xa4/x9a BAMUM LETTER PHASE-D MGBEUN
++<U0001691B> /xf0/x96/xa4/x9b BAMUM LETTER PHASE-D PUUT
++<U0001691C> /xf0/x96/xa4/x9c BAMUM LETTER PHASE-D MGBIEE
++<U0001691D> /xf0/x96/xa4/x9d BAMUM LETTER PHASE-D MFO
++<U0001691E> /xf0/x96/xa4/x9e BAMUM LETTER PHASE-D LUM
++<U0001691F> /xf0/x96/xa4/x9f BAMUM LETTER PHASE-D NSIEEP
++<U00016920> /xf0/x96/xa4/xa0 BAMUM LETTER PHASE-D MBAA
++<U00016921> /xf0/x96/xa4/xa1 BAMUM LETTER PHASE-D KWAET
++<U00016922> /xf0/x96/xa4/xa2 BAMUM LETTER PHASE-D NYET
++<U00016923> /xf0/x96/xa4/xa3 BAMUM LETTER PHASE-D TEUAEN
++<U00016924> /xf0/x96/xa4/xa4 BAMUM LETTER PHASE-D SOT
++<U00016925> /xf0/x96/xa4/xa5 BAMUM LETTER PHASE-D YUWOQ
++<U00016926> /xf0/x96/xa4/xa6 BAMUM LETTER PHASE-D KEUM
++<U00016927> /xf0/x96/xa4/xa7 BAMUM LETTER PHASE-D RAEM
++<U00016928> /xf0/x96/xa4/xa8 BAMUM LETTER PHASE-D TEEEE
++<U00016929> /xf0/x96/xa4/xa9 BAMUM LETTER PHASE-D NGKEUAEQ
++<U0001692A> /xf0/x96/xa4/xaa BAMUM LETTER PHASE-D MFEUAE
++<U0001692B> /xf0/x96/xa4/xab BAMUM LETTER PHASE-D NSIEET
++<U0001692C> /xf0/x96/xa4/xac BAMUM LETTER PHASE-D KEUP
++<U0001692D> /xf0/x96/xa4/xad BAMUM LETTER PHASE-D PIP
++<U0001692E> /xf0/x96/xa4/xae BAMUM LETTER PHASE-D PEUTAE
++<U0001692F> /xf0/x96/xa4/xaf BAMUM LETTER PHASE-D NYUE
++<U00016930> /xf0/x96/xa4/xb0 BAMUM LETTER PHASE-D LET
++<U00016931> /xf0/x96/xa4/xb1 BAMUM LETTER PHASE-D NGGAAM
++<U00016932> /xf0/x96/xa4/xb2 BAMUM LETTER PHASE-D MFIEE
++<U00016933> /xf0/x96/xa4/xb3 BAMUM LETTER PHASE-D NGGWAEN
++<U00016934> /xf0/x96/xa4/xb4 BAMUM LETTER PHASE-D YUOM
++<U00016935> /xf0/x96/xa4/xb5 BAMUM LETTER PHASE-D PAP
++<U00016936> /xf0/x96/xa4/xb6 BAMUM LETTER PHASE-D YUOP
++<U00016937> /xf0/x96/xa4/xb7 BAMUM LETTER PHASE-D NDAM
++<U00016938> /xf0/x96/xa4/xb8 BAMUM LETTER PHASE-D NTEUM
++<U00016939> /xf0/x96/xa4/xb9 BAMUM LETTER PHASE-D SUAE
++<U0001693A> /xf0/x96/xa4/xba BAMUM LETTER PHASE-D KUN
++<U0001693B> /xf0/x96/xa4/xbb BAMUM LETTER PHASE-D NGGEUX
++<U0001693C> /xf0/x96/xa4/xbc BAMUM LETTER PHASE-D NGKIEE
++<U0001693D> /xf0/x96/xa4/xbd BAMUM LETTER PHASE-D TUOT
++<U0001693E> /xf0/x96/xa4/xbe BAMUM LETTER PHASE-D MEUN
++<U0001693F> /xf0/x96/xa4/xbf BAMUM LETTER PHASE-D KUQ
++<U00016940> /xf0/x96/xa5/x80 BAMUM LETTER PHASE-D NSUM
++<U00016941> /xf0/x96/xa5/x81 BAMUM LETTER PHASE-D TEUN
++<U00016942> /xf0/x96/xa5/x82 BAMUM LETTER PHASE-D MAENJET
++<U00016943> /xf0/x96/xa5/x83 BAMUM LETTER PHASE-D NGGAP
++<U00016944> /xf0/x96/xa5/x84 BAMUM LETTER PHASE-D LEUM
++<U00016945> /xf0/x96/xa5/x85 BAMUM LETTER PHASE-D NGGUOM
++<U00016946> /xf0/x96/xa5/x86 BAMUM LETTER PHASE-D NSHUT
++<U00016947> /xf0/x96/xa5/x87 BAMUM LETTER PHASE-D NJUEQ
++<U00016948> /xf0/x96/xa5/x88 BAMUM LETTER PHASE-D GHEUAE
++<U00016949> /xf0/x96/xa5/x89 BAMUM LETTER PHASE-D KU
++<U0001694A> /xf0/x96/xa5/x8a BAMUM LETTER PHASE-D REN OLD
++<U0001694B> /xf0/x96/xa5/x8b BAMUM LETTER PHASE-D TAE
++<U0001694C> /xf0/x96/xa5/x8c BAMUM LETTER PHASE-D TOQ
++<U0001694D> /xf0/x96/xa5/x8d BAMUM LETTER PHASE-D NYI
++<U0001694E> /xf0/x96/xa5/x8e BAMUM LETTER PHASE-D RII
++<U0001694F> /xf0/x96/xa5/x8f BAMUM LETTER PHASE-D LEEEE
++<U00016950> /xf0/x96/xa5/x90 BAMUM LETTER PHASE-D MEEEE
++<U00016951> /xf0/x96/xa5/x91 BAMUM LETTER PHASE-D M
++<U00016952> /xf0/x96/xa5/x92 BAMUM LETTER PHASE-D SUU
++<U00016953> /xf0/x96/xa5/x93 BAMUM LETTER PHASE-D MU
++<U00016954> /xf0/x96/xa5/x94 BAMUM LETTER PHASE-D SHII
++<U00016955> /xf0/x96/xa5/x95 BAMUM LETTER PHASE-D SHEUX
++<U00016956> /xf0/x96/xa5/x96 BAMUM LETTER PHASE-D KYEE
++<U00016957> /xf0/x96/xa5/x97 BAMUM LETTER PHASE-D NU
++<U00016958> /xf0/x96/xa5/x98 BAMUM LETTER PHASE-D SHU
++<U00016959> /xf0/x96/xa5/x99 BAMUM LETTER PHASE-D NTEE
++<U0001695A> /xf0/x96/xa5/x9a BAMUM LETTER PHASE-D PEE
++<U0001695B> /xf0/x96/xa5/x9b BAMUM LETTER PHASE-D NI
++<U0001695C> /xf0/x96/xa5/x9c BAMUM LETTER PHASE-D SHOQ
++<U0001695D> /xf0/x96/xa5/x9d BAMUM LETTER PHASE-D PUQ
++<U0001695E> /xf0/x96/xa5/x9e BAMUM LETTER PHASE-D MVOP
++<U0001695F> /xf0/x96/xa5/x9f BAMUM LETTER PHASE-D LOQ
++<U00016960> /xf0/x96/xa5/xa0 BAMUM LETTER PHASE-D REN MUCH
++<U00016961> /xf0/x96/xa5/xa1 BAMUM LETTER PHASE-D TI
++<U00016962> /xf0/x96/xa5/xa2 BAMUM LETTER PHASE-D NTUU
++<U00016963> /xf0/x96/xa5/xa3 BAMUM LETTER PHASE-D MBAA SEVEN
++<U00016964> /xf0/x96/xa5/xa4 BAMUM LETTER PHASE-D SAQ
++<U00016965> /xf0/x96/xa5/xa5 BAMUM LETTER PHASE-D FAA
++<U00016966> /xf0/x96/xa5/xa6 BAMUM LETTER PHASE-E NDAP
++<U00016967> /xf0/x96/xa5/xa7 BAMUM LETTER PHASE-E TOON
++<U00016968> /xf0/x96/xa5/xa8 BAMUM LETTER PHASE-E MBEUM
++<U00016969> /xf0/x96/xa5/xa9 BAMUM LETTER PHASE-E LAP
++<U0001696A> /xf0/x96/xa5/xaa BAMUM LETTER PHASE-E VOM
++<U0001696B> /xf0/x96/xa5/xab BAMUM LETTER PHASE-E LOON
++<U0001696C> /xf0/x96/xa5/xac BAMUM LETTER PHASE-E PAA
++<U0001696D> /xf0/x96/xa5/xad BAMUM LETTER PHASE-E SOM
++<U0001696E> /xf0/x96/xa5/xae BAMUM LETTER PHASE-E RAQ
++<U0001696F> /xf0/x96/xa5/xaf BAMUM LETTER PHASE-E NSHUOP
++<U00016970> /xf0/x96/xa5/xb0 BAMUM LETTER PHASE-E NDUN
++<U00016971> /xf0/x96/xa5/xb1 BAMUM LETTER PHASE-E PUAE
++<U00016972> /xf0/x96/xa5/xb2 BAMUM LETTER PHASE-E TAM
++<U00016973> /xf0/x96/xa5/xb3 BAMUM LETTER PHASE-E NGKA
++<U00016974> /xf0/x96/xa5/xb4 BAMUM LETTER PHASE-E KPEUX
++<U00016975> /xf0/x96/xa5/xb5 BAMUM LETTER PHASE-E WUO
++<U00016976> /xf0/x96/xa5/xb6 BAMUM LETTER PHASE-E SEE
++<U00016977> /xf0/x96/xa5/xb7 BAMUM LETTER PHASE-E NGGEUAET
++<U00016978> /xf0/x96/xa5/xb8 BAMUM LETTER PHASE-E PAAM
++<U00016979> /xf0/x96/xa5/xb9 BAMUM LETTER PHASE-E TOO
++<U0001697A> /xf0/x96/xa5/xba BAMUM LETTER PHASE-E KUOP
++<U0001697B> /xf0/x96/xa5/xbb BAMUM LETTER PHASE-E LOM
++<U0001697C> /xf0/x96/xa5/xbc BAMUM LETTER PHASE-E NSHIEE
++<U0001697D> /xf0/x96/xa5/xbd BAMUM LETTER PHASE-E NGOP
++<U0001697E> /xf0/x96/xa5/xbe BAMUM LETTER PHASE-E MAEM
++<U0001697F> /xf0/x96/xa5/xbf BAMUM LETTER PHASE-E NGKEUX
++<U00016980> /xf0/x96/xa6/x80 BAMUM LETTER PHASE-E NGOQ
++<U00016981> /xf0/x96/xa6/x81 BAMUM LETTER PHASE-E NSHUE
++<U00016982> /xf0/x96/xa6/x82 BAMUM LETTER PHASE-E RIMGBA
++<U00016983> /xf0/x96/xa6/x83 BAMUM LETTER PHASE-E NJEUX
++<U00016984> /xf0/x96/xa6/x84 BAMUM LETTER PHASE-E PEEM
++<U00016985> /xf0/x96/xa6/x85 BAMUM LETTER PHASE-E SAA
++<U00016986> /xf0/x96/xa6/x86 BAMUM LETTER PHASE-E NGGURAE
++<U00016987> /xf0/x96/xa6/x87 BAMUM LETTER PHASE-E MGBA
++<U00016988> /xf0/x96/xa6/x88 BAMUM LETTER PHASE-E GHEUX
++<U00016989> /xf0/x96/xa6/x89 BAMUM LETTER PHASE-E NGKEUAEM
++<U0001698A> /xf0/x96/xa6/x8a BAMUM LETTER PHASE-E NJAEMLI
++<U0001698B> /xf0/x96/xa6/x8b BAMUM LETTER PHASE-E MAP
++<U0001698C> /xf0/x96/xa6/x8c BAMUM LETTER PHASE-E LOOT
++<U0001698D> /xf0/x96/xa6/x8d BAMUM LETTER PHASE-E NGGEEEE
++<U0001698E> /xf0/x96/xa6/x8e BAMUM LETTER PHASE-E NDIQ
++<U0001698F> /xf0/x96/xa6/x8f BAMUM LETTER PHASE-E TAEN NTEUM
++<U00016990> /xf0/x96/xa6/x90 BAMUM LETTER PHASE-E SET
++<U00016991> /xf0/x96/xa6/x91 BAMUM LETTER PHASE-E PUM
++<U00016992> /xf0/x96/xa6/x92 BAMUM LETTER PHASE-E NDAA SOFTNESS
++<U00016993> /xf0/x96/xa6/x93 BAMUM LETTER PHASE-E NGGUAESHAE NYAM
++<U00016994> /xf0/x96/xa6/x94 BAMUM LETTER PHASE-E YIEE
++<U00016995> /xf0/x96/xa6/x95 BAMUM LETTER PHASE-E GHEUN
++<U00016996> /xf0/x96/xa6/x96 BAMUM LETTER PHASE-E TUAE
++<U00016997> /xf0/x96/xa6/x97 BAMUM LETTER PHASE-E YEUAE
++<U00016998> /xf0/x96/xa6/x98 BAMUM LETTER PHASE-E PO
++<U00016999> /xf0/x96/xa6/x99 BAMUM LETTER PHASE-E TUMAE
++<U0001699A> /xf0/x96/xa6/x9a BAMUM LETTER PHASE-E KEUAE
++<U0001699B> /xf0/x96/xa6/x9b BAMUM LETTER PHASE-E SUAEN
++<U0001699C> /xf0/x96/xa6/x9c BAMUM LETTER PHASE-E TEUAEQ
++<U0001699D> /xf0/x96/xa6/x9d BAMUM LETTER PHASE-E VEUAE
++<U0001699E> /xf0/x96/xa6/x9e BAMUM LETTER PHASE-E WEUX
++<U0001699F> /xf0/x96/xa6/x9f BAMUM LETTER PHASE-E LAAM
++<U000169A0> /xf0/x96/xa6/xa0 BAMUM LETTER PHASE-E PU
++<U000169A1> /xf0/x96/xa6/xa1 BAMUM LETTER PHASE-E TAAQ
++<U000169A2> /xf0/x96/xa6/xa2 BAMUM LETTER PHASE-E GHAAMAE
++<U000169A3> /xf0/x96/xa6/xa3 BAMUM LETTER PHASE-E NGEUREUT
++<U000169A4> /xf0/x96/xa6/xa4 BAMUM LETTER PHASE-E SHEUAEQ
++<U000169A5> /xf0/x96/xa6/xa5 BAMUM LETTER PHASE-E MGBEN
++<U000169A6> /xf0/x96/xa6/xa6 BAMUM LETTER PHASE-E MBEE
++<U000169A7> /xf0/x96/xa6/xa7 BAMUM LETTER PHASE-E NZAQ
++<U000169A8> /xf0/x96/xa6/xa8 BAMUM LETTER PHASE-E NKOM
++<U000169A9> /xf0/x96/xa6/xa9 BAMUM LETTER PHASE-E GBET
++<U000169AA> /xf0/x96/xa6/xaa BAMUM LETTER PHASE-E TUM
++<U000169AB> /xf0/x96/xa6/xab BAMUM LETTER PHASE-E KUET
++<U000169AC> /xf0/x96/xa6/xac BAMUM LETTER PHASE-E YAP
++<U000169AD> /xf0/x96/xa6/xad BAMUM LETTER PHASE-E NYI CLEAVER
++<U000169AE> /xf0/x96/xa6/xae BAMUM LETTER PHASE-E YIT
++<U000169AF> /xf0/x96/xa6/xaf BAMUM LETTER PHASE-E MFEUQ
++<U000169B0> /xf0/x96/xa6/xb0 BAMUM LETTER PHASE-E NDIAQ
++<U000169B1> /xf0/x96/xa6/xb1 BAMUM LETTER PHASE-E PIEEQ
++<U000169B2> /xf0/x96/xa6/xb2 BAMUM LETTER PHASE-E YUEQ
++<U000169B3> /xf0/x96/xa6/xb3 BAMUM LETTER PHASE-E LEUAEM
++<U000169B4> /xf0/x96/xa6/xb4 BAMUM LETTER PHASE-E FUE
++<U000169B5> /xf0/x96/xa6/xb5 BAMUM LETTER PHASE-E GBEUX
++<U000169B6> /xf0/x96/xa6/xb6 BAMUM LETTER PHASE-E NGKUP
++<U000169B7> /xf0/x96/xa6/xb7 BAMUM LETTER PHASE-E KET
++<U000169B8> /xf0/x96/xa6/xb8 BAMUM LETTER PHASE-E MAE
++<U000169B9> /xf0/x96/xa6/xb9 BAMUM LETTER PHASE-E NGKAAMI
++<U000169BA> /xf0/x96/xa6/xba BAMUM LETTER PHASE-E GHET
++<U000169BB> /xf0/x96/xa6/xbb BAMUM LETTER PHASE-E FA
++<U000169BC> /xf0/x96/xa6/xbc BAMUM LETTER PHASE-E NTUM
++<U000169BD> /xf0/x96/xa6/xbd BAMUM LETTER PHASE-E PEUT
++<U000169BE> /xf0/x96/xa6/xbe BAMUM LETTER PHASE-E YEUM
++<U000169BF> /xf0/x96/xa6/xbf BAMUM LETTER PHASE-E NGGEUAE
++<U000169C0> /xf0/x96/xa7/x80 BAMUM LETTER PHASE-E NYI BETWEEN
++<U000169C1> /xf0/x96/xa7/x81 BAMUM LETTER PHASE-E NZUQ
++<U000169C2> /xf0/x96/xa7/x82 BAMUM LETTER PHASE-E POON
++<U000169C3> /xf0/x96/xa7/x83 BAMUM LETTER PHASE-E MIEE
++<U000169C4> /xf0/x96/xa7/x84 BAMUM LETTER PHASE-E FUET
++<U000169C5> /xf0/x96/xa7/x85 BAMUM LETTER PHASE-E NAE
++<U000169C6> /xf0/x96/xa7/x86 BAMUM LETTER PHASE-E MUAE
++<U000169C7> /xf0/x96/xa7/x87 BAMUM LETTER PHASE-E GHEUAE
++<U000169C8> /xf0/x96/xa7/x88 BAMUM LETTER PHASE-E FU I
++<U000169C9> /xf0/x96/xa7/x89 BAMUM LETTER PHASE-E MVI
++<U000169CA> /xf0/x96/xa7/x8a BAMUM LETTER PHASE-E PUAQ
++<U000169CB> /xf0/x96/xa7/x8b BAMUM LETTER PHASE-E NGKUM
++<U000169CC> /xf0/x96/xa7/x8c BAMUM LETTER PHASE-E KUT
++<U000169CD> /xf0/x96/xa7/x8d BAMUM LETTER PHASE-E PIET
++<U000169CE> /xf0/x96/xa7/x8e BAMUM LETTER PHASE-E NTAP
++<U000169CF> /xf0/x96/xa7/x8f BAMUM LETTER PHASE-E YEUAET
++<U000169D0> /xf0/x96/xa7/x90 BAMUM LETTER PHASE-E NGGUP
++<U000169D1> /xf0/x96/xa7/x91 BAMUM LETTER PHASE-E PA PEOPLE
++<U000169D2> /xf0/x96/xa7/x92 BAMUM LETTER PHASE-E FU CALL
++<U000169D3> /xf0/x96/xa7/x93 BAMUM LETTER PHASE-E FOM
++<U000169D4> /xf0/x96/xa7/x94 BAMUM LETTER PHASE-E NJEE
++<U000169D5> /xf0/x96/xa7/x95 BAMUM LETTER PHASE-E A
++<U000169D6> /xf0/x96/xa7/x96 BAMUM LETTER PHASE-E TOQ
++<U000169D7> /xf0/x96/xa7/x97 BAMUM LETTER PHASE-E O
++<U000169D8> /xf0/x96/xa7/x98 BAMUM LETTER PHASE-E I
++<U000169D9> /xf0/x96/xa7/x99 BAMUM LETTER PHASE-E LAQ
++<U000169DA> /xf0/x96/xa7/x9a BAMUM LETTER PHASE-E PA PLURAL
++<U000169DB> /xf0/x96/xa7/x9b BAMUM LETTER PHASE-E TAA
++<U000169DC> /xf0/x96/xa7/x9c BAMUM LETTER PHASE-E TAQ
++<U000169DD> /xf0/x96/xa7/x9d BAMUM LETTER PHASE-E NDAA MY HOUSE
++<U000169DE> /xf0/x96/xa7/x9e BAMUM LETTER PHASE-E SHIQ
++<U000169DF> /xf0/x96/xa7/x9f BAMUM LETTER PHASE-E YEUX
++<U000169E0> /xf0/x96/xa7/xa0 BAMUM LETTER PHASE-E NGUAE
++<U000169E1> /xf0/x96/xa7/xa1 BAMUM LETTER PHASE-E YUAEN
++<U000169E2> /xf0/x96/xa7/xa2 BAMUM LETTER PHASE-E YOQ SWIMMING
++<U000169E3> /xf0/x96/xa7/xa3 BAMUM LETTER PHASE-E YOQ COVER
++<U000169E4> /xf0/x96/xa7/xa4 BAMUM LETTER PHASE-E YUQ
++<U000169E5> /xf0/x96/xa7/xa5 BAMUM LETTER PHASE-E YUN
++<U000169E6> /xf0/x96/xa7/xa6 BAMUM LETTER PHASE-E KEUX
++<U000169E7> /xf0/x96/xa7/xa7 BAMUM LETTER PHASE-E PEUX
++<U000169E8> /xf0/x96/xa7/xa8 BAMUM LETTER PHASE-E NJEE EPOCH
++<U000169E9> /xf0/x96/xa7/xa9 BAMUM LETTER PHASE-E PUE
++<U000169EA> /xf0/x96/xa7/xaa BAMUM LETTER PHASE-E WUE
++<U000169EB> /xf0/x96/xa7/xab BAMUM LETTER PHASE-E FEE
++<U000169EC> /xf0/x96/xa7/xac BAMUM LETTER PHASE-E VEE
++<U000169ED> /xf0/x96/xa7/xad BAMUM LETTER PHASE-E LU
++<U000169EE> /xf0/x96/xa7/xae BAMUM LETTER PHASE-E MI
++<U000169EF> /xf0/x96/xa7/xaf BAMUM LETTER PHASE-E REUX
++<U000169F0> /xf0/x96/xa7/xb0 BAMUM LETTER PHASE-E RAE
++<U000169F1> /xf0/x96/xa7/xb1 BAMUM LETTER PHASE-E NGUAET
++<U000169F2> /xf0/x96/xa7/xb2 BAMUM LETTER PHASE-E NGA
++<U000169F3> /xf0/x96/xa7/xb3 BAMUM LETTER PHASE-E SHO
++<U000169F4> /xf0/x96/xa7/xb4 BAMUM LETTER PHASE-E SHOQ
++<U000169F5> /xf0/x96/xa7/xb5 BAMUM LETTER PHASE-E FU REMEDY
++<U000169F6> /xf0/x96/xa7/xb6 BAMUM LETTER PHASE-E NA
++<U000169F7> /xf0/x96/xa7/xb7 BAMUM LETTER PHASE-E PI
++<U000169F8> /xf0/x96/xa7/xb8 BAMUM LETTER PHASE-E LOQ
++<U000169F9> /xf0/x96/xa7/xb9 BAMUM LETTER PHASE-E KO
++<U000169FA> /xf0/x96/xa7/xba BAMUM LETTER PHASE-E MEN
++<U000169FB> /xf0/x96/xa7/xbb BAMUM LETTER PHASE-E MA
++<U000169FC> /xf0/x96/xa7/xbc BAMUM LETTER PHASE-E MAQ
++<U000169FD> /xf0/x96/xa7/xbd BAMUM LETTER PHASE-E TEU
++<U000169FE> /xf0/x96/xa7/xbe BAMUM LETTER PHASE-E KI
++<U000169FF> /xf0/x96/xa7/xbf BAMUM LETTER PHASE-E MON
++<U00016A00> /xf0/x96/xa8/x80 BAMUM LETTER PHASE-E TEN
++<U00016A01> /xf0/x96/xa8/x81 BAMUM LETTER PHASE-E FAQ
++<U00016A02> /xf0/x96/xa8/x82 BAMUM LETTER PHASE-E GHOM
++<U00016A03> /xf0/x96/xa8/x83 BAMUM LETTER PHASE-F KA
++<U00016A04> /xf0/x96/xa8/x84 BAMUM LETTER PHASE-F U
++<U00016A05> /xf0/x96/xa8/x85 BAMUM LETTER PHASE-F KU
++<U00016A06> /xf0/x96/xa8/x86 BAMUM LETTER PHASE-F EE
++<U00016A07> /xf0/x96/xa8/x87 BAMUM LETTER PHASE-F REE
++<U00016A08> /xf0/x96/xa8/x88 BAMUM LETTER PHASE-F TAE
++<U00016A09> /xf0/x96/xa8/x89 BAMUM LETTER PHASE-F NYI
++<U00016A0A> /xf0/x96/xa8/x8a BAMUM LETTER PHASE-F LA
++<U00016A0B> /xf0/x96/xa8/x8b BAMUM LETTER PHASE-F RII
++<U00016A0C> /xf0/x96/xa8/x8c BAMUM LETTER PHASE-F RIEE
++<U00016A0D> /xf0/x96/xa8/x8d BAMUM LETTER PHASE-F MEEEE
++<U00016A0E> /xf0/x96/xa8/x8e BAMUM LETTER PHASE-F TAA
++<U00016A0F> /xf0/x96/xa8/x8f BAMUM LETTER PHASE-F NDAA
++<U00016A10> /xf0/x96/xa8/x90 BAMUM LETTER PHASE-F NJAEM
++<U00016A11> /xf0/x96/xa8/x91 BAMUM LETTER PHASE-F M
++<U00016A12> /xf0/x96/xa8/x92 BAMUM LETTER PHASE-F SUU
++<U00016A13> /xf0/x96/xa8/x93 BAMUM LETTER PHASE-F SHII
++<U00016A14> /xf0/x96/xa8/x94 BAMUM LETTER PHASE-F SI
++<U00016A15> /xf0/x96/xa8/x95 BAMUM LETTER PHASE-F SEUX
++<U00016A16> /xf0/x96/xa8/x96 BAMUM LETTER PHASE-F KYEE
++<U00016A17> /xf0/x96/xa8/x97 BAMUM LETTER PHASE-F KET
++<U00016A18> /xf0/x96/xa8/x98 BAMUM LETTER PHASE-F NUAE
++<U00016A19> /xf0/x96/xa8/x99 BAMUM LETTER PHASE-F NU
++<U00016A1A> /xf0/x96/xa8/x9a BAMUM LETTER PHASE-F NJUAE
++<U00016A1B> /xf0/x96/xa8/x9b BAMUM LETTER PHASE-F YOQ
++<U00016A1C> /xf0/x96/xa8/x9c BAMUM LETTER PHASE-F SHU
++<U00016A1D> /xf0/x96/xa8/x9d BAMUM LETTER PHASE-F YA
++<U00016A1E> /xf0/x96/xa8/x9e BAMUM LETTER PHASE-F NSHA
++<U00016A1F> /xf0/x96/xa8/x9f BAMUM LETTER PHASE-F PEUX
++<U00016A20> /xf0/x96/xa8/xa0 BAMUM LETTER PHASE-F NTEE
++<U00016A21> /xf0/x96/xa8/xa1 BAMUM LETTER PHASE-F WUE
++<U00016A22> /xf0/x96/xa8/xa2 BAMUM LETTER PHASE-F PEE
++<U00016A23> /xf0/x96/xa8/xa3 BAMUM LETTER PHASE-F RU
++<U00016A24> /xf0/x96/xa8/xa4 BAMUM LETTER PHASE-F NI
++<U00016A25> /xf0/x96/xa8/xa5 BAMUM LETTER PHASE-F REUX
++<U00016A26> /xf0/x96/xa8/xa6 BAMUM LETTER PHASE-F KEN
++<U00016A27> /xf0/x96/xa8/xa7 BAMUM LETTER PHASE-F NGKWAEN
++<U00016A28> /xf0/x96/xa8/xa8 BAMUM LETTER PHASE-F NGGA
++<U00016A29> /xf0/x96/xa8/xa9 BAMUM LETTER PHASE-F SHO
++<U00016A2A> /xf0/x96/xa8/xaa BAMUM LETTER PHASE-F PUAE
++<U00016A2B> /xf0/x96/xa8/xab BAMUM LETTER PHASE-F FOM
++<U00016A2C> /xf0/x96/xa8/xac BAMUM LETTER PHASE-F WA
++<U00016A2D> /xf0/x96/xa8/xad BAMUM LETTER PHASE-F LI
++<U00016A2E> /xf0/x96/xa8/xae BAMUM LETTER PHASE-F LOQ
++<U00016A2F> /xf0/x96/xa8/xaf BAMUM LETTER PHASE-F KO
++<U00016A30> /xf0/x96/xa8/xb0 BAMUM LETTER PHASE-F MBEN
++<U00016A31> /xf0/x96/xa8/xb1 BAMUM LETTER PHASE-F REN
++<U00016A32> /xf0/x96/xa8/xb2 BAMUM LETTER PHASE-F MA
++<U00016A33> /xf0/x96/xa8/xb3 BAMUM LETTER PHASE-F MO
++<U00016A34> /xf0/x96/xa8/xb4 BAMUM LETTER PHASE-F MBAA
++<U00016A35> /xf0/x96/xa8/xb5 BAMUM LETTER PHASE-F TET
++<U00016A36> /xf0/x96/xa8/xb6 BAMUM LETTER PHASE-F KPA
++<U00016A37> /xf0/x96/xa8/xb7 BAMUM LETTER PHASE-F SAMBA
++<U00016A38> /xf0/x96/xa8/xb8 BAMUM LETTER PHASE-F VUEQ
++<U0001B000> /xf0/x9b/x80/x80 KATAKANA LETTER ARCHAIC E
++<U0001B001> /xf0/x9b/x80/x81 HIRAGANA LETTER ARCHAIC YE
+ <U0001D000> /xf0/x9d/x80/x80 BYZANTINE MUSICAL SYMBOL PSILI
+ <U0001D001> /xf0/x9d/x80/x81 BYZANTINE MUSICAL SYMBOL DASEIA
+ <U0001D002> /xf0/x9d/x80/x82 BYZANTINE MUSICAL SYMBOL PERISPOMENI
+@@ -30151,6 +33445,1091 @@ CHARMAP
+ <U0001F091> /xf0/x9f/x82/x91 DOMINO TILE VERTICAL-06-04
+ <U0001F092> /xf0/x9f/x82/x92 DOMINO TILE VERTICAL-06-05
+ <U0001F093> /xf0/x9f/x82/x93 DOMINO TILE VERTICAL-06-06
++<U0001F0A0> /xf0/x9f/x82/xa0 PLAYING CARD BACK
++<U0001F0A1> /xf0/x9f/x82/xa1 PLAYING CARD ACE OF SPADES
++<U0001F0A2> /xf0/x9f/x82/xa2 PLAYING CARD TWO OF SPADES
++<U0001F0A3> /xf0/x9f/x82/xa3 PLAYING CARD THREE OF SPADES
++<U0001F0A4> /xf0/x9f/x82/xa4 PLAYING CARD FOUR OF SPADES
++<U0001F0A5> /xf0/x9f/x82/xa5 PLAYING CARD FIVE OF SPADES
++<U0001F0A6> /xf0/x9f/x82/xa6 PLAYING CARD SIX OF SPADES
++<U0001F0A7> /xf0/x9f/x82/xa7 PLAYING CARD SEVEN OF SPADES
++<U0001F0A8> /xf0/x9f/x82/xa8 PLAYING CARD EIGHT OF SPADES
++<U0001F0A9> /xf0/x9f/x82/xa9 PLAYING CARD NINE OF SPADES
++<U0001F0AA> /xf0/x9f/x82/xaa PLAYING CARD TEN OF SPADES
++<U0001F0AB> /xf0/x9f/x82/xab PLAYING CARD JACK OF SPADES
++<U0001F0AC> /xf0/x9f/x82/xac PLAYING CARD KNIGHT OF SPADES
++<U0001F0AD> /xf0/x9f/x82/xad PLAYING CARD QUEEN OF SPADES
++<U0001F0AE> /xf0/x9f/x82/xae PLAYING CARD KING OF SPADES
++<U0001F0B1> /xf0/x9f/x82/xb1 PLAYING CARD ACE OF HEARTS
++<U0001F0B2> /xf0/x9f/x82/xb2 PLAYING CARD TWO OF HEARTS
++<U0001F0B3> /xf0/x9f/x82/xb3 PLAYING CARD THREE OF HEARTS
++<U0001F0B4> /xf0/x9f/x82/xb4 PLAYING CARD FOUR OF HEARTS
++<U0001F0B5> /xf0/x9f/x82/xb5 PLAYING CARD FIVE OF HEARTS
++<U0001F0B6> /xf0/x9f/x82/xb6 PLAYING CARD SIX OF HEARTS
++<U0001F0B7> /xf0/x9f/x82/xb7 PLAYING CARD SEVEN OF HEARTS
++<U0001F0B8> /xf0/x9f/x82/xb8 PLAYING CARD EIGHT OF HEARTS
++<U0001F0B9> /xf0/x9f/x82/xb9 PLAYING CARD NINE OF HEARTS
++<U0001F0BA> /xf0/x9f/x82/xba PLAYING CARD TEN OF HEARTS
++<U0001F0BB> /xf0/x9f/x82/xbb PLAYING CARD JACK OF HEARTS
++<U0001F0BC> /xf0/x9f/x82/xbc PLAYING CARD KNIGHT OF HEARTS
++<U0001F0BD> /xf0/x9f/x82/xbd PLAYING CARD QUEEN OF HEARTS
++<U0001F0BE> /xf0/x9f/x82/xbe PLAYING CARD KING OF HEARTS
++<U0001F0C1> /xf0/x9f/x83/x81 PLAYING CARD ACE OF DIAMONDS
++<U0001F0C2> /xf0/x9f/x83/x82 PLAYING CARD TWO OF DIAMONDS
++<U0001F0C3> /xf0/x9f/x83/x83 PLAYING CARD THREE OF DIAMONDS
++<U0001F0C4> /xf0/x9f/x83/x84 PLAYING CARD FOUR OF DIAMONDS
++<U0001F0C5> /xf0/x9f/x83/x85 PLAYING CARD FIVE OF DIAMONDS
++<U0001F0C6> /xf0/x9f/x83/x86 PLAYING CARD SIX OF DIAMONDS
++<U0001F0C7> /xf0/x9f/x83/x87 PLAYING CARD SEVEN OF DIAMONDS
++<U0001F0C8> /xf0/x9f/x83/x88 PLAYING CARD EIGHT OF DIAMONDS
++<U0001F0C9> /xf0/x9f/x83/x89 PLAYING CARD NINE OF DIAMONDS
++<U0001F0CA> /xf0/x9f/x83/x8a PLAYING CARD TEN OF DIAMONDS
++<U0001F0CB> /xf0/x9f/x83/x8b PLAYING CARD JACK OF DIAMONDS
++<U0001F0CC> /xf0/x9f/x83/x8c PLAYING CARD KNIGHT OF DIAMONDS
++<U0001F0CD> /xf0/x9f/x83/x8d PLAYING CARD QUEEN OF DIAMONDS
++<U0001F0CE> /xf0/x9f/x83/x8e PLAYING CARD KING OF DIAMONDS
++<U0001F0CF> /xf0/x9f/x83/x8f PLAYING CARD BLACK JOKER
++<U0001F0D1> /xf0/x9f/x83/x91 PLAYING CARD ACE OF CLUBS
++<U0001F0D2> /xf0/x9f/x83/x92 PLAYING CARD TWO OF CLUBS
++<U0001F0D3> /xf0/x9f/x83/x93 PLAYING CARD THREE OF CLUBS
++<U0001F0D4> /xf0/x9f/x83/x94 PLAYING CARD FOUR OF CLUBS
++<U0001F0D5> /xf0/x9f/x83/x95 PLAYING CARD FIVE OF CLUBS
++<U0001F0D6> /xf0/x9f/x83/x96 PLAYING CARD SIX OF CLUBS
++<U0001F0D7> /xf0/x9f/x83/x97 PLAYING CARD SEVEN OF CLUBS
++<U0001F0D8> /xf0/x9f/x83/x98 PLAYING CARD EIGHT OF CLUBS
++<U0001F0D9> /xf0/x9f/x83/x99 PLAYING CARD NINE OF CLUBS
++<U0001F0DA> /xf0/x9f/x83/x9a PLAYING CARD TEN OF CLUBS
++<U0001F0DB> /xf0/x9f/x83/x9b PLAYING CARD JACK OF CLUBS
++<U0001F0DC> /xf0/x9f/x83/x9c PLAYING CARD KNIGHT OF CLUBS
++<U0001F0DD> /xf0/x9f/x83/x9d PLAYING CARD QUEEN OF CLUBS
++<U0001F0DE> /xf0/x9f/x83/x9e PLAYING CARD KING OF CLUBS
++<U0001F0DF> /xf0/x9f/x83/x9f PLAYING CARD WHITE JOKER
++<U0001F100> /xf0/x9f/x84/x80 DIGIT ZERO FULL STOP
++<U0001F101> /xf0/x9f/x84/x81 DIGIT ZERO COMMA
++<U0001F102> /xf0/x9f/x84/x82 DIGIT ONE COMMA
++<U0001F103> /xf0/x9f/x84/x83 DIGIT TWO COMMA
++<U0001F104> /xf0/x9f/x84/x84 DIGIT THREE COMMA
++<U0001F105> /xf0/x9f/x84/x85 DIGIT FOUR COMMA
++<U0001F106> /xf0/x9f/x84/x86 DIGIT FIVE COMMA
++<U0001F107> /xf0/x9f/x84/x87 DIGIT SIX COMMA
++<U0001F108> /xf0/x9f/x84/x88 DIGIT SEVEN COMMA
++<U0001F109> /xf0/x9f/x84/x89 DIGIT EIGHT COMMA
++<U0001F10A> /xf0/x9f/x84/x8a DIGIT NINE COMMA
++<U0001F110> /xf0/x9f/x84/x90 PARENTHESIZED LATIN CAPITAL LETTER A
++<U0001F111> /xf0/x9f/x84/x91 PARENTHESIZED LATIN CAPITAL LETTER B
++<U0001F112> /xf0/x9f/x84/x92 PARENTHESIZED LATIN CAPITAL LETTER C
++<U0001F113> /xf0/x9f/x84/x93 PARENTHESIZED LATIN CAPITAL LETTER D
++<U0001F114> /xf0/x9f/x84/x94 PARENTHESIZED LATIN CAPITAL LETTER E
++<U0001F115> /xf0/x9f/x84/x95 PARENTHESIZED LATIN CAPITAL LETTER F
++<U0001F116> /xf0/x9f/x84/x96 PARENTHESIZED LATIN CAPITAL LETTER G
++<U0001F117> /xf0/x9f/x84/x97 PARENTHESIZED LATIN CAPITAL LETTER H
++<U0001F118> /xf0/x9f/x84/x98 PARENTHESIZED LATIN CAPITAL LETTER I
++<U0001F119> /xf0/x9f/x84/x99 PARENTHESIZED LATIN CAPITAL LETTER J
++<U0001F11A> /xf0/x9f/x84/x9a PARENTHESIZED LATIN CAPITAL LETTER K
++<U0001F11B> /xf0/x9f/x84/x9b PARENTHESIZED LATIN CAPITAL LETTER L
++<U0001F11C> /xf0/x9f/x84/x9c PARENTHESIZED LATIN CAPITAL LETTER M
++<U0001F11D> /xf0/x9f/x84/x9d PARENTHESIZED LATIN CAPITAL LETTER N
++<U0001F11E> /xf0/x9f/x84/x9e PARENTHESIZED LATIN CAPITAL LETTER O
++<U0001F11F> /xf0/x9f/x84/x9f PARENTHESIZED LATIN CAPITAL LETTER P
++<U0001F120> /xf0/x9f/x84/xa0 PARENTHESIZED LATIN CAPITAL LETTER Q
++<U0001F121> /xf0/x9f/x84/xa1 PARENTHESIZED LATIN CAPITAL LETTER R
++<U0001F122> /xf0/x9f/x84/xa2 PARENTHESIZED LATIN CAPITAL LETTER S
++<U0001F123> /xf0/x9f/x84/xa3 PARENTHESIZED LATIN CAPITAL LETTER T
++<U0001F124> /xf0/x9f/x84/xa4 PARENTHESIZED LATIN CAPITAL LETTER U
++<U0001F125> /xf0/x9f/x84/xa5 PARENTHESIZED LATIN CAPITAL LETTER V
++<U0001F126> /xf0/x9f/x84/xa6 PARENTHESIZED LATIN CAPITAL LETTER W
++<U0001F127> /xf0/x9f/x84/xa7 PARENTHESIZED LATIN CAPITAL LETTER X
++<U0001F128> /xf0/x9f/x84/xa8 PARENTHESIZED LATIN CAPITAL LETTER Y
++<U0001F129> /xf0/x9f/x84/xa9 PARENTHESIZED LATIN CAPITAL LETTER Z
++<U0001F12A> /xf0/x9f/x84/xaa TORTOISE SHELL BRACKETED LATIN CAPITAL LETTER S
++<U0001F12B> /xf0/x9f/x84/xab CIRCLED ITALIC LATIN CAPITAL LETTER C
++<U0001F12C> /xf0/x9f/x84/xac CIRCLED ITALIC LATIN CAPITAL LETTER R
++<U0001F12D> /xf0/x9f/x84/xad CIRCLED CD
++<U0001F12E> /xf0/x9f/x84/xae CIRCLED WZ
++<U0001F130> /xf0/x9f/x84/xb0 SQUARED LATIN CAPITAL LETTER A
++<U0001F131> /xf0/x9f/x84/xb1 SQUARED LATIN CAPITAL LETTER B
++<U0001F132> /xf0/x9f/x84/xb2 SQUARED LATIN CAPITAL LETTER C
++<U0001F133> /xf0/x9f/x84/xb3 SQUARED LATIN CAPITAL LETTER D
++<U0001F134> /xf0/x9f/x84/xb4 SQUARED LATIN CAPITAL LETTER E
++<U0001F135> /xf0/x9f/x84/xb5 SQUARED LATIN CAPITAL LETTER F
++<U0001F136> /xf0/x9f/x84/xb6 SQUARED LATIN CAPITAL LETTER G
++<U0001F137> /xf0/x9f/x84/xb7 SQUARED LATIN CAPITAL LETTER H
++<U0001F138> /xf0/x9f/x84/xb8 SQUARED LATIN CAPITAL LETTER I
++<U0001F139> /xf0/x9f/x84/xb9 SQUARED LATIN CAPITAL LETTER J
++<U0001F13A> /xf0/x9f/x84/xba SQUARED LATIN CAPITAL LETTER K
++<U0001F13B> /xf0/x9f/x84/xbb SQUARED LATIN CAPITAL LETTER L
++<U0001F13C> /xf0/x9f/x84/xbc SQUARED LATIN CAPITAL LETTER M
++<U0001F13D> /xf0/x9f/x84/xbd SQUARED LATIN CAPITAL LETTER N
++<U0001F13E> /xf0/x9f/x84/xbe SQUARED LATIN CAPITAL LETTER O
++<U0001F13F> /xf0/x9f/x84/xbf SQUARED LATIN CAPITAL LETTER P
++<U0001F140> /xf0/x9f/x85/x80 SQUARED LATIN CAPITAL LETTER Q
++<U0001F141> /xf0/x9f/x85/x81 SQUARED LATIN CAPITAL LETTER R
++<U0001F142> /xf0/x9f/x85/x82 SQUARED LATIN CAPITAL LETTER S
++<U0001F143> /xf0/x9f/x85/x83 SQUARED LATIN CAPITAL LETTER T
++<U0001F144> /xf0/x9f/x85/x84 SQUARED LATIN CAPITAL LETTER U
++<U0001F145> /xf0/x9f/x85/x85 SQUARED LATIN CAPITAL LETTER V
++<U0001F146> /xf0/x9f/x85/x86 SQUARED LATIN CAPITAL LETTER W
++<U0001F147> /xf0/x9f/x85/x87 SQUARED LATIN CAPITAL LETTER X
++<U0001F148> /xf0/x9f/x85/x88 SQUARED LATIN CAPITAL LETTER Y
++<U0001F149> /xf0/x9f/x85/x89 SQUARED LATIN CAPITAL LETTER Z
++<U0001F14A> /xf0/x9f/x85/x8a SQUARED HV
++<U0001F14B> /xf0/x9f/x85/x8b SQUARED MV
++<U0001F14C> /xf0/x9f/x85/x8c SQUARED SD
++<U0001F14D> /xf0/x9f/x85/x8d SQUARED SS
++<U0001F14E> /xf0/x9f/x85/x8e SQUARED PPV
++<U0001F14F> /xf0/x9f/x85/x8f SQUARED WC
++<U0001F150> /xf0/x9f/x85/x90 NEGATIVE CIRCLED LATIN CAPITAL LETTER A
++<U0001F151> /xf0/x9f/x85/x91 NEGATIVE CIRCLED LATIN CAPITAL LETTER B
++<U0001F152> /xf0/x9f/x85/x92 NEGATIVE CIRCLED LATIN CAPITAL LETTER C
++<U0001F153> /xf0/x9f/x85/x93 NEGATIVE CIRCLED LATIN CAPITAL LETTER D
++<U0001F154> /xf0/x9f/x85/x94 NEGATIVE CIRCLED LATIN CAPITAL LETTER E
++<U0001F155> /xf0/x9f/x85/x95 NEGATIVE CIRCLED LATIN CAPITAL LETTER F
++<U0001F156> /xf0/x9f/x85/x96 NEGATIVE CIRCLED LATIN CAPITAL LETTER G
++<U0001F157> /xf0/x9f/x85/x97 NEGATIVE CIRCLED LATIN CAPITAL LETTER H
++<U0001F158> /xf0/x9f/x85/x98 NEGATIVE CIRCLED LATIN CAPITAL LETTER I
++<U0001F159> /xf0/x9f/x85/x99 NEGATIVE CIRCLED LATIN CAPITAL LETTER J
++<U0001F15A> /xf0/x9f/x85/x9a NEGATIVE CIRCLED LATIN CAPITAL LETTER K
++<U0001F15B> /xf0/x9f/x85/x9b NEGATIVE CIRCLED LATIN CAPITAL LETTER L
++<U0001F15C> /xf0/x9f/x85/x9c NEGATIVE CIRCLED LATIN CAPITAL LETTER M
++<U0001F15D> /xf0/x9f/x85/x9d NEGATIVE CIRCLED LATIN CAPITAL LETTER N
++<U0001F15E> /xf0/x9f/x85/x9e NEGATIVE CIRCLED LATIN CAPITAL LETTER O
++<U0001F15F> /xf0/x9f/x85/x9f NEGATIVE CIRCLED LATIN CAPITAL LETTER P
++<U0001F160> /xf0/x9f/x85/xa0 NEGATIVE CIRCLED LATIN CAPITAL LETTER Q
++<U0001F161> /xf0/x9f/x85/xa1 NEGATIVE CIRCLED LATIN CAPITAL LETTER R
++<U0001F162> /xf0/x9f/x85/xa2 NEGATIVE CIRCLED LATIN CAPITAL LETTER S
++<U0001F163> /xf0/x9f/x85/xa3 NEGATIVE CIRCLED LATIN CAPITAL LETTER T
++<U0001F164> /xf0/x9f/x85/xa4 NEGATIVE CIRCLED LATIN CAPITAL LETTER U
++<U0001F165> /xf0/x9f/x85/xa5 NEGATIVE CIRCLED LATIN CAPITAL LETTER V
++<U0001F166> /xf0/x9f/x85/xa6 NEGATIVE CIRCLED LATIN CAPITAL LETTER W
++<U0001F167> /xf0/x9f/x85/xa7 NEGATIVE CIRCLED LATIN CAPITAL LETTER X
++<U0001F168> /xf0/x9f/x85/xa8 NEGATIVE CIRCLED LATIN CAPITAL LETTER Y
++<U0001F169> /xf0/x9f/x85/xa9 NEGATIVE CIRCLED LATIN CAPITAL LETTER Z
++<U0001F170> /xf0/x9f/x85/xb0 NEGATIVE SQUARED LATIN CAPITAL LETTER A
++<U0001F171> /xf0/x9f/x85/xb1 NEGATIVE SQUARED LATIN CAPITAL LETTER B
++<U0001F172> /xf0/x9f/x85/xb2 NEGATIVE SQUARED LATIN CAPITAL LETTER C
++<U0001F173> /xf0/x9f/x85/xb3 NEGATIVE SQUARED LATIN CAPITAL LETTER D
++<U0001F174> /xf0/x9f/x85/xb4 NEGATIVE SQUARED LATIN CAPITAL LETTER E
++<U0001F175> /xf0/x9f/x85/xb5 NEGATIVE SQUARED LATIN CAPITAL LETTER F
++<U0001F176> /xf0/x9f/x85/xb6 NEGATIVE SQUARED LATIN CAPITAL LETTER G
++<U0001F177> /xf0/x9f/x85/xb7 NEGATIVE SQUARED LATIN CAPITAL LETTER H
++<U0001F178> /xf0/x9f/x85/xb8 NEGATIVE SQUARED LATIN CAPITAL LETTER I
++<U0001F179> /xf0/x9f/x85/xb9 NEGATIVE SQUARED LATIN CAPITAL LETTER J
++<U0001F17A> /xf0/x9f/x85/xba NEGATIVE SQUARED LATIN CAPITAL LETTER K
++<U0001F17B> /xf0/x9f/x85/xbb NEGATIVE SQUARED LATIN CAPITAL LETTER L
++<U0001F17C> /xf0/x9f/x85/xbc NEGATIVE SQUARED LATIN CAPITAL LETTER M
++<U0001F17D> /xf0/x9f/x85/xbd NEGATIVE SQUARED LATIN CAPITAL LETTER N
++<U0001F17E> /xf0/x9f/x85/xbe NEGATIVE SQUARED LATIN CAPITAL LETTER O
++<U0001F17F> /xf0/x9f/x85/xbf NEGATIVE SQUARED LATIN CAPITAL LETTER P
++<U0001F180> /xf0/x9f/x86/x80 NEGATIVE SQUARED LATIN CAPITAL LETTER Q
++<U0001F181> /xf0/x9f/x86/x81 NEGATIVE SQUARED LATIN CAPITAL LETTER R
++<U0001F182> /xf0/x9f/x86/x82 NEGATIVE SQUARED LATIN CAPITAL LETTER S
++<U0001F183> /xf0/x9f/x86/x83 NEGATIVE SQUARED LATIN CAPITAL LETTER T
++<U0001F184> /xf0/x9f/x86/x84 NEGATIVE SQUARED LATIN CAPITAL LETTER U
++<U0001F185> /xf0/x9f/x86/x85 NEGATIVE SQUARED LATIN CAPITAL LETTER V
++<U0001F186> /xf0/x9f/x86/x86 NEGATIVE SQUARED LATIN CAPITAL LETTER W
++<U0001F187> /xf0/x9f/x86/x87 NEGATIVE SQUARED LATIN CAPITAL LETTER X
++<U0001F188> /xf0/x9f/x86/x88 NEGATIVE SQUARED LATIN CAPITAL LETTER Y
++<U0001F189> /xf0/x9f/x86/x89 NEGATIVE SQUARED LATIN CAPITAL LETTER Z
++<U0001F18A> /xf0/x9f/x86/x8a CROSSED NEGATIVE SQUARED LATIN CAPITAL LETTER P
++<U0001F18B> /xf0/x9f/x86/x8b NEGATIVE SQUARED IC
++<U0001F18C> /xf0/x9f/x86/x8c NEGATIVE SQUARED PA
++<U0001F18D> /xf0/x9f/x86/x8d NEGATIVE SQUARED SA
++<U0001F18E> /xf0/x9f/x86/x8e NEGATIVE SQUARED AB
++<U0001F18F> /xf0/x9f/x86/x8f NEGATIVE SQUARED WC
++<U0001F190> /xf0/x9f/x86/x90 SQUARE DJ
++<U0001F191> /xf0/x9f/x86/x91 SQUARED CL
++<U0001F192> /xf0/x9f/x86/x92 SQUARED COOL
++<U0001F193> /xf0/x9f/x86/x93 SQUARED FREE
++<U0001F194> /xf0/x9f/x86/x94 SQUARED ID
++<U0001F195> /xf0/x9f/x86/x95 SQUARED NEW
++<U0001F196> /xf0/x9f/x86/x96 SQUARED NG
++<U0001F197> /xf0/x9f/x86/x97 SQUARED OK
++<U0001F198> /xf0/x9f/x86/x98 SQUARED SOS
++<U0001F199> /xf0/x9f/x86/x99 SQUARED UP WITH EXCLAMATION MARK
++<U0001F19A> /xf0/x9f/x86/x9a SQUARED VS
++<U0001F1E6> /xf0/x9f/x87/xa6 REGIONAL INDICATOR SYMBOL LETTER A
++<U0001F1E7> /xf0/x9f/x87/xa7 REGIONAL INDICATOR SYMBOL LETTER B
++<U0001F1E8> /xf0/x9f/x87/xa8 REGIONAL INDICATOR SYMBOL LETTER C
++<U0001F1E9> /xf0/x9f/x87/xa9 REGIONAL INDICATOR SYMBOL LETTER D
++<U0001F1EA> /xf0/x9f/x87/xaa REGIONAL INDICATOR SYMBOL LETTER E
++<U0001F1EB> /xf0/x9f/x87/xab REGIONAL INDICATOR SYMBOL LETTER F
++<U0001F1EC> /xf0/x9f/x87/xac REGIONAL INDICATOR SYMBOL LETTER G
++<U0001F1ED> /xf0/x9f/x87/xad REGIONAL INDICATOR SYMBOL LETTER H
++<U0001F1EE> /xf0/x9f/x87/xae REGIONAL INDICATOR SYMBOL LETTER I
++<U0001F1EF> /xf0/x9f/x87/xaf REGIONAL INDICATOR SYMBOL LETTER J
++<U0001F1F0> /xf0/x9f/x87/xb0 REGIONAL INDICATOR SYMBOL LETTER K
++<U0001F1F1> /xf0/x9f/x87/xb1 REGIONAL INDICATOR SYMBOL LETTER L
++<U0001F1F2> /xf0/x9f/x87/xb2 REGIONAL INDICATOR SYMBOL LETTER M
++<U0001F1F3> /xf0/x9f/x87/xb3 REGIONAL INDICATOR SYMBOL LETTER N
++<U0001F1F4> /xf0/x9f/x87/xb4 REGIONAL INDICATOR SYMBOL LETTER O
++<U0001F1F5> /xf0/x9f/x87/xb5 REGIONAL INDICATOR SYMBOL LETTER P
++<U0001F1F6> /xf0/x9f/x87/xb6 REGIONAL INDICATOR SYMBOL LETTER Q
++<U0001F1F7> /xf0/x9f/x87/xb7 REGIONAL INDICATOR SYMBOL LETTER R
++<U0001F1F8> /xf0/x9f/x87/xb8 REGIONAL INDICATOR SYMBOL LETTER S
++<U0001F1F9> /xf0/x9f/x87/xb9 REGIONAL INDICATOR SYMBOL LETTER T
++<U0001F1FA> /xf0/x9f/x87/xba REGIONAL INDICATOR SYMBOL LETTER U
++<U0001F1FB> /xf0/x9f/x87/xbb REGIONAL INDICATOR SYMBOL LETTER V
++<U0001F1FC> /xf0/x9f/x87/xbc REGIONAL INDICATOR SYMBOL LETTER W
++<U0001F1FD> /xf0/x9f/x87/xbd REGIONAL INDICATOR SYMBOL LETTER X
++<U0001F1FE> /xf0/x9f/x87/xbe REGIONAL INDICATOR SYMBOL LETTER Y
++<U0001F1FF> /xf0/x9f/x87/xbf REGIONAL INDICATOR SYMBOL LETTER Z
++<U0001F200> /xf0/x9f/x88/x80 SQUARE HIRAGANA HOKA
++<U0001F201> /xf0/x9f/x88/x81 SQUARED KATAKANA KOKO
++<U0001F202> /xf0/x9f/x88/x82 SQUARED KATAKANA SA
++<U0001F210> /xf0/x9f/x88/x90 SQUARED CJK UNIFIED IDEOGRAPH-624B
++<U0001F211> /xf0/x9f/x88/x91 SQUARED CJK UNIFIED IDEOGRAPH-5B57
++<U0001F212> /xf0/x9f/x88/x92 SQUARED CJK UNIFIED IDEOGRAPH-53CC
++<U0001F213> /xf0/x9f/x88/x93 SQUARED KATAKANA DE
++<U0001F214> /xf0/x9f/x88/x94 SQUARED CJK UNIFIED IDEOGRAPH-4E8C
++<U0001F215> /xf0/x9f/x88/x95 SQUARED CJK UNIFIED IDEOGRAPH-591A
++<U0001F216> /xf0/x9f/x88/x96 SQUARED CJK UNIFIED IDEOGRAPH-89E3
++<U0001F217> /xf0/x9f/x88/x97 SQUARED CJK UNIFIED IDEOGRAPH-5929
++<U0001F218> /xf0/x9f/x88/x98 SQUARED CJK UNIFIED IDEOGRAPH-4EA4
++<U0001F219> /xf0/x9f/x88/x99 SQUARED CJK UNIFIED IDEOGRAPH-6620
++<U0001F21A> /xf0/x9f/x88/x9a SQUARED CJK UNIFIED IDEOGRAPH-7121
++<U0001F21B> /xf0/x9f/x88/x9b SQUARED CJK UNIFIED IDEOGRAPH-6599
++<U0001F21C> /xf0/x9f/x88/x9c SQUARED CJK UNIFIED IDEOGRAPH-524D
++<U0001F21D> /xf0/x9f/x88/x9d SQUARED CJK UNIFIED IDEOGRAPH-5F8C
++<U0001F21E> /xf0/x9f/x88/x9e SQUARED CJK UNIFIED IDEOGRAPH-518D
++<U0001F21F> /xf0/x9f/x88/x9f SQUARED CJK UNIFIED IDEOGRAPH-65B0
++<U0001F220> /xf0/x9f/x88/xa0 SQUARED CJK UNIFIED IDEOGRAPH-521D
++<U0001F221> /xf0/x9f/x88/xa1 SQUARED CJK UNIFIED IDEOGRAPH-7D42
++<U0001F222> /xf0/x9f/x88/xa2 SQUARED CJK UNIFIED IDEOGRAPH-751F
++<U0001F223> /xf0/x9f/x88/xa3 SQUARED CJK UNIFIED IDEOGRAPH-8CA9
++<U0001F224> /xf0/x9f/x88/xa4 SQUARED CJK UNIFIED IDEOGRAPH-58F0
++<U0001F225> /xf0/x9f/x88/xa5 SQUARED CJK UNIFIED IDEOGRAPH-5439
++<U0001F226> /xf0/x9f/x88/xa6 SQUARED CJK UNIFIED IDEOGRAPH-6F14
++<U0001F227> /xf0/x9f/x88/xa7 SQUARED CJK UNIFIED IDEOGRAPH-6295
++<U0001F228> /xf0/x9f/x88/xa8 SQUARED CJK UNIFIED IDEOGRAPH-6355
++<U0001F229> /xf0/x9f/x88/xa9 SQUARED CJK UNIFIED IDEOGRAPH-4E00
++<U0001F22A> /xf0/x9f/x88/xaa SQUARED CJK UNIFIED IDEOGRAPH-4E09
++<U0001F22B> /xf0/x9f/x88/xab SQUARED CJK UNIFIED IDEOGRAPH-904A
++<U0001F22C> /xf0/x9f/x88/xac SQUARED CJK UNIFIED IDEOGRAPH-5DE6
++<U0001F22D> /xf0/x9f/x88/xad SQUARED CJK UNIFIED IDEOGRAPH-4E2D
++<U0001F22E> /xf0/x9f/x88/xae SQUARED CJK UNIFIED IDEOGRAPH-53F3
++<U0001F22F> /xf0/x9f/x88/xaf SQUARED CJK UNIFIED IDEOGRAPH-6307
++<U0001F230> /xf0/x9f/x88/xb0 SQUARED CJK UNIFIED IDEOGRAPH-8D70
++<U0001F231> /xf0/x9f/x88/xb1 SQUARED CJK UNIFIED IDEOGRAPH-6253
++<U0001F232> /xf0/x9f/x88/xb2 SQUARED CJK UNIFIED IDEOGRAPH-7981
++<U0001F233> /xf0/x9f/x88/xb3 SQUARED CJK UNIFIED IDEOGRAPH-7A7A
++<U0001F234> /xf0/x9f/x88/xb4 SQUARED CJK UNIFIED IDEOGRAPH-5408
++<U0001F235> /xf0/x9f/x88/xb5 SQUARED CJK UNIFIED IDEOGRAPH-6E80
++<U0001F236> /xf0/x9f/x88/xb6 SQUARED CJK UNIFIED IDEOGRAPH-6709
++<U0001F237> /xf0/x9f/x88/xb7 SQUARED CJK UNIFIED IDEOGRAPH-6708
++<U0001F238> /xf0/x9f/x88/xb8 SQUARED CJK UNIFIED IDEOGRAPH-7533
++<U0001F239> /xf0/x9f/x88/xb9 SQUARED CJK UNIFIED IDEOGRAPH-5272
++<U0001F23A> /xf0/x9f/x88/xba SQUARED CJK UNIFIED IDEOGRAPH-55B6
++<U0001F240> /xf0/x9f/x89/x80 TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C
++<U0001F241> /xf0/x9f/x89/x81 TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09
++<U0001F242> /xf0/x9f/x89/x82 TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C
++<U0001F243> /xf0/x9f/x89/x83 TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89
++<U0001F244> /xf0/x9f/x89/x84 TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9
++<U0001F245> /xf0/x9f/x89/x85 TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253
++<U0001F246> /xf0/x9f/x89/x86 TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7
++<U0001F247> /xf0/x9f/x89/x87 TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DD
++<U0001F248> /xf0/x9f/x89/x88 TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
++<U0001F250> /xf0/x9f/x89/x90 CIRCLED IDEOGRAPH ADVANTAGE
++<U0001F251> /xf0/x9f/x89/x91 CIRCLED IDEOGRAPH ACCEPT
++<U0001F300> /xf0/x9f/x8c/x80 CYCLONE
++<U0001F301> /xf0/x9f/x8c/x81 FOGGY
++<U0001F302> /xf0/x9f/x8c/x82 CLOSED UMBRELLA
++<U0001F303> /xf0/x9f/x8c/x83 NIGHT WITH STARS
++<U0001F304> /xf0/x9f/x8c/x84 SUNRISE OVER MOUNTAINS
++<U0001F305> /xf0/x9f/x8c/x85 SUNRISE
++<U0001F306> /xf0/x9f/x8c/x86 CITYSCAPE AT DUSK
++<U0001F307> /xf0/x9f/x8c/x87 SUNSET OVER BUILDINGS
++<U0001F308> /xf0/x9f/x8c/x88 RAINBOW
++<U0001F309> /xf0/x9f/x8c/x89 BRIDGE AT NIGHT
++<U0001F30A> /xf0/x9f/x8c/x8a WATER WAVE
++<U0001F30B> /xf0/x9f/x8c/x8b VOLCANO
++<U0001F30C> /xf0/x9f/x8c/x8c MILKY WAY
++<U0001F30D> /xf0/x9f/x8c/x8d EARTH GLOBE EUROPE-AFRICA
++<U0001F30E> /xf0/x9f/x8c/x8e EARTH GLOBE AMERICAS
++<U0001F30F> /xf0/x9f/x8c/x8f EARTH GLOBE ASIA-AUSTRALIA
++<U0001F310> /xf0/x9f/x8c/x90 GLOBE WITH MERIDIANS
++<U0001F311> /xf0/x9f/x8c/x91 NEW MOON SYMBOL
++<U0001F312> /xf0/x9f/x8c/x92 WAXING CRESCENT MOON SYMBOL
++<U0001F313> /xf0/x9f/x8c/x93 FIRST QUARTER MOON SYMBOL
++<U0001F314> /xf0/x9f/x8c/x94 WAXING GIBBOUS MOON SYMBOL
++<U0001F315> /xf0/x9f/x8c/x95 FULL MOON SYMBOL
++<U0001F316> /xf0/x9f/x8c/x96 WANING GIBBOUS MOON SYMBOL
++<U0001F317> /xf0/x9f/x8c/x97 LAST QUARTER MOON SYMBOL
++<U0001F318> /xf0/x9f/x8c/x98 WANING CRESCENT MOON SYMBOL
++<U0001F319> /xf0/x9f/x8c/x99 CRESCENT MOON
++<U0001F31A> /xf0/x9f/x8c/x9a NEW MOON WITH FACE
++<U0001F31B> /xf0/x9f/x8c/x9b FIRST QUARTER MOON WITH FACE
++<U0001F31C> /xf0/x9f/x8c/x9c LAST QUARTER MOON WITH FACE
++<U0001F31D> /xf0/x9f/x8c/x9d FULL MOON WITH FACE
++<U0001F31E> /xf0/x9f/x8c/x9e SUN WITH FACE
++<U0001F31F> /xf0/x9f/x8c/x9f GLOWING STAR
++<U0001F320> /xf0/x9f/x8c/xa0 SHOOTING STAR
++<U0001F330> /xf0/x9f/x8c/xb0 CHESTNUT
++<U0001F331> /xf0/x9f/x8c/xb1 SEEDLING
++<U0001F332> /xf0/x9f/x8c/xb2 EVERGREEN TREE
++<U0001F333> /xf0/x9f/x8c/xb3 DECIDUOUS TREE
++<U0001F334> /xf0/x9f/x8c/xb4 PALM TREE
++<U0001F335> /xf0/x9f/x8c/xb5 CACTUS
++<U0001F337> /xf0/x9f/x8c/xb7 TULIP
++<U0001F338> /xf0/x9f/x8c/xb8 CHERRY BLOSSOM
++<U0001F339> /xf0/x9f/x8c/xb9 ROSE
++<U0001F33A> /xf0/x9f/x8c/xba HIBISCUS
++<U0001F33B> /xf0/x9f/x8c/xbb SUNFLOWER
++<U0001F33C> /xf0/x9f/x8c/xbc BLOSSOM
++<U0001F33D> /xf0/x9f/x8c/xbd EAR OF MAIZE
++<U0001F33E> /xf0/x9f/x8c/xbe EAR OF RICE
++<U0001F33F> /xf0/x9f/x8c/xbf HERB
++<U0001F340> /xf0/x9f/x8d/x80 FOUR LEAF CLOVER
++<U0001F341> /xf0/x9f/x8d/x81 MAPLE LEAF
++<U0001F342> /xf0/x9f/x8d/x82 FALLEN LEAF
++<U0001F343> /xf0/x9f/x8d/x83 LEAF FLUTTERING IN WIND
++<U0001F344> /xf0/x9f/x8d/x84 MUSHROOM
++<U0001F345> /xf0/x9f/x8d/x85 TOMATO
++<U0001F346> /xf0/x9f/x8d/x86 AUBERGINE
++<U0001F347> /xf0/x9f/x8d/x87 GRAPES
++<U0001F348> /xf0/x9f/x8d/x88 MELON
++<U0001F349> /xf0/x9f/x8d/x89 WATERMELON
++<U0001F34A> /xf0/x9f/x8d/x8a TANGERINE
++<U0001F34B> /xf0/x9f/x8d/x8b LEMON
++<U0001F34C> /xf0/x9f/x8d/x8c BANANA
++<U0001F34D> /xf0/x9f/x8d/x8d PINEAPPLE
++<U0001F34E> /xf0/x9f/x8d/x8e RED APPLE
++<U0001F34F> /xf0/x9f/x8d/x8f GREEN APPLE
++<U0001F350> /xf0/x9f/x8d/x90 PEAR
++<U0001F351> /xf0/x9f/x8d/x91 PEACH
++<U0001F352> /xf0/x9f/x8d/x92 CHERRIES
++<U0001F353> /xf0/x9f/x8d/x93 STRAWBERRY
++<U0001F354> /xf0/x9f/x8d/x94 HAMBURGER
++<U0001F355> /xf0/x9f/x8d/x95 SLICE OF PIZZA
++<U0001F356> /xf0/x9f/x8d/x96 MEAT ON BONE
++<U0001F357> /xf0/x9f/x8d/x97 POULTRY LEG
++<U0001F358> /xf0/x9f/x8d/x98 RICE CRACKER
++<U0001F359> /xf0/x9f/x8d/x99 RICE BALL
++<U0001F35A> /xf0/x9f/x8d/x9a COOKED RICE
++<U0001F35B> /xf0/x9f/x8d/x9b CURRY AND RICE
++<U0001F35C> /xf0/x9f/x8d/x9c STEAMING BOWL
++<U0001F35D> /xf0/x9f/x8d/x9d SPAGHETTI
++<U0001F35E> /xf0/x9f/x8d/x9e BREAD
++<U0001F35F> /xf0/x9f/x8d/x9f FRENCH FRIES
++<U0001F360> /xf0/x9f/x8d/xa0 ROASTED SWEET POTATO
++<U0001F361> /xf0/x9f/x8d/xa1 DANGO
++<U0001F362> /xf0/x9f/x8d/xa2 ODEN
++<U0001F363> /xf0/x9f/x8d/xa3 SUSHI
++<U0001F364> /xf0/x9f/x8d/xa4 FRIED SHRIMP
++<U0001F365> /xf0/x9f/x8d/xa5 FISH CAKE WITH SWIRL DESIGN
++<U0001F366> /xf0/x9f/x8d/xa6 SOFT ICE CREAM
++<U0001F367> /xf0/x9f/x8d/xa7 SHAVED ICE
++<U0001F368> /xf0/x9f/x8d/xa8 ICE CREAM
++<U0001F369> /xf0/x9f/x8d/xa9 DOUGHNUT
++<U0001F36A> /xf0/x9f/x8d/xaa COOKIE
++<U0001F36B> /xf0/x9f/x8d/xab CHOCOLATE BAR
++<U0001F36C> /xf0/x9f/x8d/xac CANDY
++<U0001F36D> /xf0/x9f/x8d/xad LOLLIPOP
++<U0001F36E> /xf0/x9f/x8d/xae CUSTARD
++<U0001F36F> /xf0/x9f/x8d/xaf HONEY POT
++<U0001F370> /xf0/x9f/x8d/xb0 SHORTCAKE
++<U0001F371> /xf0/x9f/x8d/xb1 BENTO BOX
++<U0001F372> /xf0/x9f/x8d/xb2 POT OF FOOD
++<U0001F373> /xf0/x9f/x8d/xb3 COOKING
++<U0001F374> /xf0/x9f/x8d/xb4 FORK AND KNIFE
++<U0001F375> /xf0/x9f/x8d/xb5 TEACUP WITHOUT HANDLE
++<U0001F376> /xf0/x9f/x8d/xb6 SAKE BOTTLE AND CUP
++<U0001F377> /xf0/x9f/x8d/xb7 WINE GLASS
++<U0001F378> /xf0/x9f/x8d/xb8 COCKTAIL GLASS
++<U0001F379> /xf0/x9f/x8d/xb9 TROPICAL DRINK
++<U0001F37A> /xf0/x9f/x8d/xba BEER MUG
++<U0001F37B> /xf0/x9f/x8d/xbb CLINKING BEER MUGS
++<U0001F37C> /xf0/x9f/x8d/xbc BABY BOTTLE
++<U0001F380> /xf0/x9f/x8e/x80 RIBBON
++<U0001F381> /xf0/x9f/x8e/x81 WRAPPED PRESENT
++<U0001F382> /xf0/x9f/x8e/x82 BIRTHDAY CAKE
++<U0001F383> /xf0/x9f/x8e/x83 JACK-O-LANTERN
++<U0001F384> /xf0/x9f/x8e/x84 CHRISTMAS TREE
++<U0001F385> /xf0/x9f/x8e/x85 FATHER CHRISTMAS
++<U0001F386> /xf0/x9f/x8e/x86 FIREWORKS
++<U0001F387> /xf0/x9f/x8e/x87 FIREWORK SPARKLER
++<U0001F388> /xf0/x9f/x8e/x88 BALLOON
++<U0001F389> /xf0/x9f/x8e/x89 PARTY POPPER
++<U0001F38A> /xf0/x9f/x8e/x8a CONFETTI BALL
++<U0001F38B> /xf0/x9f/x8e/x8b TANABATA TREE
++<U0001F38C> /xf0/x9f/x8e/x8c CROSSED FLAGS
++<U0001F38D> /xf0/x9f/x8e/x8d PINE DECORATION
++<U0001F38E> /xf0/x9f/x8e/x8e JAPANESE DOLLS
++<U0001F38F> /xf0/x9f/x8e/x8f CARP STREAMER
++<U0001F390> /xf0/x9f/x8e/x90 WIND CHIME
++<U0001F391> /xf0/x9f/x8e/x91 MOON VIEWING CEREMONY
++<U0001F392> /xf0/x9f/x8e/x92 SCHOOL SATCHEL
++<U0001F393> /xf0/x9f/x8e/x93 GRADUATION CAP
++<U0001F3A0> /xf0/x9f/x8e/xa0 CAROUSEL HORSE
++<U0001F3A1> /xf0/x9f/x8e/xa1 FERRIS WHEEL
++<U0001F3A2> /xf0/x9f/x8e/xa2 ROLLER COASTER
++<U0001F3A3> /xf0/x9f/x8e/xa3 FISHING POLE AND FISH
++<U0001F3A4> /xf0/x9f/x8e/xa4 MICROPHONE
++<U0001F3A5> /xf0/x9f/x8e/xa5 MOVIE CAMERA
++<U0001F3A6> /xf0/x9f/x8e/xa6 CINEMA
++<U0001F3A7> /xf0/x9f/x8e/xa7 HEADPHONE
++<U0001F3A8> /xf0/x9f/x8e/xa8 ARTIST PALETTE
++<U0001F3A9> /xf0/x9f/x8e/xa9 TOP HAT
++<U0001F3AA> /xf0/x9f/x8e/xaa CIRCUS TENT
++<U0001F3AB> /xf0/x9f/x8e/xab TICKET
++<U0001F3AC> /xf0/x9f/x8e/xac CLAPPER BOARD
++<U0001F3AD> /xf0/x9f/x8e/xad PERFORMING ARTS
++<U0001F3AE> /xf0/x9f/x8e/xae VIDEO GAME
++<U0001F3AF> /xf0/x9f/x8e/xaf DIRECT HIT
++<U0001F3B0> /xf0/x9f/x8e/xb0 SLOT MACHINE
++<U0001F3B1> /xf0/x9f/x8e/xb1 BILLIARDS
++<U0001F3B2> /xf0/x9f/x8e/xb2 GAME DIE
++<U0001F3B3> /xf0/x9f/x8e/xb3 BOWLING
++<U0001F3B4> /xf0/x9f/x8e/xb4 FLOWER PLAYING CARDS
++<U0001F3B5> /xf0/x9f/x8e/xb5 MUSICAL NOTE
++<U0001F3B6> /xf0/x9f/x8e/xb6 MULTIPLE MUSICAL NOTES
++<U0001F3B7> /xf0/x9f/x8e/xb7 SAXOPHONE
++<U0001F3B8> /xf0/x9f/x8e/xb8 GUITAR
++<U0001F3B9> /xf0/x9f/x8e/xb9 MUSICAL KEYBOARD
++<U0001F3BA> /xf0/x9f/x8e/xba TRUMPET
++<U0001F3BB> /xf0/x9f/x8e/xbb VIOLIN
++<U0001F3BC> /xf0/x9f/x8e/xbc MUSICAL SCORE
++<U0001F3BD> /xf0/x9f/x8e/xbd RUNNING SHIRT WITH SASH
++<U0001F3BE> /xf0/x9f/x8e/xbe TENNIS RACQUET AND BALL
++<U0001F3BF> /xf0/x9f/x8e/xbf SKI AND SKI BOOT
++<U0001F3C0> /xf0/x9f/x8f/x80 BASKETBALL AND HOOP
++<U0001F3C1> /xf0/x9f/x8f/x81 CHEQUERED FLAG
++<U0001F3C2> /xf0/x9f/x8f/x82 SNOWBOARDER
++<U0001F3C3> /xf0/x9f/x8f/x83 RUNNER
++<U0001F3C4> /xf0/x9f/x8f/x84 SURFER
++<U0001F3C6> /xf0/x9f/x8f/x86 TROPHY
++<U0001F3C7> /xf0/x9f/x8f/x87 HORSE RACING
++<U0001F3C8> /xf0/x9f/x8f/x88 AMERICAN FOOTBALL
++<U0001F3C9> /xf0/x9f/x8f/x89 RUGBY FOOTBALL
++<U0001F3CA> /xf0/x9f/x8f/x8a SWIMMER
++<U0001F3E0> /xf0/x9f/x8f/xa0 HOUSE BUILDING
++<U0001F3E1> /xf0/x9f/x8f/xa1 HOUSE WITH GARDEN
++<U0001F3E2> /xf0/x9f/x8f/xa2 OFFICE BUILDING
++<U0001F3E3> /xf0/x9f/x8f/xa3 JAPANESE POST OFFICE
++<U0001F3E4> /xf0/x9f/x8f/xa4 EUROPEAN POST OFFICE
++<U0001F3E5> /xf0/x9f/x8f/xa5 HOSPITAL
++<U0001F3E6> /xf0/x9f/x8f/xa6 BANK
++<U0001F3E7> /xf0/x9f/x8f/xa7 AUTOMATED TELLER MACHINE
++<U0001F3E8> /xf0/x9f/x8f/xa8 HOTEL
++<U0001F3E9> /xf0/x9f/x8f/xa9 LOVE HOTEL
++<U0001F3EA> /xf0/x9f/x8f/xaa CONVENIENCE STORE
++<U0001F3EB> /xf0/x9f/x8f/xab SCHOOL
++<U0001F3EC> /xf0/x9f/x8f/xac DEPARTMENT STORE
++<U0001F3ED> /xf0/x9f/x8f/xad FACTORY
++<U0001F3EE> /xf0/x9f/x8f/xae IZAKAYA LANTERN
++<U0001F3EF> /xf0/x9f/x8f/xaf JAPANESE CASTLE
++<U0001F3F0> /xf0/x9f/x8f/xb0 EUROPEAN CASTLE
++<U0001F400> /xf0/x9f/x90/x80 RAT
++<U0001F401> /xf0/x9f/x90/x81 MOUSE
++<U0001F402> /xf0/x9f/x90/x82 OX
++<U0001F403> /xf0/x9f/x90/x83 WATER BUFFALO
++<U0001F404> /xf0/x9f/x90/x84 COW
++<U0001F405> /xf0/x9f/x90/x85 TIGER
++<U0001F406> /xf0/x9f/x90/x86 LEOPARD
++<U0001F407> /xf0/x9f/x90/x87 RABBIT
++<U0001F408> /xf0/x9f/x90/x88 CAT
++<U0001F409> /xf0/x9f/x90/x89 DRAGON
++<U0001F40A> /xf0/x9f/x90/x8a CROCODILE
++<U0001F40B> /xf0/x9f/x90/x8b WHALE
++<U0001F40C> /xf0/x9f/x90/x8c SNAIL
++<U0001F40D> /xf0/x9f/x90/x8d SNAKE
++<U0001F40E> /xf0/x9f/x90/x8e HORSE
++<U0001F40F> /xf0/x9f/x90/x8f RAM
++<U0001F410> /xf0/x9f/x90/x90 GOAT
++<U0001F411> /xf0/x9f/x90/x91 SHEEP
++<U0001F412> /xf0/x9f/x90/x92 MONKEY
++<U0001F413> /xf0/x9f/x90/x93 ROOSTER
++<U0001F414> /xf0/x9f/x90/x94 CHICKEN
++<U0001F415> /xf0/x9f/x90/x95 DOG
++<U0001F416> /xf0/x9f/x90/x96 PIG
++<U0001F417> /xf0/x9f/x90/x97 BOAR
++<U0001F418> /xf0/x9f/x90/x98 ELEPHANT
++<U0001F419> /xf0/x9f/x90/x99 OCTOPUS
++<U0001F41A> /xf0/x9f/x90/x9a SPIRAL SHELL
++<U0001F41B> /xf0/x9f/x90/x9b BUG
++<U0001F41C> /xf0/x9f/x90/x9c ANT
++<U0001F41D> /xf0/x9f/x90/x9d HONEYBEE
++<U0001F41E> /xf0/x9f/x90/x9e LADY BEETLE
++<U0001F41F> /xf0/x9f/x90/x9f FISH
++<U0001F420> /xf0/x9f/x90/xa0 TROPICAL FISH
++<U0001F421> /xf0/x9f/x90/xa1 BLOWFISH
++<U0001F422> /xf0/x9f/x90/xa2 TURTLE
++<U0001F423> /xf0/x9f/x90/xa3 HATCHING CHICK
++<U0001F424> /xf0/x9f/x90/xa4 BABY CHICK
++<U0001F425> /xf0/x9f/x90/xa5 FRONT-FACING BABY CHICK
++<U0001F426> /xf0/x9f/x90/xa6 BIRD
++<U0001F427> /xf0/x9f/x90/xa7 PENGUIN
++<U0001F428> /xf0/x9f/x90/xa8 KOALA
++<U0001F429> /xf0/x9f/x90/xa9 POODLE
++<U0001F42A> /xf0/x9f/x90/xaa DROMEDARY CAMEL
++<U0001F42B> /xf0/x9f/x90/xab BACTRIAN CAMEL
++<U0001F42C> /xf0/x9f/x90/xac DOLPHIN
++<U0001F42D> /xf0/x9f/x90/xad MOUSE FACE
++<U0001F42E> /xf0/x9f/x90/xae COW FACE
++<U0001F42F> /xf0/x9f/x90/xaf TIGER FACE
++<U0001F430> /xf0/x9f/x90/xb0 RABBIT FACE
++<U0001F431> /xf0/x9f/x90/xb1 CAT FACE
++<U0001F432> /xf0/x9f/x90/xb2 DRAGON FACE
++<U0001F433> /xf0/x9f/x90/xb3 SPOUTING WHALE
++<U0001F434> /xf0/x9f/x90/xb4 HORSE FACE
++<U0001F435> /xf0/x9f/x90/xb5 MONKEY FACE
++<U0001F436> /xf0/x9f/x90/xb6 DOG FACE
++<U0001F437> /xf0/x9f/x90/xb7 PIG FACE
++<U0001F438> /xf0/x9f/x90/xb8 FROG FACE
++<U0001F439> /xf0/x9f/x90/xb9 HAMSTER FACE
++<U0001F43A> /xf0/x9f/x90/xba WOLF FACE
++<U0001F43B> /xf0/x9f/x90/xbb BEAR FACE
++<U0001F43C> /xf0/x9f/x90/xbc PANDA FACE
++<U0001F43D> /xf0/x9f/x90/xbd PIG NOSE
++<U0001F43E> /xf0/x9f/x90/xbe PAW PRINTS
++<U0001F440> /xf0/x9f/x91/x80 EYES
++<U0001F442> /xf0/x9f/x91/x82 EAR
++<U0001F443> /xf0/x9f/x91/x83 NOSE
++<U0001F444> /xf0/x9f/x91/x84 MOUTH
++<U0001F445> /xf0/x9f/x91/x85 TONGUE
++<U0001F446> /xf0/x9f/x91/x86 WHITE UP POINTING BACKHAND INDEX
++<U0001F447> /xf0/x9f/x91/x87 WHITE DOWN POINTING BACKHAND INDEX
++<U0001F448> /xf0/x9f/x91/x88 WHITE LEFT POINTING BACKHAND INDEX
++<U0001F449> /xf0/x9f/x91/x89 WHITE RIGHT POINTING BACKHAND INDEX
++<U0001F44A> /xf0/x9f/x91/x8a FISTED HAND SIGN
++<U0001F44B> /xf0/x9f/x91/x8b WAVING HAND SIGN
++<U0001F44C> /xf0/x9f/x91/x8c OK HAND SIGN
++<U0001F44D> /xf0/x9f/x91/x8d THUMBS UP SIGN
++<U0001F44E> /xf0/x9f/x91/x8e THUMBS DOWN SIGN
++<U0001F44F> /xf0/x9f/x91/x8f CLAPPING HANDS SIGN
++<U0001F450> /xf0/x9f/x91/x90 OPEN HANDS SIGN
++<U0001F451> /xf0/x9f/x91/x91 CROWN
++<U0001F452> /xf0/x9f/x91/x92 WOMANS HAT
++<U0001F453> /xf0/x9f/x91/x93 EYEGLASSES
++<U0001F454> /xf0/x9f/x91/x94 NECKTIE
++<U0001F455> /xf0/x9f/x91/x95 T-SHIRT
++<U0001F456> /xf0/x9f/x91/x96 JEANS
++<U0001F457> /xf0/x9f/x91/x97 DRESS
++<U0001F458> /xf0/x9f/x91/x98 KIMONO
++<U0001F459> /xf0/x9f/x91/x99 BIKINI
++<U0001F45A> /xf0/x9f/x91/x9a WOMANS CLOTHES
++<U0001F45B> /xf0/x9f/x91/x9b PURSE
++<U0001F45C> /xf0/x9f/x91/x9c HANDBAG
++<U0001F45D> /xf0/x9f/x91/x9d POUCH
++<U0001F45E> /xf0/x9f/x91/x9e MANS SHOE
++<U0001F45F> /xf0/x9f/x91/x9f ATHLETIC SHOE
++<U0001F460> /xf0/x9f/x91/xa0 HIGH-HEELED SHOE
++<U0001F461> /xf0/x9f/x91/xa1 WOMANS SANDAL
++<U0001F462> /xf0/x9f/x91/xa2 WOMANS BOOTS
++<U0001F463> /xf0/x9f/x91/xa3 FOOTPRINTS
++<U0001F464> /xf0/x9f/x91/xa4 BUST IN SILHOUETTE
++<U0001F465> /xf0/x9f/x91/xa5 BUSTS IN SILHOUETTE
++<U0001F466> /xf0/x9f/x91/xa6 BOY
++<U0001F467> /xf0/x9f/x91/xa7 GIRL
++<U0001F468> /xf0/x9f/x91/xa8 MAN
++<U0001F469> /xf0/x9f/x91/xa9 WOMAN
++<U0001F46A> /xf0/x9f/x91/xaa FAMILY
++<U0001F46B> /xf0/x9f/x91/xab MAN AND WOMAN HOLDING HANDS
++<U0001F46C> /xf0/x9f/x91/xac TWO MEN HOLDING HANDS
++<U0001F46D> /xf0/x9f/x91/xad TWO WOMEN HOLDING HANDS
++<U0001F46E> /xf0/x9f/x91/xae POLICE OFFICER
++<U0001F46F> /xf0/x9f/x91/xaf WOMAN WITH BUNNY EARS
++<U0001F470> /xf0/x9f/x91/xb0 BRIDE WITH VEIL
++<U0001F471> /xf0/x9f/x91/xb1 PERSON WITH BLOND HAIR
++<U0001F472> /xf0/x9f/x91/xb2 MAN WITH GUA PI MAO
++<U0001F473> /xf0/x9f/x91/xb3 MAN WITH TURBAN
++<U0001F474> /xf0/x9f/x91/xb4 OLDER MAN
++<U0001F475> /xf0/x9f/x91/xb5 OLDER WOMAN
++<U0001F476> /xf0/x9f/x91/xb6 BABY
++<U0001F477> /xf0/x9f/x91/xb7 CONSTRUCTION WORKER
++<U0001F478> /xf0/x9f/x91/xb8 PRINCESS
++<U0001F479> /xf0/x9f/x91/xb9 JAPANESE OGRE
++<U0001F47A> /xf0/x9f/x91/xba JAPANESE GOBLIN
++<U0001F47B> /xf0/x9f/x91/xbb GHOST
++<U0001F47C> /xf0/x9f/x91/xbc BABY ANGEL
++<U0001F47D> /xf0/x9f/x91/xbd EXTRATERRESTRIAL ALIEN
++<U0001F47E> /xf0/x9f/x91/xbe ALIEN MONSTER
++<U0001F47F> /xf0/x9f/x91/xbf IMP
++<U0001F480> /xf0/x9f/x92/x80 SKULL
++<U0001F481> /xf0/x9f/x92/x81 INFORMATION DESK PERSON
++<U0001F482> /xf0/x9f/x92/x82 GUARDSMAN
++<U0001F483> /xf0/x9f/x92/x83 DANCER
++<U0001F484> /xf0/x9f/x92/x84 LIPSTICK
++<U0001F485> /xf0/x9f/x92/x85 NAIL POLISH
++<U0001F486> /xf0/x9f/x92/x86 FACE MASSAGE
++<U0001F487> /xf0/x9f/x92/x87 HAIRCUT
++<U0001F488> /xf0/x9f/x92/x88 BARBER POLE
++<U0001F489> /xf0/x9f/x92/x89 SYRINGE
++<U0001F48A> /xf0/x9f/x92/x8a PILL
++<U0001F48B> /xf0/x9f/x92/x8b KISS MARK
++<U0001F48C> /xf0/x9f/x92/x8c LOVE LETTER
++<U0001F48D> /xf0/x9f/x92/x8d RING
++<U0001F48E> /xf0/x9f/x92/x8e GEM STONE
++<U0001F48F> /xf0/x9f/x92/x8f KISS
++<U0001F490> /xf0/x9f/x92/x90 BOUQUET
++<U0001F491> /xf0/x9f/x92/x91 COUPLE WITH HEART
++<U0001F492> /xf0/x9f/x92/x92 WEDDING
++<U0001F493> /xf0/x9f/x92/x93 BEATING HEART
++<U0001F494> /xf0/x9f/x92/x94 BROKEN HEART
++<U0001F495> /xf0/x9f/x92/x95 TWO HEARTS
++<U0001F496> /xf0/x9f/x92/x96 SPARKLING HEART
++<U0001F497> /xf0/x9f/x92/x97 GROWING HEART
++<U0001F498> /xf0/x9f/x92/x98 HEART WITH ARROW
++<U0001F499> /xf0/x9f/x92/x99 BLUE HEART
++<U0001F49A> /xf0/x9f/x92/x9a GREEN HEART
++<U0001F49B> /xf0/x9f/x92/x9b YELLOW HEART
++<U0001F49C> /xf0/x9f/x92/x9c PURPLE HEART
++<U0001F49D> /xf0/x9f/x92/x9d HEART WITH RIBBON
++<U0001F49E> /xf0/x9f/x92/x9e REVOLVING HEARTS
++<U0001F49F> /xf0/x9f/x92/x9f HEART DECORATION
++<U0001F4A0> /xf0/x9f/x92/xa0 DIAMOND SHAPE WITH A DOT INSIDE
++<U0001F4A1> /xf0/x9f/x92/xa1 ELECTRIC LIGHT BULB
++<U0001F4A2> /xf0/x9f/x92/xa2 ANGER SYMBOL
++<U0001F4A3> /xf0/x9f/x92/xa3 BOMB
++<U0001F4A4> /xf0/x9f/x92/xa4 SLEEPING SYMBOL
++<U0001F4A5> /xf0/x9f/x92/xa5 COLLISION SYMBOL
++<U0001F4A6> /xf0/x9f/x92/xa6 SPLASHING SWEAT SYMBOL
++<U0001F4A7> /xf0/x9f/x92/xa7 DROPLET
++<U0001F4A8> /xf0/x9f/x92/xa8 DASH SYMBOL
++<U0001F4A9> /xf0/x9f/x92/xa9 PILE OF POO
++<U0001F4AA> /xf0/x9f/x92/xaa FLEXED BICEPS
++<U0001F4AB> /xf0/x9f/x92/xab DIZZY SYMBOL
++<U0001F4AC> /xf0/x9f/x92/xac SPEECH BALLOON
++<U0001F4AD> /xf0/x9f/x92/xad THOUGHT BALLOON
++<U0001F4AE> /xf0/x9f/x92/xae WHITE FLOWER
++<U0001F4AF> /xf0/x9f/x92/xaf HUNDRED POINTS SYMBOL
++<U0001F4B0> /xf0/x9f/x92/xb0 MONEY BAG
++<U0001F4B1> /xf0/x9f/x92/xb1 CURRENCY EXCHANGE
++<U0001F4B2> /xf0/x9f/x92/xb2 HEAVY DOLLAR SIGN
++<U0001F4B3> /xf0/x9f/x92/xb3 CREDIT CARD
++<U0001F4B4> /xf0/x9f/x92/xb4 BANKNOTE WITH YEN SIGN
++<U0001F4B5> /xf0/x9f/x92/xb5 BANKNOTE WITH DOLLAR SIGN
++<U0001F4B6> /xf0/x9f/x92/xb6 BANKNOTE WITH EURO SIGN
++<U0001F4B7> /xf0/x9f/x92/xb7 BANKNOTE WITH POUND SIGN
++<U0001F4B8> /xf0/x9f/x92/xb8 MONEY WITH WINGS
++<U0001F4B9> /xf0/x9f/x92/xb9 CHART WITH UPWARDS TREND AND YEN SIGN
++<U0001F4BA> /xf0/x9f/x92/xba SEAT
++<U0001F4BB> /xf0/x9f/x92/xbb PERSONAL COMPUTER
++<U0001F4BC> /xf0/x9f/x92/xbc BRIEFCASE
++<U0001F4BD> /xf0/x9f/x92/xbd MINIDISC
++<U0001F4BE> /xf0/x9f/x92/xbe FLOPPY DISK
++<U0001F4BF> /xf0/x9f/x92/xbf OPTICAL DISC
++<U0001F4C0> /xf0/x9f/x93/x80 DVD
++<U0001F4C1> /xf0/x9f/x93/x81 FILE FOLDER
++<U0001F4C2> /xf0/x9f/x93/x82 OPEN FILE FOLDER
++<U0001F4C3> /xf0/x9f/x93/x83 PAGE WITH CURL
++<U0001F4C4> /xf0/x9f/x93/x84 PAGE FACING UP
++<U0001F4C5> /xf0/x9f/x93/x85 CALENDAR
++<U0001F4C6> /xf0/x9f/x93/x86 TEAR-OFF CALENDAR
++<U0001F4C7> /xf0/x9f/x93/x87 CARD INDEX
++<U0001F4C8> /xf0/x9f/x93/x88 CHART WITH UPWARDS TREND
++<U0001F4C9> /xf0/x9f/x93/x89 CHART WITH DOWNWARDS TREND
++<U0001F4CA> /xf0/x9f/x93/x8a BAR CHART
++<U0001F4CB> /xf0/x9f/x93/x8b CLIPBOARD
++<U0001F4CC> /xf0/x9f/x93/x8c PUSHPIN
++<U0001F4CD> /xf0/x9f/x93/x8d ROUND PUSHPIN
++<U0001F4CE> /xf0/x9f/x93/x8e PAPERCLIP
++<U0001F4CF> /xf0/x9f/x93/x8f STRAIGHT RULER
++<U0001F4D0> /xf0/x9f/x93/x90 TRIANGULAR RULER
++<U0001F4D1> /xf0/x9f/x93/x91 BOOKMARK TABS
++<U0001F4D2> /xf0/x9f/x93/x92 LEDGER
++<U0001F4D3> /xf0/x9f/x93/x93 NOTEBOOK
++<U0001F4D4> /xf0/x9f/x93/x94 NOTEBOOK WITH DECORATIVE COVER
++<U0001F4D5> /xf0/x9f/x93/x95 CLOSED BOOK
++<U0001F4D6> /xf0/x9f/x93/x96 OPEN BOOK
++<U0001F4D7> /xf0/x9f/x93/x97 GREEN BOOK
++<U0001F4D8> /xf0/x9f/x93/x98 BLUE BOOK
++<U0001F4D9> /xf0/x9f/x93/x99 ORANGE BOOK
++<U0001F4DA> /xf0/x9f/x93/x9a BOOKS
++<U0001F4DB> /xf0/x9f/x93/x9b NAME BADGE
++<U0001F4DC> /xf0/x9f/x93/x9c SCROLL
++<U0001F4DD> /xf0/x9f/x93/x9d MEMO
++<U0001F4DE> /xf0/x9f/x93/x9e TELEPHONE RECEIVER
++<U0001F4DF> /xf0/x9f/x93/x9f PAGER
++<U0001F4E0> /xf0/x9f/x93/xa0 FAX MACHINE
++<U0001F4E1> /xf0/x9f/x93/xa1 SATELLITE ANTENNA
++<U0001F4E2> /xf0/x9f/x93/xa2 PUBLIC ADDRESS LOUDSPEAKER
++<U0001F4E3> /xf0/x9f/x93/xa3 CHEERING MEGAPHONE
++<U0001F4E4> /xf0/x9f/x93/xa4 OUTBOX TRAY
++<U0001F4E5> /xf0/x9f/x93/xa5 INBOX TRAY
++<U0001F4E6> /xf0/x9f/x93/xa6 PACKAGE
++<U0001F4E7> /xf0/x9f/x93/xa7 E-MAIL SYMBOL
++<U0001F4E8> /xf0/x9f/x93/xa8 INCOMING ENVELOPE
++<U0001F4E9> /xf0/x9f/x93/xa9 ENVELOPE WITH DOWNWARDS ARROW ABOVE
++<U0001F4EA> /xf0/x9f/x93/xaa CLOSED MAILBOX WITH LOWERED FLAG
++<U0001F4EB> /xf0/x9f/x93/xab CLOSED MAILBOX WITH RAISED FLAG
++<U0001F4EC> /xf0/x9f/x93/xac OPEN MAILBOX WITH RAISED FLAG
++<U0001F4ED> /xf0/x9f/x93/xad OPEN MAILBOX WITH LOWERED FLAG
++<U0001F4EE> /xf0/x9f/x93/xae POSTBOX
++<U0001F4EF> /xf0/x9f/x93/xaf POSTAL HORN
++<U0001F4F0> /xf0/x9f/x93/xb0 NEWSPAPER
++<U0001F4F1> /xf0/x9f/x93/xb1 MOBILE PHONE
++<U0001F4F2> /xf0/x9f/x93/xb2 MOBILE PHONE WITH RIGHTWARDS ARROW AT LEFT
++<U0001F4F3> /xf0/x9f/x93/xb3 VIBRATION MODE
++<U0001F4F4> /xf0/x9f/x93/xb4 MOBILE PHONE OFF
++<U0001F4F5> /xf0/x9f/x93/xb5 NO MOBILE PHONES
++<U0001F4F6> /xf0/x9f/x93/xb6 ANTENNA WITH BARS
++<U0001F4F7> /xf0/x9f/x93/xb7 CAMERA
++<U0001F4F9> /xf0/x9f/x93/xb9 VIDEO CAMERA
++<U0001F4FA> /xf0/x9f/x93/xba TELEVISION
++<U0001F4FB> /xf0/x9f/x93/xbb RADIO
++<U0001F4FC> /xf0/x9f/x93/xbc VIDEOCASSETTE
++<U0001F500> /xf0/x9f/x94/x80 TWISTED RIGHTWARDS ARROWS
++<U0001F501> /xf0/x9f/x94/x81 CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS
++<U0001F502> /xf0/x9f/x94/x82 CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS WITH CIRCLED ONE OVERLAY
++<U0001F503> /xf0/x9f/x94/x83 CLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS
++<U0001F504> /xf0/x9f/x94/x84 ANTICLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS
++<U0001F505> /xf0/x9f/x94/x85 LOW BRIGHTNESS SYMBOL
++<U0001F506> /xf0/x9f/x94/x86 HIGH BRIGHTNESS SYMBOL
++<U0001F507> /xf0/x9f/x94/x87 SPEAKER WITH CANCELLATION STROKE
++<U0001F508> /xf0/x9f/x94/x88 SPEAKER
++<U0001F509> /xf0/x9f/x94/x89 SPEAKER WITH ONE SOUND WAVE
++<U0001F50A> /xf0/x9f/x94/x8a SPEAKER WITH THREE SOUND WAVES
++<U0001F50B> /xf0/x9f/x94/x8b BATTERY
++<U0001F50C> /xf0/x9f/x94/x8c ELECTRIC PLUG
++<U0001F50D> /xf0/x9f/x94/x8d LEFT-POINTING MAGNIFYING GLASS
++<U0001F50E> /xf0/x9f/x94/x8e RIGHT-POINTING MAGNIFYING GLASS
++<U0001F50F> /xf0/x9f/x94/x8f LOCK WITH INK PEN
++<U0001F510> /xf0/x9f/x94/x90 CLOSED LOCK WITH KEY
++<U0001F511> /xf0/x9f/x94/x91 KEY
++<U0001F512> /xf0/x9f/x94/x92 LOCK
++<U0001F513> /xf0/x9f/x94/x93 OPEN LOCK
++<U0001F514> /xf0/x9f/x94/x94 BELL
++<U0001F515> /xf0/x9f/x94/x95 BELL WITH CANCELLATION STROKE
++<U0001F516> /xf0/x9f/x94/x96 BOOKMARK
++<U0001F517> /xf0/x9f/x94/x97 LINK SYMBOL
++<U0001F518> /xf0/x9f/x94/x98 RADIO BUTTON
++<U0001F519> /xf0/x9f/x94/x99 BACK WITH LEFTWARDS ARROW ABOVE
++<U0001F51A> /xf0/x9f/x94/x9a END WITH LEFTWARDS ARROW ABOVE
++<U0001F51B> /xf0/x9f/x94/x9b ON WITH EXCLAMATION MARK WITH LEFT RIGHT ARROW ABOVE
++<U0001F51C> /xf0/x9f/x94/x9c SOON WITH RIGHTWARDS ARROW ABOVE
++<U0001F51D> /xf0/x9f/x94/x9d TOP WITH UPWARDS ARROW ABOVE
++<U0001F51E> /xf0/x9f/x94/x9e NO ONE UNDER EIGHTEEN SYMBOL
++<U0001F51F> /xf0/x9f/x94/x9f KEYCAP TEN
++<U0001F520> /xf0/x9f/x94/xa0 INPUT SYMBOL FOR LATIN CAPITAL LETTERS
++<U0001F521> /xf0/x9f/x94/xa1 INPUT SYMBOL FOR LATIN SMALL LETTERS
++<U0001F522> /xf0/x9f/x94/xa2 INPUT SYMBOL FOR NUMBERS
++<U0001F523> /xf0/x9f/x94/xa3 INPUT SYMBOL FOR SYMBOLS
++<U0001F524> /xf0/x9f/x94/xa4 INPUT SYMBOL FOR LATIN LETTERS
++<U0001F525> /xf0/x9f/x94/xa5 FIRE
++<U0001F526> /xf0/x9f/x94/xa6 ELECTRIC TORCH
++<U0001F527> /xf0/x9f/x94/xa7 WRENCH
++<U0001F528> /xf0/x9f/x94/xa8 HAMMER
++<U0001F529> /xf0/x9f/x94/xa9 NUT AND BOLT
++<U0001F52A> /xf0/x9f/x94/xaa HOCHO
++<U0001F52B> /xf0/x9f/x94/xab PISTOL
++<U0001F52C> /xf0/x9f/x94/xac MICROSCOPE
++<U0001F52D> /xf0/x9f/x94/xad TELESCOPE
++<U0001F52E> /xf0/x9f/x94/xae CRYSTAL BALL
++<U0001F52F> /xf0/x9f/x94/xaf SIX POINTED STAR WITH MIDDLE DOT
++<U0001F530> /xf0/x9f/x94/xb0 JAPANESE SYMBOL FOR BEGINNER
++<U0001F531> /xf0/x9f/x94/xb1 TRIDENT EMBLEM
++<U0001F532> /xf0/x9f/x94/xb2 BLACK SQUARE BUTTON
++<U0001F533> /xf0/x9f/x94/xb3 WHITE SQUARE BUTTON
++<U0001F534> /xf0/x9f/x94/xb4 LARGE RED CIRCLE
++<U0001F535> /xf0/x9f/x94/xb5 LARGE BLUE CIRCLE
++<U0001F536> /xf0/x9f/x94/xb6 LARGE ORANGE DIAMOND
++<U0001F537> /xf0/x9f/x94/xb7 LARGE BLUE DIAMOND
++<U0001F538> /xf0/x9f/x94/xb8 SMALL ORANGE DIAMOND
++<U0001F539> /xf0/x9f/x94/xb9 SMALL BLUE DIAMOND
++<U0001F53A> /xf0/x9f/x94/xba UP-POINTING RED TRIANGLE
++<U0001F53B> /xf0/x9f/x94/xbb DOWN-POINTING RED TRIANGLE
++<U0001F53C> /xf0/x9f/x94/xbc UP-POINTING SMALL RED TRIANGLE
++<U0001F53D> /xf0/x9f/x94/xbd DOWN-POINTING SMALL RED TRIANGLE
++<U0001F550> /xf0/x9f/x95/x90 CLOCK FACE ONE OCLOCK
++<U0001F551> /xf0/x9f/x95/x91 CLOCK FACE TWO OCLOCK
++<U0001F552> /xf0/x9f/x95/x92 CLOCK FACE THREE OCLOCK
++<U0001F553> /xf0/x9f/x95/x93 CLOCK FACE FOUR OCLOCK
++<U0001F554> /xf0/x9f/x95/x94 CLOCK FACE FIVE OCLOCK
++<U0001F555> /xf0/x9f/x95/x95 CLOCK FACE SIX OCLOCK
++<U0001F556> /xf0/x9f/x95/x96 CLOCK FACE SEVEN OCLOCK
++<U0001F557> /xf0/x9f/x95/x97 CLOCK FACE EIGHT OCLOCK
++<U0001F558> /xf0/x9f/x95/x98 CLOCK FACE NINE OCLOCK
++<U0001F559> /xf0/x9f/x95/x99 CLOCK FACE TEN OCLOCK
++<U0001F55A> /xf0/x9f/x95/x9a CLOCK FACE ELEVEN OCLOCK
++<U0001F55B> /xf0/x9f/x95/x9b CLOCK FACE TWELVE OCLOCK
++<U0001F55C> /xf0/x9f/x95/x9c CLOCK FACE ONE-THIRTY
++<U0001F55D> /xf0/x9f/x95/x9d CLOCK FACE TWO-THIRTY
++<U0001F55E> /xf0/x9f/x95/x9e CLOCK FACE THREE-THIRTY
++<U0001F55F> /xf0/x9f/x95/x9f CLOCK FACE FOUR-THIRTY
++<U0001F560> /xf0/x9f/x95/xa0 CLOCK FACE FIVE-THIRTY
++<U0001F561> /xf0/x9f/x95/xa1 CLOCK FACE SIX-THIRTY
++<U0001F562> /xf0/x9f/x95/xa2 CLOCK FACE SEVEN-THIRTY
++<U0001F563> /xf0/x9f/x95/xa3 CLOCK FACE EIGHT-THIRTY
++<U0001F564> /xf0/x9f/x95/xa4 CLOCK FACE NINE-THIRTY
++<U0001F565> /xf0/x9f/x95/xa5 CLOCK FACE TEN-THIRTY
++<U0001F566> /xf0/x9f/x95/xa6 CLOCK FACE ELEVEN-THIRTY
++<U0001F567> /xf0/x9f/x95/xa7 CLOCK FACE TWELVE-THIRTY
++<U0001F5FB> /xf0/x9f/x97/xbb MOUNT FUJI
++<U0001F5FC> /xf0/x9f/x97/xbc TOKYO TOWER
++<U0001F5FD> /xf0/x9f/x97/xbd STATUE OF LIBERTY
++<U0001F5FE> /xf0/x9f/x97/xbe SILHOUETTE OF JAPAN
++<U0001F5FF> /xf0/x9f/x97/xbf MOYAI
++<U0001F601> /xf0/x9f/x98/x81 GRINNING FACE WITH SMILING EYES
++<U0001F602> /xf0/x9f/x98/x82 FACE WITH TEARS OF JOY
++<U0001F603> /xf0/x9f/x98/x83 SMILING FACE WITH OPEN MOUTH
++<U0001F604> /xf0/x9f/x98/x84 SMILING FACE WITH OPEN MOUTH AND SMILING EYES
++<U0001F605> /xf0/x9f/x98/x85 SMILING FACE WITH OPEN MOUTH AND COLD SWEAT
++<U0001F606> /xf0/x9f/x98/x86 SMILING FACE WITH OPEN MOUTH AND TIGHTLY-CLOSED EYES
++<U0001F607> /xf0/x9f/x98/x87 SMILING FACE WITH HALO
++<U0001F608> /xf0/x9f/x98/x88 SMILING FACE WITH HORNS
++<U0001F609> /xf0/x9f/x98/x89 WINKING FACE
++<U0001F60A> /xf0/x9f/x98/x8a SMILING FACE WITH SMILING EYES
++<U0001F60B> /xf0/x9f/x98/x8b FACE SAVOURING DELICIOUS FOOD
++<U0001F60C> /xf0/x9f/x98/x8c RELIEVED FACE
++<U0001F60D> /xf0/x9f/x98/x8d SMILING FACE WITH HEART-SHAPED EYES
++<U0001F60E> /xf0/x9f/x98/x8e SMILING FACE WITH SUNGLASSES
++<U0001F60F> /xf0/x9f/x98/x8f SMIRKING FACE
++<U0001F610> /xf0/x9f/x98/x90 NEUTRAL FACE
++<U0001F612> /xf0/x9f/x98/x92 UNAMUSED FACE
++<U0001F613> /xf0/x9f/x98/x93 FACE WITH COLD SWEAT
++<U0001F614> /xf0/x9f/x98/x94 PENSIVE FACE
++<U0001F616> /xf0/x9f/x98/x96 CONFOUNDED FACE
++<U0001F618> /xf0/x9f/x98/x98 FACE THROWING A KISS
++<U0001F61A> /xf0/x9f/x98/x9a KISSING FACE WITH CLOSED EYES
++<U0001F61C> /xf0/x9f/x98/x9c FACE WITH STUCK-OUT TONGUE AND WINKING EYE
++<U0001F61D> /xf0/x9f/x98/x9d FACE WITH STUCK-OUT TONGUE AND TIGHTLY-CLOSED EYES
++<U0001F61E> /xf0/x9f/x98/x9e DISAPPOINTED FACE
++<U0001F620> /xf0/x9f/x98/xa0 ANGRY FACE
++<U0001F621> /xf0/x9f/x98/xa1 POUTING FACE
++<U0001F622> /xf0/x9f/x98/xa2 CRYING FACE
++<U0001F623> /xf0/x9f/x98/xa3 PERSEVERING FACE
++<U0001F624> /xf0/x9f/x98/xa4 FACE WITH LOOK OF TRIUMPH
++<U0001F625> /xf0/x9f/x98/xa5 DISAPPOINTED BUT RELIEVED FACE
++<U0001F628> /xf0/x9f/x98/xa8 FEARFUL FACE
++<U0001F629> /xf0/x9f/x98/xa9 WEARY FACE
++<U0001F62A> /xf0/x9f/x98/xaa SLEEPY FACE
++<U0001F62B> /xf0/x9f/x98/xab TIRED FACE
++<U0001F62D> /xf0/x9f/x98/xad LOUDLY CRYING FACE
++<U0001F630> /xf0/x9f/x98/xb0 FACE WITH OPEN MOUTH AND COLD SWEAT
++<U0001F631> /xf0/x9f/x98/xb1 FACE SCREAMING IN FEAR
++<U0001F632> /xf0/x9f/x98/xb2 ASTONISHED FACE
++<U0001F633> /xf0/x9f/x98/xb3 FLUSHED FACE
++<U0001F635> /xf0/x9f/x98/xb5 DIZZY FACE
++<U0001F636> /xf0/x9f/x98/xb6 FACE WITHOUT MOUTH
++<U0001F637> /xf0/x9f/x98/xb7 FACE WITH MEDICAL MASK
++<U0001F638> /xf0/x9f/x98/xb8 GRINNING CAT FACE WITH SMILING EYES
++<U0001F639> /xf0/x9f/x98/xb9 CAT FACE WITH TEARS OF JOY
++<U0001F63A> /xf0/x9f/x98/xba SMILING CAT FACE WITH OPEN MOUTH
++<U0001F63B> /xf0/x9f/x98/xbb SMILING CAT FACE WITH HEART-SHAPED EYES
++<U0001F63C> /xf0/x9f/x98/xbc CAT FACE WITH WRY SMILE
++<U0001F63D> /xf0/x9f/x98/xbd KISSING CAT FACE WITH CLOSED EYES
++<U0001F63E> /xf0/x9f/x98/xbe POUTING CAT FACE
++<U0001F63F> /xf0/x9f/x98/xbf CRYING CAT FACE
++<U0001F640> /xf0/x9f/x99/x80 WEARY CAT FACE
++<U0001F645> /xf0/x9f/x99/x85 FACE WITH NO GOOD GESTURE
++<U0001F646> /xf0/x9f/x99/x86 FACE WITH OK GESTURE
++<U0001F647> /xf0/x9f/x99/x87 PERSON BOWING DEEPLY
++<U0001F648> /xf0/x9f/x99/x88 SEE-NO-EVIL MONKEY
++<U0001F649> /xf0/x9f/x99/x89 HEAR-NO-EVIL MONKEY
++<U0001F64A> /xf0/x9f/x99/x8a SPEAK-NO-EVIL MONKEY
++<U0001F64B> /xf0/x9f/x99/x8b HAPPY PERSON RAISING ONE HAND
++<U0001F64C> /xf0/x9f/x99/x8c PERSON RAISING BOTH HANDS IN CELEBRATION
++<U0001F64D> /xf0/x9f/x99/x8d PERSON FROWNING
++<U0001F64E> /xf0/x9f/x99/x8e PERSON WITH POUTING FACE
++<U0001F64F> /xf0/x9f/x99/x8f PERSON WITH FOLDED HANDS
++<U0001F680> /xf0/x9f/x9a/x80 ROCKET
++<U0001F681> /xf0/x9f/x9a/x81 HELICOPTER
++<U0001F682> /xf0/x9f/x9a/x82 STEAM LOCOMOTIVE
++<U0001F683> /xf0/x9f/x9a/x83 RAILWAY CAR
++<U0001F684> /xf0/x9f/x9a/x84 HIGH-SPEED TRAIN
++<U0001F685> /xf0/x9f/x9a/x85 HIGH-SPEED TRAIN WITH BULLET NOSE
++<U0001F686> /xf0/x9f/x9a/x86 TRAIN
++<U0001F687> /xf0/x9f/x9a/x87 METRO
++<U0001F688> /xf0/x9f/x9a/x88 LIGHT RAIL
++<U0001F689> /xf0/x9f/x9a/x89 STATION
++<U0001F68A> /xf0/x9f/x9a/x8a TRAM
++<U0001F68B> /xf0/x9f/x9a/x8b TRAM CAR
++<U0001F68C> /xf0/x9f/x9a/x8c BUS
++<U0001F68D> /xf0/x9f/x9a/x8d ONCOMING BUS
++<U0001F68E> /xf0/x9f/x9a/x8e TROLLEYBUS
++<U0001F68F> /xf0/x9f/x9a/x8f BUS STOP
++<U0001F690> /xf0/x9f/x9a/x90 MINIBUS
++<U0001F691> /xf0/x9f/x9a/x91 AMBULANCE
++<U0001F692> /xf0/x9f/x9a/x92 FIRE ENGINE
++<U0001F693> /xf0/x9f/x9a/x93 POLICE CAR
++<U0001F694> /xf0/x9f/x9a/x94 ONCOMING POLICE CAR
++<U0001F695> /xf0/x9f/x9a/x95 TAXI
++<U0001F696> /xf0/x9f/x9a/x96 ONCOMING TAXI
++<U0001F697> /xf0/x9f/x9a/x97 AUTOMOBILE
++<U0001F698> /xf0/x9f/x9a/x98 ONCOMING AUTOMOBILE
++<U0001F699> /xf0/x9f/x9a/x99 RECREATIONAL VEHICLE
++<U0001F69A> /xf0/x9f/x9a/x9a DELIVERY TRUCK
++<U0001F69B> /xf0/x9f/x9a/x9b ARTICULATED LORRY
++<U0001F69C> /xf0/x9f/x9a/x9c TRACTOR
++<U0001F69D> /xf0/x9f/x9a/x9d MONORAIL
++<U0001F69E> /xf0/x9f/x9a/x9e MOUNTAIN RAILWAY
++<U0001F69F> /xf0/x9f/x9a/x9f SUSPENSION RAILWAY
++<U0001F6A0> /xf0/x9f/x9a/xa0 MOUNTAIN CABLEWAY
++<U0001F6A1> /xf0/x9f/x9a/xa1 AERIAL TRAMWAY
++<U0001F6A2> /xf0/x9f/x9a/xa2 SHIP
++<U0001F6A3> /xf0/x9f/x9a/xa3 ROWBOAT
++<U0001F6A4> /xf0/x9f/x9a/xa4 SPEEDBOAT
++<U0001F6A5> /xf0/x9f/x9a/xa5 HORIZONTAL TRAFFIC LIGHT
++<U0001F6A6> /xf0/x9f/x9a/xa6 VERTICAL TRAFFIC LIGHT
++<U0001F6A7> /xf0/x9f/x9a/xa7 CONSTRUCTION SIGN
++<U0001F6A8> /xf0/x9f/x9a/xa8 POLICE CARS REVOLVING LIGHT
++<U0001F6A9> /xf0/x9f/x9a/xa9 TRIANGULAR FLAG ON POST
++<U0001F6AA> /xf0/x9f/x9a/xaa DOOR
++<U0001F6AB> /xf0/x9f/x9a/xab NO ENTRY SIGN
++<U0001F6AC> /xf0/x9f/x9a/xac SMOKING SYMBOL
++<U0001F6AD> /xf0/x9f/x9a/xad NO SMOKING SYMBOL
++<U0001F6AE> /xf0/x9f/x9a/xae PUT LITTER IN ITS PLACE SYMBOL
++<U0001F6AF> /xf0/x9f/x9a/xaf DO NOT LITTER SYMBOL
++<U0001F6B0> /xf0/x9f/x9a/xb0 POTABLE WATER SYMBOL
++<U0001F6B1> /xf0/x9f/x9a/xb1 NON-POTABLE WATER SYMBOL
++<U0001F6B2> /xf0/x9f/x9a/xb2 BICYCLE
++<U0001F6B3> /xf0/x9f/x9a/xb3 NO BICYCLES
++<U0001F6B4> /xf0/x9f/x9a/xb4 BICYCLIST
++<U0001F6B5> /xf0/x9f/x9a/xb5 MOUNTAIN BICYCLIST
++<U0001F6B6> /xf0/x9f/x9a/xb6 PEDESTRIAN
++<U0001F6B7> /xf0/x9f/x9a/xb7 NO PEDESTRIANS
++<U0001F6B8> /xf0/x9f/x9a/xb8 CHILDREN CROSSING
++<U0001F6B9> /xf0/x9f/x9a/xb9 MENS SYMBOL
++<U0001F6BA> /xf0/x9f/x9a/xba WOMENS SYMBOL
++<U0001F6BB> /xf0/x9f/x9a/xbb RESTROOM
++<U0001F6BC> /xf0/x9f/x9a/xbc BABY SYMBOL
++<U0001F6BD> /xf0/x9f/x9a/xbd TOILET
++<U0001F6BE> /xf0/x9f/x9a/xbe WATER CLOSET
++<U0001F6BF> /xf0/x9f/x9a/xbf SHOWER
++<U0001F6C0> /xf0/x9f/x9b/x80 BATH
++<U0001F6C1> /xf0/x9f/x9b/x81 BATHTUB
++<U0001F6C2> /xf0/x9f/x9b/x82 PASSPORT CONTROL
++<U0001F6C3> /xf0/x9f/x9b/x83 CUSTOMS
++<U0001F6C4> /xf0/x9f/x9b/x84 BAGGAGE CLAIM
++<U0001F6C5> /xf0/x9f/x9b/x85 LEFT LUGGAGE
++<U0001F700> /xf0/x9f/x9c/x80 ALCHEMICAL SYMBOL FOR QUINTESSENCE
++<U0001F701> /xf0/x9f/x9c/x81 ALCHEMICAL SYMBOL FOR AIR
++<U0001F702> /xf0/x9f/x9c/x82 ALCHEMICAL SYMBOL FOR FIRE
++<U0001F703> /xf0/x9f/x9c/x83 ALCHEMICAL SYMBOL FOR EARTH
++<U0001F704> /xf0/x9f/x9c/x84 ALCHEMICAL SYMBOL FOR WATER
++<U0001F705> /xf0/x9f/x9c/x85 ALCHEMICAL SYMBOL FOR AQUAFORTIS
++<U0001F706> /xf0/x9f/x9c/x86 ALCHEMICAL SYMBOL FOR AQUA REGIA
++<U0001F707> /xf0/x9f/x9c/x87 ALCHEMICAL SYMBOL FOR AQUA REGIA-2
++<U0001F708> /xf0/x9f/x9c/x88 ALCHEMICAL SYMBOL FOR AQUA VITAE
++<U0001F709> /xf0/x9f/x9c/x89 ALCHEMICAL SYMBOL FOR AQUA VITAE-2
++<U0001F70A> /xf0/x9f/x9c/x8a ALCHEMICAL SYMBOL FOR VINEGAR
++<U0001F70B> /xf0/x9f/x9c/x8b ALCHEMICAL SYMBOL FOR VINEGAR-2
++<U0001F70C> /xf0/x9f/x9c/x8c ALCHEMICAL SYMBOL FOR VINEGAR-3
++<U0001F70D> /xf0/x9f/x9c/x8d ALCHEMICAL SYMBOL FOR SULFUR
++<U0001F70E> /xf0/x9f/x9c/x8e ALCHEMICAL SYMBOL FOR PHILOSOPHERS SULFUR
++<U0001F70F> /xf0/x9f/x9c/x8f ALCHEMICAL SYMBOL FOR BLACK SULFUR
++<U0001F710> /xf0/x9f/x9c/x90 ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE
++<U0001F711> /xf0/x9f/x9c/x91 ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-2
++<U0001F712> /xf0/x9f/x9c/x92 ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-3
++<U0001F713> /xf0/x9f/x9c/x93 ALCHEMICAL SYMBOL FOR CINNABAR
++<U0001F714> /xf0/x9f/x9c/x94 ALCHEMICAL SYMBOL FOR SALT
++<U0001F715> /xf0/x9f/x9c/x95 ALCHEMICAL SYMBOL FOR NITRE
++<U0001F716> /xf0/x9f/x9c/x96 ALCHEMICAL SYMBOL FOR VITRIOL
++<U0001F717> /xf0/x9f/x9c/x97 ALCHEMICAL SYMBOL FOR VITRIOL-2
++<U0001F718> /xf0/x9f/x9c/x98 ALCHEMICAL SYMBOL FOR ROCK SALT
++<U0001F719> /xf0/x9f/x9c/x99 ALCHEMICAL SYMBOL FOR ROCK SALT-2
++<U0001F71A> /xf0/x9f/x9c/x9a ALCHEMICAL SYMBOL FOR GOLD
++<U0001F71B> /xf0/x9f/x9c/x9b ALCHEMICAL SYMBOL FOR SILVER
++<U0001F71C> /xf0/x9f/x9c/x9c ALCHEMICAL SYMBOL FOR IRON ORE
++<U0001F71D> /xf0/x9f/x9c/x9d ALCHEMICAL SYMBOL FOR IRON ORE-2
++<U0001F71E> /xf0/x9f/x9c/x9e ALCHEMICAL SYMBOL FOR CROCUS OF IRON
++<U0001F71F> /xf0/x9f/x9c/x9f ALCHEMICAL SYMBOL FOR REGULUS OF IRON
++<U0001F720> /xf0/x9f/x9c/xa0 ALCHEMICAL SYMBOL FOR COPPER ORE
++<U0001F721> /xf0/x9f/x9c/xa1 ALCHEMICAL SYMBOL FOR IRON-COPPER ORE
++<U0001F722> /xf0/x9f/x9c/xa2 ALCHEMICAL SYMBOL FOR SUBLIMATE OF COPPER
++<U0001F723> /xf0/x9f/x9c/xa3 ALCHEMICAL SYMBOL FOR CROCUS OF COPPER
++<U0001F724> /xf0/x9f/x9c/xa4 ALCHEMICAL SYMBOL FOR CROCUS OF COPPER-2
++<U0001F725> /xf0/x9f/x9c/xa5 ALCHEMICAL SYMBOL FOR COPPER ANTIMONIATE
++<U0001F726> /xf0/x9f/x9c/xa6 ALCHEMICAL SYMBOL FOR SALT OF COPPER ANTIMONIATE
++<U0001F727> /xf0/x9f/x9c/xa7 ALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF COPPER
++<U0001F728> /xf0/x9f/x9c/xa8 ALCHEMICAL SYMBOL FOR VERDIGRIS
++<U0001F729> /xf0/x9f/x9c/xa9 ALCHEMICAL SYMBOL FOR TIN ORE
++<U0001F72A> /xf0/x9f/x9c/xaa ALCHEMICAL SYMBOL FOR LEAD ORE
++<U0001F72B> /xf0/x9f/x9c/xab ALCHEMICAL SYMBOL FOR ANTIMONY ORE
++<U0001F72C> /xf0/x9f/x9c/xac ALCHEMICAL SYMBOL FOR SUBLIMATE OF ANTIMONY
++<U0001F72D> /xf0/x9f/x9c/xad ALCHEMICAL SYMBOL FOR SALT OF ANTIMONY
++<U0001F72E> /xf0/x9f/x9c/xae ALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF ANTIMONY
++<U0001F72F> /xf0/x9f/x9c/xaf ALCHEMICAL SYMBOL FOR VINEGAR OF ANTIMONY
++<U0001F730> /xf0/x9f/x9c/xb0 ALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY
++<U0001F731> /xf0/x9f/x9c/xb1 ALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY-2
++<U0001F732> /xf0/x9f/x9c/xb2 ALCHEMICAL SYMBOL FOR REGULUS
++<U0001F733> /xf0/x9f/x9c/xb3 ALCHEMICAL SYMBOL FOR REGULUS-2
++<U0001F734> /xf0/x9f/x9c/xb4 ALCHEMICAL SYMBOL FOR REGULUS-3
++<U0001F735> /xf0/x9f/x9c/xb5 ALCHEMICAL SYMBOL FOR REGULUS-4
++<U0001F736> /xf0/x9f/x9c/xb6 ALCHEMICAL SYMBOL FOR ALKALI
++<U0001F737> /xf0/x9f/x9c/xb7 ALCHEMICAL SYMBOL FOR ALKALI-2
++<U0001F738> /xf0/x9f/x9c/xb8 ALCHEMICAL SYMBOL FOR MARCASITE
++<U0001F739> /xf0/x9f/x9c/xb9 ALCHEMICAL SYMBOL FOR SAL-AMMONIAC
++<U0001F73A> /xf0/x9f/x9c/xba ALCHEMICAL SYMBOL FOR ARSENIC
++<U0001F73B> /xf0/x9f/x9c/xbb ALCHEMICAL SYMBOL FOR REALGAR
++<U0001F73C> /xf0/x9f/x9c/xbc ALCHEMICAL SYMBOL FOR REALGAR-2
++<U0001F73D> /xf0/x9f/x9c/xbd ALCHEMICAL SYMBOL FOR AURIPIGMENT
++<U0001F73E> /xf0/x9f/x9c/xbe ALCHEMICAL SYMBOL FOR BISMUTH ORE
++<U0001F73F> /xf0/x9f/x9c/xbf ALCHEMICAL SYMBOL FOR TARTAR
++<U0001F740> /xf0/x9f/x9d/x80 ALCHEMICAL SYMBOL FOR TARTAR-2
++<U0001F741> /xf0/x9f/x9d/x81 ALCHEMICAL SYMBOL FOR QUICK LIME
++<U0001F742> /xf0/x9f/x9d/x82 ALCHEMICAL SYMBOL FOR BORAX
++<U0001F743> /xf0/x9f/x9d/x83 ALCHEMICAL SYMBOL FOR BORAX-2
++<U0001F744> /xf0/x9f/x9d/x84 ALCHEMICAL SYMBOL FOR BORAX-3
++<U0001F745> /xf0/x9f/x9d/x85 ALCHEMICAL SYMBOL FOR ALUM
++<U0001F746> /xf0/x9f/x9d/x86 ALCHEMICAL SYMBOL FOR OIL
++<U0001F747> /xf0/x9f/x9d/x87 ALCHEMICAL SYMBOL FOR SPIRIT
++<U0001F748> /xf0/x9f/x9d/x88 ALCHEMICAL SYMBOL FOR TINCTURE
++<U0001F749> /xf0/x9f/x9d/x89 ALCHEMICAL SYMBOL FOR GUM
++<U0001F74A> /xf0/x9f/x9d/x8a ALCHEMICAL SYMBOL FOR WAX
++<U0001F74B> /xf0/x9f/x9d/x8b ALCHEMICAL SYMBOL FOR POWDER
++<U0001F74C> /xf0/x9f/x9d/x8c ALCHEMICAL SYMBOL FOR CALX
++<U0001F737> /xf0/x9f/x9c/xb7 ALCHEMICAL SYMBOL FOR ALKALI-2
++<U0001F738> /xf0/x9f/x9c/xb8 ALCHEMICAL SYMBOL FOR MARCASITE
++<U0001F739> /xf0/x9f/x9c/xb9 ALCHEMICAL SYMBOL FOR SAL-AMMONIAC
++<U0001F73A> /xf0/x9f/x9c/xba ALCHEMICAL SYMBOL FOR ARSENIC
++<U0001F73B> /xf0/x9f/x9c/xbb ALCHEMICAL SYMBOL FOR REALGAR
++<U0001F73C> /xf0/x9f/x9c/xbc ALCHEMICAL SYMBOL FOR REALGAR-2
++<U0001F73D> /xf0/x9f/x9c/xbd ALCHEMICAL SYMBOL FOR AURIPIGMENT
++<U0001F73E> /xf0/x9f/x9c/xbe ALCHEMICAL SYMBOL FOR BISMUTH ORE
++<U0001F73F> /xf0/x9f/x9c/xbf ALCHEMICAL SYMBOL FOR TARTAR
++<U0001F740> /xf0/x9f/x9d/x80 ALCHEMICAL SYMBOL FOR TARTAR-2
++<U0001F741> /xf0/x9f/x9d/x81 ALCHEMICAL SYMBOL FOR QUICK LIME
++<U0001F742> /xf0/x9f/x9d/x82 ALCHEMICAL SYMBOL FOR BORAX
++<U0001F743> /xf0/x9f/x9d/x83 ALCHEMICAL SYMBOL FOR BORAX-2
++<U0001F744> /xf0/x9f/x9d/x84 ALCHEMICAL SYMBOL FOR BORAX-3
++<U0001F745> /xf0/x9f/x9d/x85 ALCHEMICAL SYMBOL FOR ALUM
++<U0001F746> /xf0/x9f/x9d/x86 ALCHEMICAL SYMBOL FOR OIL
++<U0001F747> /xf0/x9f/x9d/x87 ALCHEMICAL SYMBOL FOR SPIRIT
++<U0001F748> /xf0/x9f/x9d/x88 ALCHEMICAL SYMBOL FOR TINCTURE
++<U0001F749> /xf0/x9f/x9d/x89 ALCHEMICAL SYMBOL FOR GUM
++<U0001F74A> /xf0/x9f/x9d/x8a ALCHEMICAL SYMBOL FOR WAX
++<U0001F74B> /xf0/x9f/x9d/x8b ALCHEMICAL SYMBOL FOR POWDER
++<U0001F74C> /xf0/x9f/x9d/x8c ALCHEMICAL SYMBOL FOR CALX
++<U0001F74D> /xf0/x9f/x9d/x8d ALCHEMICAL SYMBOL FOR TUTTY
++<U0001F74E> /xf0/x9f/x9d/x8e ALCHEMICAL SYMBOL FOR CAPUT MORTUUM
++<U0001F74F> /xf0/x9f/x9d/x8f ALCHEMICAL SYMBOL FOR SCEPTER OF JOVE
++<U0001F750> /xf0/x9f/x9d/x90 ALCHEMICAL SYMBOL FOR CADUCEUS
++<U0001F751> /xf0/x9f/x9d/x91 ALCHEMICAL SYMBOL FOR TRIDENT
++<U0001F752> /xf0/x9f/x9d/x92 ALCHEMICAL SYMBOL FOR STARRED TRIDENT
++<U0001F753> /xf0/x9f/x9d/x93 ALCHEMICAL SYMBOL FOR LODESTONE
++<U0001F754> /xf0/x9f/x9d/x94 ALCHEMICAL SYMBOL FOR SOAP
++<U0001F755> /xf0/x9f/x9d/x95 ALCHEMICAL SYMBOL FOR URINE
++<U0001F756> /xf0/x9f/x9d/x96 ALCHEMICAL SYMBOL FOR HORSE DUNG
++<U0001F757> /xf0/x9f/x9d/x97 ALCHEMICAL SYMBOL FOR ASHES
++<U0001F758> /xf0/x9f/x9d/x98 ALCHEMICAL SYMBOL FOR POT ASHES
++<U0001F759> /xf0/x9f/x9d/x99 ALCHEMICAL SYMBOL FOR BRICK
++<U0001F75A> /xf0/x9f/x9d/x9a ALCHEMICAL SYMBOL FOR POWDERED BRICK
++<U0001F75B> /xf0/x9f/x9d/x9b ALCHEMICAL SYMBOL FOR AMALGAM
++<U0001F75C> /xf0/x9f/x9d/x9c ALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM
++<U0001F75D> /xf0/x9f/x9d/x9d ALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM-2
++<U0001F75E> /xf0/x9f/x9d/x9e ALCHEMICAL SYMBOL FOR SUBLIMATION
++<U0001F75F> /xf0/x9f/x9d/x9f ALCHEMICAL SYMBOL FOR PRECIPITATE
++<U0001F760> /xf0/x9f/x9d/xa0 ALCHEMICAL SYMBOL FOR DISTILL
++<U0001F761> /xf0/x9f/x9d/xa1 ALCHEMICAL SYMBOL FOR DISSOLVE
++<U0001F762> /xf0/x9f/x9d/xa2 ALCHEMICAL SYMBOL FOR DISSOLVE-2
++<U0001F763> /xf0/x9f/x9d/xa3 ALCHEMICAL SYMBOL FOR PURIFY
++<U0001F764> /xf0/x9f/x9d/xa4 ALCHEMICAL SYMBOL FOR PUTREFACTION
++<U0001F765> /xf0/x9f/x9d/xa5 ALCHEMICAL SYMBOL FOR CRUCIBLE
++<U0001F766> /xf0/x9f/x9d/xa6 ALCHEMICAL SYMBOL FOR CRUCIBLE-2
++<U0001F767> /xf0/x9f/x9d/xa7 ALCHEMICAL SYMBOL FOR CRUCIBLE-3
++<U0001F768> /xf0/x9f/x9d/xa8 ALCHEMICAL SYMBOL FOR CRUCIBLE-4
++<U0001F769> /xf0/x9f/x9d/xa9 ALCHEMICAL SYMBOL FOR CRUCIBLE-5
++<U0001F76A> /xf0/x9f/x9d/xaa ALCHEMICAL SYMBOL FOR ALEMBIC
++<U0001F76B> /xf0/x9f/x9d/xab ALCHEMICAL SYMBOL FOR BATH OF MARY
++<U0001F76C> /xf0/x9f/x9d/xac ALCHEMICAL SYMBOL FOR BATH OF VAPOURS
++<U0001F76D> /xf0/x9f/x9d/xad ALCHEMICAL SYMBOL FOR RETORT
++<U0001F76E> /xf0/x9f/x9d/xae ALCHEMICAL SYMBOL FOR HOUR
++<U0001F76F> /xf0/x9f/x9d/xaf ALCHEMICAL SYMBOL FOR NIGHT
++<U0001F770> /xf0/x9f/x9d/xb0 ALCHEMICAL SYMBOL FOR DAY-NIGHT
++<U0001F771> /xf0/x9f/x9d/xb1 ALCHEMICAL SYMBOL FOR MONTH
++<U0001F772> /xf0/x9f/x9d/xb2 ALCHEMICAL SYMBOL FOR HALF DRAM
++<U0001F773> /xf0/x9f/x9d/xb3 ALCHEMICAL SYMBOL FOR HALF OUNCE
+ <U00020000>..<U0002003F> /xf0/xa0/x80/x80 <CJK>
+ <U00020040>..<U0002007F> /xf0/xa0/x81/x80 <CJK>
+ <U00020080>..<U000200BF> /xf0/xa0/x82/x80 <CJK>
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/ar_IN
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/ar_IN
++++ glibc-2.12-2-gc4ccff1/localedata/locales/ar_IN
+@@ -52,7 +52,7 @@ LC_MONETARY
+ % for IBM Class for Unicode.
+ %
+ int_curr_symbol       "<U0049><U004E><U0052><U0020>"
+-currency_symbol       "<U20A8>"
++currency_symbol       "<U20B9>"
+ mon_decimal_point     "<U002E>"
+ mon_thousands_sep     "<U002C>"
+ mon_grouping          3;2
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/as_IN
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/as_IN
++++ glibc-2.12-2-gc4ccff1/localedata/locales/as_IN
+@@ -51,7 +51,7 @@ END LC_NUMERIC
+ %%%%%%%%%%%%%
+ LC_MONETARY
+ int_curr_symbol       "<U0049><U004E><U0052><U0020>"
+-currency_symbol       "<U099F><U0995><U09BE>"
++currency_symbol       "<U20B9>"
+ mon_decimal_point     "<U002E>"
+ mon_thousands_sep     "<U002C>"
+ mon_grouping          3;2
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/bn_IN
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/bn_IN
++++ glibc-2.12-2-gc4ccff1/localedata/locales/bn_IN
+@@ -53,7 +53,7 @@ LC_MONETARY
+ % for IBM Class for Unicode.
+ %
+ int_curr_symbol       "<U0049><U004E><U0052><U0020>"
+-currency_symbol       "<U099F><U09BE><U0995><U09BE>"
++currency_symbol       "<U20B9>"
+ mon_decimal_point     "<U002E>"
+ mon_thousands_sep     "<U002C>"
+ mon_grouping          2;3
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/en_IN
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/en_IN
++++ glibc-2.12-2-gc4ccff1/localedata/locales/en_IN
+@@ -52,7 +52,7 @@ LC_MONETARY
+ % for IBM Class for Unicode.
+ %
+ int_curr_symbol       "<U0049><U004E><U0052><U0020>"
+-currency_symbol       "<U20A8>"
++currency_symbol       "<U20B9>"
+ mon_decimal_point     "<U002E>"
+ mon_thousands_sep     "<U002C>"
+ mon_grouping          3;2
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/gu_IN
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/gu_IN
++++ glibc-2.12-2-gc4ccff1/localedata/locales/gu_IN
+@@ -71,7 +71,7 @@ LC_MONETARY
+ % for IBM Class for Unicode/Java
+ %
+ int_curr_symbol       "<U0049><U004E><U0052><U0020>"
+-currency_symbol       "<U0AB0><U0AC1>"
++currency_symbol       "<U20B9>"
+ mon_decimal_point     "<U002E>"
+ mon_thousands_sep     "<U002C>"
+ mon_grouping          3
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/hi_IN
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/hi_IN
++++ glibc-2.12-2-gc4ccff1/localedata/locales/hi_IN
+@@ -69,7 +69,7 @@ LC_MONETARY
+ % for IBM Class for Unicode/Java
+ %
+ int_curr_symbol       "<U0049><U004E><U0052><U0020>"
+-currency_symbol       "<U0930><U0942>"
++currency_symbol       "<U20B9>"
+ mon_decimal_point     "<U002E>"
+ mon_thousands_sep     "<U002C>"
+ mon_grouping          3
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/kn_IN
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/kn_IN
++++ glibc-2.12-2-gc4ccff1/localedata/locales/kn_IN
+@@ -71,8 +71,7 @@ LC_MONETARY
+ % for IBM Class for Unicode/Java
+ %
+ int_curr_symbol       "<U0049><U004E><U0052><U0020>"
+-% *** Change this to reflect Kannada , in Dev it is RA with VS U attached
+-currency_symbol       "<U0CB0><U0CC2>"
++currency_symbol       "<U20B9>"
+ mon_decimal_point     "<U002E>"
+ mon_thousands_sep     "<U002C>"
+ mon_grouping          3
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/kok_IN
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/kok_IN
++++ glibc-2.12-2-gc4ccff1/localedata/locales/kok_IN
+@@ -49,7 +49,7 @@ LC_MONETARY
+ % for IBM Class for Unicode.
+ %
+ int_curr_symbol       "<U0049><U004E><U0052><U0020>"
+-currency_symbol       "<U0930><U0941>"
++currency_symbol       "<U20B9>"
+ mon_decimal_point     "<U002E>"
+ mon_thousands_sep     "<U002C>"
+ mon_grouping          3
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/ks_IN
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/ks_IN
++++ glibc-2.12-2-gc4ccff1/localedata/locales/ks_IN
+@@ -57,7 +57,7 @@ LC_MONETARY
+ % for IBM Class for Unicode.
+ %
+ int_curr_symbol       "<U0049><U004E><U0052><U0020>"
+-currency_symbol       "<U20A8>"
++currency_symbol       "<U20B9>"
+ mon_decimal_point     "<U002E>"
+ mon_thousands_sep     "<U002C>"
+ mon_grouping          3
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/ml_IN
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/ml_IN
++++ glibc-2.12-2-gc4ccff1/localedata/locales/ml_IN
+@@ -69,7 +69,7 @@ LC_MONETARY
+ % for IBM Class for Unicode.
+ %
+ int_curr_symbol     "<U0049><U004E><U0052><U0020>"
+-currency_symbol     "<U0D30><U0D42>"
++currency_symbol     "<U20B9>"
+ mon_decimal_point     "<U002E>"
+ mon_thousands_sep     "<U002C>"
+ mon_grouping          3;2
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/mr_IN
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/mr_IN
++++ glibc-2.12-2-gc4ccff1/localedata/locales/mr_IN
+@@ -70,7 +70,7 @@ LC_MONETARY
+ % for IBM Class for Unicode.
+ %
+ int_curr_symbol       "<U0049><U004E><U0052><U0020>"
+-currency_symbol       "<U0930><U0941>"
++currency_symbol       "<U20B9>"
+ mon_decimal_point     "<U002E>"
+ mon_thousands_sep     "<U002C>"
+ mon_grouping          3
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/or_IN
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/or_IN
++++ glibc-2.12-2-gc4ccff1/localedata/locales/or_IN
+@@ -607,7 +607,7 @@ END LC_NUMERIC
+ %%%%%%%%%%%%%
+ LC_MONETARY
+ int_curr_symbol       "<U0049><U004E><U0052><U0020>"
+-currency_symbol       "<U003D><U0030><U0023><U0052><U0073><U002E><U007C><U0031><U0023><U0052><U0065><U002E><U007C><U0031><U003C><U0052><U0073><U002E>"
++currency_symbol       "<U20B9>"
+ mon_decimal_point     "<U002E>"
+ mon_thousands_sep     "<U002C>"
+ mon_grouping          3;2
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/pa_IN
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/pa_IN
++++ glibc-2.12-2-gc4ccff1/localedata/locales/pa_IN
+@@ -66,7 +66,7 @@ END LC_COLLATE
+ LC_MONETARY
+ % This is the POSIX Locale definition the LC_MONETARY category.
+ int_curr_symbol       "<U0049><U004E><U0052><U0020>"
+-currency_symbol       "<U0A30><U0A41><U0A2A><U0A0F>"
++currency_symbol       "<U20B9>"
+ mon_decimal_point     "<U002E>"
+ mon_thousands_sep     "<U002C>"
+ mon_grouping          3
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/sa_IN
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/sa_IN
++++ glibc-2.12-2-gc4ccff1/localedata/locales/sa_IN
+@@ -52,7 +52,7 @@ LC_MONETARY
+ % for IBM Class for Unicode/Java
+ %
+ int_curr_symbol       "<U0049><U004E><U0052><U0020>"
+-currency_symbol       "<U0930><U0942>"
++currency_symbol       "<U20B9>"
+ mon_decimal_point     "<U002E>"
+ mon_thousands_sep     "<U002C>"
+ mon_grouping          3
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/sd_IN
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/sd_IN
++++ glibc-2.12-2-gc4ccff1/localedata/locales/sd_IN
+@@ -57,7 +57,7 @@ LC_MONETARY
+ % for IBM Class for Unicode.
+ %
+ int_curr_symbol       "<U0049><U004E><U0052><U0020>"
+-currency_symbol       "<U20A8>"
++currency_symbol       "<U20B9>"
+ mon_decimal_point     "<U002E>"
+ mon_thousands_sep     "<U002C>"
+ mon_grouping          3
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/ta_IN
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/ta_IN
++++ glibc-2.12-2-gc4ccff1/localedata/locales/ta_IN
+@@ -74,7 +74,7 @@ LC_MONETARY
+ % for IBM Class for Unicode.
+ %
+ int_curr_symbol       "<U0049><U004E><U0052><U0020>"
+-currency_symbol       "<U20A8>"
++currency_symbol       "<U20B9>"
+ mon_decimal_point     "<U002E>"
+ mon_thousands_sep     "<U002C>"
+ mon_grouping          3;2
+Index: glibc-2.12-2-gc4ccff1/localedata/locales/te_IN
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/localedata/locales/te_IN
++++ glibc-2.12-2-gc4ccff1/localedata/locales/te_IN
+@@ -73,7 +73,7 @@ LC_MONETARY
+ % for IBM Class for Unicode.
+ %
+ int_curr_symbol       "<U0049><U004E><U0052><U0020>"
+-currency_symbol       "<U0C30><U0C42><U002E>"
++currency_symbol       "<U20B9>"
+ mon_decimal_point     "<U002E>"
+ mon_thousands_sep     "<U002C>"
+ mon_grouping          3;2
diff --git a/SOURCES/glibc-rh694386.patch b/SOURCES/glibc-rh694386.patch
new file mode 100644
index 0000000..3932eb8
--- /dev/null
+++ b/SOURCES/glibc-rh694386.patch
@@ -0,0 +1,86 @@
+2011-03-28  Andreas Schwab  <schwab@linux-m68k.org>
+
+	* sysdeps/powerpc/powerpc32/power4/strncmp.S: Don't read past
+	differing bytes.
+	* sysdeps/powerpc/powerpc64/power4/strncmp.S: Likewise.
+
+diff --git a/sysdeps/powerpc/powerpc32/power4/strncmp.S b/sysdeps/powerpc/powerpc32/power4/strncmp.S
+index fc0835e..f5d47af 100644
+--- a/sysdeps/powerpc/powerpc32/power4/strncmp.S
++++ b/sysdeps/powerpc/powerpc32/power4/strncmp.S
+@@ -139,30 +139,31 @@ L(u1):
+ 	bdz	L(u4)
+ 	cmpw	rWORD1, rWORD2
+ 	beq-	cr1, L(u4)
++	bne-	L(u4)
+ 	lbzu    rWORD3, 1(rSTR1)
+ 	lbzu	rWORD4, 1(rSTR2)
+-	bne-	L(u4)
+ 	cmpwi	cr1, rWORD3, 0
+ 	bdz	L(u3)
+ 	cmpw	rWORD3, rWORD4
+ 	beq-    cr1, L(u3)
++	bne-    L(u3)
+ 	lbzu	rWORD1, 1(rSTR1)
+ 	lbzu	rWORD2, 1(rSTR2)
+-	bne-    L(u3)
+ 	cmpwi	cr1, rWORD1, 0
+ 	bdz	L(u4)
+ 	cmpw	rWORD1, rWORD2
+ 	beq-	cr1, L(u4)
++	bne-	L(u4)
+ 	lbzu	rWORD3, 1(rSTR1)
+ 	lbzu	rWORD4, 1(rSTR2)
+-	bne-	L(u4)
+ 	cmpwi	cr1, rWORD3, 0
+ 	bdz	L(u3)
+ 	cmpw	rWORD3, rWORD4
+ 	beq-    cr1, L(u3)
++	bne-	L(u3)
+ 	lbzu	rWORD1, 1(rSTR1)
+ 	lbzu	rWORD2, 1(rSTR2)
+-	beq+    L(u1)
++	b       L(u1)
+ 
+ L(u3):  sub     rRTN, rWORD3, rWORD4
+         blr
+diff --git a/sysdeps/powerpc/powerpc64/power4/strncmp.S b/sysdeps/powerpc/powerpc64/power4/strncmp.S
+index 7a1665d..94ae85b 100644
+--- a/sysdeps/powerpc/powerpc64/power4/strncmp.S
++++ b/sysdeps/powerpc/powerpc64/power4/strncmp.S
+@@ -143,30 +143,31 @@ L(u1):
+ 	bdz	L(u4)
+ 	cmpd	rWORD1, rWORD2
+ 	beq-	cr1, L(u4)
++	bne-	L(u4)
+ 	lbzu    rWORD3, 1(rSTR1)
+ 	lbzu	rWORD4, 1(rSTR2)
+-	bne-	L(u4)
+ 	cmpdi	cr1, rWORD3, 0
+ 	bdz	L(u3)
+ 	cmpd	rWORD3, rWORD4
+ 	beq-    cr1, L(u3)
++	bne-    L(u3)
+ 	lbzu	rWORD1, 1(rSTR1)
+ 	lbzu	rWORD2, 1(rSTR2)
+-	bne-    L(u3)
+ 	cmpdi	cr1, rWORD1, 0
+ 	bdz	L(u4)
+ 	cmpd	rWORD1, rWORD2
+ 	beq-	cr1, L(u4)
++	bne-	L(u4)
+ 	lbzu	rWORD3, 1(rSTR1)
+ 	lbzu	rWORD4, 1(rSTR2)
+-	bne-	L(u4)
+ 	cmpdi	cr1, rWORD3, 0
+ 	bdz	L(u3)
+ 	cmpd	rWORD3, rWORD4
+ 	beq-    cr1, L(u3)
++	bne-    L(u3)
+ 	lbzu	rWORD1, 1(rSTR1)
+ 	lbzu	rWORD2, 1(rSTR2)
+-	beq+    L(u1)
++	b       L(u1)
+ 
+ L(u3):  sub     rRTN, rWORD3, rWORD4
+         blr
diff --git a/SOURCES/glibc-rh695595.patch b/SOURCES/glibc-rh695595.patch
new file mode 100644
index 0000000..0e6c72b
--- /dev/null
+++ b/SOURCES/glibc-rh695595.patch
@@ -0,0 +1,17 @@
+2010-11-11  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* sysdeps/x86_64/multiarch/init-arch.c (__init_cpu_features):
+	Support Intel processor model 6 and model 0x2c.
+
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/init-arch.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/multiarch/init-arch.c
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/init-arch.c
+@@ -81,6 +81,7 @@ __init_cpu_features (void)
+ 	    case 0x1e:
+ 	    case 0x1f:
+ 	    case 0x25:
++	    case 0x2c:
+ 	    case 0x2e:
+ 	    case 0x2f:
+ 	      /* Rep string instructions are fast on Intel Core i3, i5
diff --git a/SOURCES/glibc-rh695963.patch b/SOURCES/glibc-rh695963.patch
new file mode 100644
index 0000000..e8053dc
--- /dev/null
+++ b/SOURCES/glibc-rh695963.patch
@@ -0,0 +1,1284 @@
+2010-08-27  Ulrich Drepper  <drepper@redhat.com>
+
+	* sysdeps/x86_64/multiarch/strlen-no-bsf.S: Move to .text.slow section.
+
+	* sysdeps/x86_64/strlen.S: Minimal code improvement.
+
+2010-08-26  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* sysdeps/x86_64/strlen.S: Unroll the loop.
+	* sysdeps/x86_64/multiarch/Makefile (sysdep_routines): Add
+	strlen-sse2 strlen-sse2-bsf.
+	* sysdeps/x86_64/multiarch/strlen.S ((strlen): Return
+	__strlen_no_bsf if bit_Slow_BSF is set.
+	(__strlen_sse42): Removed.
+	* sysdeps/x86_64/multiarch/strlen-no-bsf.S: New file.
+	* sysdeps/x86_64/multiarch/strlen-sse4.S: New file.
+
+2010-08-25  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* sysdeps/i386/i686/multiarch/Makefile (sysdep_routines): Add
+	strlen-sse2 strlen-sse2-bsf.
+	* sysdeps/i386/i686/multiarch/strlen.S (strlen): Return
+	__strlen_sse2_bsf if bit_Slow_BSF is unset.
+	(__strlen_sse2): Removed.
+	* sysdeps/i386/i686/multiarch/strlen-sse2-bsf.S: New file.
+	* sysdeps/i386/i686/multiarch/strlen-sse2.S: New file.
+	* sysdeps/x86_64/multiarch/init-arch.c (__init_cpu_features): Set
+	bit_Slow_BSF for Atom.
+	* sysdeps/x86_64/multiarch/init-arch.h (bit_Slow_BSF): Define.
+	(index_Slow_BSF): Define.
+	(HAS_SLOW_BSF): Define.
+
+Index: glibc-2.12-2-gc4ccff1/sysdeps/i386/i686/multiarch/Makefile
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/i386/i686/multiarch/Makefile
++++ glibc-2.12-2-gc4ccff1/sysdeps/i386/i686/multiarch/Makefile
+@@ -9,7 +9,8 @@ sysdep_routines += bzero-sse2 memset-sse
+ 		   memmove-ssse3-rep bcopy-ssse3 bcopy-ssse3-rep \
+ 		   memset-sse2-rep bzero-sse2-rep strcmp-ssse3 \
+ 		   strcmp-sse4 strncmp-c strncmp-ssse3 strncmp-sse4 \
+-		   memcmp-ssse3 memcmp-sse4 strcasestr-nonascii
++		   memcmp-ssse3 memcmp-sse4 strcasestr-nonascii \
++		   strlen-sse2 strlen-sse2-bsf
+ ifeq (yes,$(config-cflags-sse4))
+ sysdep_routines += strcspn-c strpbrk-c strspn-c strstr-c strcasestr-c
+ CFLAGS-strcspn-c.c += -msse4
+Index: glibc-2.12-2-gc4ccff1/sysdeps/i386/i686/multiarch/strlen-sse2-bsf.S
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/sysdeps/i386/i686/multiarch/strlen-sse2-bsf.S
+@@ -0,0 +1,127 @@
++/* strlen with SSE2 and BSF
++   Copyright (C) 2010 Free Software Foundation, Inc.
++   Contributed by Intel Corporation.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library 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
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++#if defined SHARED && !defined NOT_IN_libc
++
++#include <sysdep.h>
++#include "asm-syntax.h"
++
++#define CFI_PUSH(REG)						\
++  cfi_adjust_cfa_offset (4);					\
++  cfi_rel_offset (REG, 0)
++
++#define CFI_POP(REG)						\
++  cfi_adjust_cfa_offset (-4);					\
++  cfi_restore (REG)
++
++#define PUSH(REG)	pushl REG; CFI_PUSH (REG)
++#define POP(REG)	popl REG; CFI_POP (REG)
++#define PARMS		4 + 8	/* Preserve ESI and EDI.  */
++#define	STR		PARMS
++#define ENTRANCE	PUSH (%esi); PUSH (%edi); cfi_remember_state
++#define RETURN		POP (%edi); POP (%esi); ret; \
++			cfi_restore_state; cfi_remember_state
++
++	.text
++ENTRY ( __strlen_sse2_bsf)
++	ENTRANCE
++	mov	STR(%esp), %edi
++	xor	%eax, %eax
++	mov	%edi, %ecx
++	and	$0x3f, %ecx
++	pxor	%xmm0, %xmm0
++	cmp	$0x30, %ecx
++	ja	L(next)
++	movdqu	(%edi), %xmm1
++	pcmpeqb	%xmm1, %xmm0
++	pmovmskb %xmm0, %edx
++	test	%edx, %edx
++	jnz	L(exit_less16)
++	mov	%edi, %eax
++	and	$-16, %eax
++	jmp	L(align16_start)
++L(next):
++
++	mov	%edi, %eax
++	and	$-16, %eax
++	pcmpeqb	(%eax), %xmm0
++	mov	$-1, %esi
++	sub	%eax, %ecx
++	shl	%cl, %esi
++	pmovmskb %xmm0, %edx
++	and	%esi, %edx
++	jnz	L(exit)
++L(align16_start):
++	pxor	%xmm0, %xmm0
++	pxor	%xmm1, %xmm1
++	pxor	%xmm2, %xmm2
++	pxor	%xmm3, %xmm3
++	.p2align 4
++L(align16_loop):
++	pcmpeqb	16(%eax), %xmm0
++	pmovmskb %xmm0, %edx
++	test	%edx, %edx
++	jnz	L(exit16)
++
++	pcmpeqb	32(%eax), %xmm1
++	pmovmskb %xmm1, %edx
++	test	%edx, %edx
++	jnz	L(exit32)
++
++	pcmpeqb	48(%eax), %xmm2
++	pmovmskb %xmm2, %edx
++	test	%edx, %edx
++	jnz	L(exit48)
++
++	pcmpeqb	64(%eax), %xmm3
++	pmovmskb %xmm3, %edx
++	lea	64(%eax), %eax
++	test	%edx, %edx
++	jz	L(align16_loop)
++L(exit):
++	sub	%edi, %eax
++L(exit_less16):
++	bsf	%edx, %edx
++	add	%edx, %eax
++	RETURN
++L(exit16):
++	sub	%edi, %eax
++	bsf	%edx, %edx
++	add	%edx, %eax
++	add	$16, %eax
++	RETURN
++L(exit32):
++	sub	%edi, %eax
++	bsf	%edx, %edx
++	add	%edx, %eax
++	add	$32, %eax
++	RETURN
++L(exit48):
++	sub	%edi, %eax
++	bsf	%edx, %edx
++	add	%edx, %eax
++	add	$48, %eax
++	POP (%edi)
++	POP (%esi)
++	ret
++
++END ( __strlen_sse2_bsf)
++
++#endif
+Index: glibc-2.12-2-gc4ccff1/sysdeps/i386/i686/multiarch/strlen-sse2.S
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/sysdeps/i386/i686/multiarch/strlen-sse2.S
+@@ -0,0 +1,347 @@
++/* strlen with SSE2
++   Copyright (C) 2010 Free Software Foundation, Inc.
++   Contributed by Intel Corporation.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library 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
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++#if defined SHARED && !defined NOT_IN_libc
++
++#include <sysdep.h>
++#include "asm-syntax.h"
++
++#define CFI_PUSH(REG)						\
++  cfi_adjust_cfa_offset (4);					\
++  cfi_rel_offset (REG, 0)
++
++#define CFI_POP(REG)						\
++  cfi_adjust_cfa_offset (-4);					\
++  cfi_restore (REG)
++
++#define PUSH(REG)	pushl REG; CFI_PUSH (REG)
++#define POP(REG)	popl REG; CFI_POP (REG)
++#define PARMS		4
++#define	STR		PARMS
++#define ENTRANCE
++#define RETURN		ret
++
++	.text
++ENTRY (__strlen_sse2)
++	ENTRANCE
++	mov	STR(%esp), %edx
++	xor	%eax, %eax
++	cmpb	$0, (%edx)
++	jz	L(exit_tail0)
++	cmpb	$0, 1(%edx)
++	jz	L(exit_tail1)
++	cmpb	$0, 2(%edx)
++	jz	L(exit_tail2)
++	cmpb	$0, 3(%edx)
++	jz	L(exit_tail3)
++	cmpb	$0, 4(%edx)
++	jz	L(exit_tail4)
++	cmpb	$0, 5(%edx)
++	jz	L(exit_tail5)
++	cmpb	$0, 6(%edx)
++	jz	L(exit_tail6)
++	cmpb	$0, 7(%edx)
++	jz	L(exit_tail7)
++	cmpb	$0, 8(%edx)
++	jz	L(exit_tail8)
++	cmpb	$0, 9(%edx)
++	jz	L(exit_tail9)
++	cmpb	$0, 10(%edx)
++	jz	L(exit_tail10)
++	cmpb	$0, 11(%edx)
++	jz	L(exit_tail11)
++	cmpb	$0, 12(%edx)
++	jz	L(exit_tail12)
++	cmpb	$0, 13(%edx)
++	jz	L(exit_tail13)
++	cmpb	$0, 14(%edx)
++	jz	L(exit_tail14)
++	cmpb	$0, 15(%edx)
++	jz	L(exit_tail15)
++	pxor	%xmm0, %xmm0
++	mov	%edx, %eax
++	mov	%edx, %ecx
++	and	$-16, %eax
++	add	$16, %ecx
++	add	$16, %eax
++
++	pcmpeqb	(%eax), %xmm0
++	pmovmskb %xmm0, %edx
++	pxor	%xmm1, %xmm1
++	test	%edx, %edx
++	lea	16(%eax), %eax
++	jnz	L(exit)
++
++	pcmpeqb	(%eax), %xmm1
++	pmovmskb %xmm1, %edx
++	pxor	%xmm2, %xmm2
++	test	%edx, %edx
++	lea	16(%eax), %eax
++	jnz	L(exit)
++
++
++	pcmpeqb	(%eax), %xmm2
++	pmovmskb %xmm2, %edx
++	pxor	%xmm3, %xmm3
++	test	%edx, %edx
++	lea	16(%eax), %eax
++	jnz	L(exit)
++
++	pcmpeqb	(%eax), %xmm3
++	pmovmskb %xmm3, %edx
++	test	%edx, %edx
++	lea	16(%eax), %eax
++	jnz	L(exit)
++
++	pcmpeqb	(%eax), %xmm0
++	pmovmskb %xmm0, %edx
++	test	%edx, %edx
++	lea	16(%eax), %eax
++	jnz	L(exit)
++
++	pcmpeqb	(%eax), %xmm1
++	pmovmskb %xmm1, %edx
++	test	%edx, %edx
++	lea	16(%eax), %eax
++	jnz	L(exit)
++
++	pcmpeqb	(%eax), %xmm2
++	pmovmskb %xmm2, %edx
++	test	%edx, %edx
++	lea	16(%eax), %eax
++	jnz	L(exit)
++
++	pcmpeqb	(%eax), %xmm3
++	pmovmskb %xmm3, %edx
++	test	%edx, %edx
++	lea	16(%eax), %eax
++	jnz	L(exit)
++
++	pcmpeqb	(%eax), %xmm0
++	pmovmskb %xmm0, %edx
++	test	%edx, %edx
++	lea	16(%eax), %eax
++	jnz	L(exit)
++
++	pcmpeqb	(%eax), %xmm1
++	pmovmskb %xmm1, %edx
++	test	%edx, %edx
++	lea	16(%eax), %eax
++	jnz	L(exit)
++
++	pcmpeqb	(%eax), %xmm2
++	pmovmskb %xmm2, %edx
++	test	%edx, %edx
++	lea	16(%eax), %eax
++	jnz	L(exit)
++
++	pcmpeqb	(%eax), %xmm3
++	pmovmskb %xmm3, %edx
++	test	%edx, %edx
++	lea	16(%eax), %eax
++	jnz	L(exit)
++
++	pcmpeqb	(%eax), %xmm0
++	pmovmskb %xmm0, %edx
++	test	%edx, %edx
++	lea	16(%eax), %eax
++	jnz	L(exit)
++
++	pcmpeqb	(%eax), %xmm1
++	pmovmskb %xmm1, %edx
++	test	%edx, %edx
++	lea	16(%eax), %eax
++	jnz	L(exit)
++
++	pcmpeqb	(%eax), %xmm2
++	pmovmskb %xmm2, %edx
++	test	%edx, %edx
++	lea	16(%eax), %eax
++	jnz	L(exit)
++
++	pcmpeqb	(%eax), %xmm3
++	pmovmskb %xmm3, %edx
++	test	%edx, %edx
++	lea	16(%eax), %eax
++	jnz	L(exit)
++
++	and	$-0x40, %eax
++	PUSH (%esi)
++	PUSH (%edi)
++	PUSH (%ebx)
++	PUSH (%ebp)
++	xor	%ebp, %ebp
++L(aligned_64):
++	pcmpeqb	(%eax), %xmm0
++	pcmpeqb	16(%eax), %xmm1
++	pcmpeqb	32(%eax), %xmm2
++	pcmpeqb	48(%eax), %xmm3
++	pmovmskb %xmm0, %edx
++	pmovmskb %xmm1, %esi
++	pmovmskb %xmm2, %edi
++	pmovmskb %xmm3, %ebx
++	or	%edx, %ebp
++	or	%esi, %ebp
++	or	%edi, %ebp
++	or	%ebx, %ebp
++	lea	64(%eax), %eax
++	jz	L(aligned_64)
++L(48leave):
++	test	%edx, %edx
++	jnz	L(aligned_64_exit_16)
++	test	%esi, %esi
++	jnz	L(aligned_64_exit_32)
++	test	%edi, %edi
++	jnz	L(aligned_64_exit_48)
++	mov	%ebx, %edx
++	lea	(%eax), %eax
++	jmp	L(aligned_64_exit)
++L(aligned_64_exit_48):
++	lea	-16(%eax), %eax
++	mov	%edi, %edx
++	jmp	L(aligned_64_exit)
++L(aligned_64_exit_32):
++	lea	-32(%eax), %eax
++	mov	%esi, %edx
++	jmp	L(aligned_64_exit)
++L(aligned_64_exit_16):
++	lea	-48(%eax), %eax
++L(aligned_64_exit):
++	POP (%ebp)
++	POP (%ebx)
++	POP (%edi)
++	POP (%esi)
++L(exit):
++	sub	%ecx, %eax
++	test	%dl, %dl
++	jz	L(exit_high)
++	test	$0x01, %dl
++	jnz	L(exit_tail0)
++
++	test	$0x02, %dl
++	jnz	L(exit_tail1)
++
++	test	$0x04, %dl
++	jnz	L(exit_tail2)
++
++	test	$0x08, %dl
++	jnz	L(exit_tail3)
++
++	test	$0x10, %dl
++	jnz	L(exit_tail4)
++
++	test	$0x20, %dl
++	jnz	L(exit_tail5)
++
++	test	$0x40, %dl
++	jnz	L(exit_tail6)
++	add	$7, %eax
++L(exit_tail0):
++	RETURN
++
++L(exit_high):
++	add	$8, %eax
++	test	$0x01, %dh
++	jnz	L(exit_tail0)
++
++	test	$0x02, %dh
++	jnz	L(exit_tail1)
++
++	test	$0x04, %dh
++	jnz	L(exit_tail2)
++
++	test	$0x08, %dh
++	jnz	L(exit_tail3)
++
++	test	$0x10, %dh
++	jnz	L(exit_tail4)
++
++	test	$0x20, %dh
++	jnz	L(exit_tail5)
++
++	test	$0x40, %dh
++	jnz	L(exit_tail6)
++	add	$7, %eax
++	RETURN
++
++	.p2align 4
++L(exit_tail1):
++	add	$1, %eax
++	RETURN
++
++L(exit_tail2):
++	add	$2, %eax
++	RETURN
++
++L(exit_tail3):
++	add	$3, %eax
++	RETURN
++
++L(exit_tail4):
++	add	$4, %eax
++	RETURN
++
++L(exit_tail5):
++	add	$5, %eax
++	RETURN
++
++L(exit_tail6):
++	add	$6, %eax
++	RETURN
++
++L(exit_tail7):
++	add	$7, %eax
++	RETURN
++
++L(exit_tail8):
++	add	$8, %eax
++	RETURN
++
++L(exit_tail9):
++	add	$9, %eax
++	RETURN
++
++L(exit_tail10):
++	add	$10, %eax
++	RETURN
++
++L(exit_tail11):
++	add	$11, %eax
++	RETURN
++
++L(exit_tail12):
++	add	$12, %eax
++	RETURN
++
++L(exit_tail13):
++	add	$13, %eax
++	RETURN
++
++L(exit_tail14):
++	add	$14, %eax
++	RETURN
++
++L(exit_tail15):
++	add	$15, %eax
++	ret
++
++END (__strlen_sse2)
++
++#endif
+Index: glibc-2.12-2-gc4ccff1/sysdeps/i386/i686/multiarch/strlen.S
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/i386/i686/multiarch/strlen.S
++++ glibc-2.12-2-gc4ccff1/sysdeps/i386/i686/multiarch/strlen.S
+@@ -48,6 +48,9 @@ ENTRY(strlen)
+ 1:	leal	__strlen_ia32@GOTOFF(%ebx), %eax
+ 	testl	$bit_SSE2, CPUID_OFFSET+index_SSE2+__cpu_features@GOTOFF(%ebx)
+ 	jz	2f
++	leal	__strlen_sse2_bsf@GOTOFF(%ebx), %eax
++	testl	$bit_Slow_BSF, FEATURE_OFFSET+index_Slow_BSF+__cpu_features@GOTOFF(%ebx)
++	jz	2f
+ 	leal	__strlen_sse2@GOTOFF(%ebx), %eax
+ 2:	popl	%ebx
+ 	cfi_adjust_cfa_offset (-4);
+@@ -55,84 +58,6 @@ ENTRY(strlen)
+ 	ret
+ END(strlen)
+ 
+-#define CFI_POP(REG)						\
+-  cfi_adjust_cfa_offset (-4);					\
+-  cfi_restore (REG)
+-
+-#define RETURN		popl %esi; CFI_POP (esi); ret
+-
+-	.text
+-ENTRY (__strlen_sse2)
+-/*
+- * This implementation uses SSE instructions to compare up to 16 bytes
+- * at a time looking for the end of string (null char).
+- */
+-	pushl	%esi
+-	cfi_adjust_cfa_offset (4)
+-	cfi_rel_offset (%esi, 0)
+-	mov	8(%esp), %eax
+-	mov	%eax, %ecx
+-	pxor	%xmm0, %xmm0		/* 16 null chars */
+-	mov	%eax, %esi
+-	and	$15, %ecx
+-	jz	1f			/* string is 16 byte aligned */
+-
+-	/*
+-	* Unaligned case. Round down to 16-byte boundary before comparing
+-	* 16 bytes for a null char. The code then compensates for any extra chars
+-	* preceding the start of the string.
+-	*/
+-	and	$-16, %esi
+-
+-	pcmpeqb	(%esi), %xmm0
+-	lea	16(%eax), %esi
+-	pmovmskb %xmm0, %edx
+-
+-	shr	%cl, %edx		/* Compensate for bytes preceding the string */
+-	test	%edx, %edx
+-	jnz	2f
+-	sub	%ecx, %esi		/* no null, adjust to next 16-byte boundary */
+-	pxor	%xmm0, %xmm0		/* clear xmm0, may have been changed... */
+-
+-	.p2align 4
+-1:					/* 16 byte aligned */
+-	pcmpeqb	(%esi), %xmm0		/* look for null bytes */
+-	pmovmskb %xmm0, %edx		/* move each byte mask of %xmm0 to edx */
+-
+-	add	$16, %esi		/* prepare to search next 16 bytes */
+-	test	%edx, %edx		/* if no null byte, %edx must be 0 */
+-	jnz	2f			/* found a null */
+-
+-	pcmpeqb	(%esi), %xmm0
+-	pmovmskb %xmm0, %edx
+-	add	$16, %esi
+-	test	%edx, %edx
+-	jnz	2f
+-
+-	pcmpeqb	(%esi), %xmm0
+-	pmovmskb %xmm0, %edx
+-	add	$16, %esi
+-	test	%edx, %edx
+-	jnz	2f
+-
+-	pcmpeqb	(%esi), %xmm0
+-	pmovmskb %xmm0, %edx
+-	add	$16, %esi
+-	test	%edx, %edx
+-	jz	1b
+-
+-2:
+-	neg	%eax
+-	lea	-16(%eax, %esi), %eax	/* calculate exact offset */
+-	bsf	%edx, %ecx		/* Least significant 1 bit is index of null */
+-	add	%ecx, %eax
+-	popl	%esi
+-	cfi_adjust_cfa_offset (-4)
+-	cfi_restore (%esi)
+-	ret
+-
+-END (__strlen_sse2)
+-
+ # undef ENTRY
+ # define ENTRY(name) \
+ 	.type __strlen_ia32, @function; \
+--- a/sysdeps/x86_64/multiarch/Makefile	2012-03-01 10:43:30.060487726 -0700
++++ b/sysdeps/x86_64/multiarch/Makefile	2012-03-01 10:45:57.894692115 -0700
+@@ -7,7 +7,7 @@ ifeq ($(subdir),string)
+ sysdep_routines += stpncpy-c strncpy-c strcmp-ssse3 strncmp-ssse3 \
+ 		   strend-sse4 memcmp-sse4 \
+ 		   strcasestr-nonascii strcasecmp_l-ssse3 \
+-		   strncase_l-ssse3 \
++		   strncase_l-ssse3 strlen-sse4 strlen-no-bsf \
+ 		   memset-x86-64
+ ifeq (yes,$(config-cflags-sse4))
+ sysdep_routines += strcspn-c strpbrk-c strspn-c strstr-c strcasestr-c
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/init-arch.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/multiarch/init-arch.c
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/init-arch.c
+@@ -77,6 +77,12 @@ __init_cpu_features (void)
+ 	  model += extended_model;
+ 	  switch (model)
+ 	    {
++	    case 0x1c:
++	    case 0x26:
++	      /* BSF is slow on Atom.  */
++	      __cpu_features.feature[index_Slow_BSF] |= bit_Slow_BSF;
++	      break;
++
+ 	    case 0x1a:
+ 	    case 0x1e:
+ 	    case 0x1f:
+--- a/sysdeps/x86_64/multiarch/init-arch.h	2012-03-01 10:43:30.061487720 -0700
++++ b/sysdeps/x86_64/multiarch/init-arch.h	2012-03-01 10:48:13.371963005 -0700
+@@ -17,6 +17,7 @@
+    02111-1307 USA.  */
+ 
+ #define bit_Fast_Rep_String		(1 << 0)
++#define bit_Slow_BSF                   (1 << 2)
+ #define bit_Prefer_SSE_for_memop	(1 << 3)
+ 
+ #ifdef	__ASSEMBLER__
+@@ -34,6 +35,7 @@
+ # define index_SSE4_2	COMMON_CPUID_INDEX_1*CPUID_SIZE+CPUID_ECX_OFFSET
+ 
+ #define index_Fast_Rep_String	FEATURE_INDEX_1*FEATURE_SIZE
++# define index_Slow_BSF                        FEATURE_INDEX_1*FEATURE_SIZE
+ # define index_Prefer_SSE_for_memop	FEATURE_INDEX_1*FEATURE_SIZE
+ 
+ #else	/* __ASSEMBLER__ */
+@@ -105,11 +107,15 @@ extern const struct cpu_features *__get_
+ # define HAS_FMA	HAS_CPU_FEATURE (COMMON_CPUID_INDEX_1, ecx, 12)
+ 
+ # define index_Fast_Rep_String	FEATURE_INDEX_1
++# define index_Slow_BSF                        FEATURE_INDEX_1
+ # define index_Prefer_SSE_for_memop	FEATURE_INDEX_1
+ 
+ #define HAS_ARCH_FEATURE(idx, bit) \
+   ((__get_cpu_features ()->feature[idx] & (bit)) != 0)
+ 
++#define HAS_SLOW_BSF \
++  HAS_ARCH_FEATURE (index_Slow_BSF, bit_Slow_BSF)
++
+ #define HAS_PREFER_SSE_FOR_MEMOP \
+   HAS_ARCH_FEATURE (index_Prefer_SSE_for_memop, bit_Prefer_SSE_for_memop)
+ 
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strlen-no-bsf.S
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strlen-no-bsf.S
+@@ -0,0 +1,309 @@
++/* strlen without BSF
++   Copyright (C) 2010 Free Software Foundation, Inc.
++   Contributed by Intel Corporation.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library 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
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++#if defined SHARED && !defined NOT_IN_libc
++
++#include <sysdep.h>
++
++	.section .text.slow,"ax",@progbits
++ENTRY (__strlen_no_bsf)
++	xor	%eax, %eax
++	cmpb	$0, (%rdi)
++	jz	L(exit_tail0)
++	cmpb	$0, 1(%rdi)
++	jz	L(exit_tail1)
++	cmpb	$0, 2(%rdi)
++	jz	L(exit_tail2)
++	cmpb	$0, 3(%rdi)
++	jz	L(exit_tail3)
++	cmpb	$0, 4(%rdi)
++	jz	L(exit_tail4)
++	cmpb	$0, 5(%rdi)
++	jz	L(exit_tail5)
++	cmpb	$0, 6(%rdi)
++	jz	L(exit_tail6)
++	cmpb	$0, 7(%rdi)
++	jz	L(exit_tail7)
++	cmpb	$0, 8(%rdi)
++	jz	L(exit_tail8)
++	cmpb	$0, 9(%rdi)
++	jz	L(exit_tail9)
++	cmpb	$0, 10(%rdi)
++	jz	L(exit_tail10)
++	cmpb	$0, 11(%rdi)
++	jz	L(exit_tail11)
++	cmpb	$0, 12(%rdi)
++	jz	L(exit_tail12)
++	cmpb	$0, 13(%rdi)
++	jz	L(exit_tail13)
++	cmpb	$0, 14(%rdi)
++	jz	L(exit_tail14)
++	cmpb	$0, 15(%rdi)
++	jz	L(exit_tail15)
++	pxor	%xmm0, %xmm0
++	mov	%rdi, %rcx
++	mov	%rdi, %rax
++	and	$-16, %rax
++	add	$16, %rax
++	add	$16, %rcx
++
++	pcmpeqb	(%rax), %xmm0
++	pmovmskb %xmm0, %edx
++	pxor	%xmm1, %xmm1
++	test	%edx, %edx
++	lea	16(%rax), %rax
++	jnz	L(exit)
++
++	pcmpeqb	(%rax), %xmm1
++	pmovmskb %xmm1, %edx
++	pxor	%xmm2, %xmm2
++	test	%edx, %edx
++	lea	16(%rax), %rax
++	jnz	L(exit)
++
++
++	pcmpeqb	(%rax), %xmm2
++	pmovmskb %xmm2, %edx
++	pxor	%xmm3, %xmm3
++	test	%edx, %edx
++	lea	16(%rax), %rax
++	jnz	L(exit)
++
++	pcmpeqb	(%rax), %xmm3
++	pmovmskb %xmm3, %edx
++	test	%edx, %edx
++	lea	16(%rax), %rax
++	jnz	L(exit)
++
++	pcmpeqb	(%rax), %xmm0
++	pmovmskb %xmm0, %edx
++	test	%edx, %edx
++	lea	16(%rax), %rax
++	jnz	L(exit)
++
++	pcmpeqb	(%rax), %xmm1
++	pmovmskb %xmm1, %edx
++	test	%edx, %edx
++	lea	16(%rax), %rax
++	jnz	L(exit)
++
++	pcmpeqb	(%rax), %xmm2
++	pmovmskb %xmm2, %edx
++	test	%edx, %edx
++	lea	16(%rax), %rax
++	jnz	L(exit)
++
++	pcmpeqb	(%rax), %xmm3
++	pmovmskb %xmm3, %edx
++	test	%edx, %edx
++	lea	16(%rax), %rax
++	jnz	L(exit)
++
++	pcmpeqb	(%rax), %xmm0
++	pmovmskb %xmm0, %edx
++	test	%edx, %edx
++	lea	16(%rax), %rax
++	jnz	L(exit)
++
++	pcmpeqb	(%rax), %xmm1
++	pmovmskb %xmm1, %edx
++	test	%edx, %edx
++	lea	16(%rax), %rax
++	jnz	L(exit)
++
++	pcmpeqb	(%rax), %xmm2
++	pmovmskb %xmm2, %edx
++	test	%edx, %edx
++	lea	16(%rax), %rax
++	jnz	L(exit)
++
++	pcmpeqb	(%rax), %xmm3
++	pmovmskb %xmm3, %edx
++	test	%edx, %edx
++	lea	16(%rax), %rax
++	jnz	L(exit)
++
++	pcmpeqb	(%rax), %xmm0
++	pmovmskb %xmm0, %edx
++	test	%edx, %edx
++	lea	16(%rax), %rax
++	jnz	L(exit)
++
++	pcmpeqb	(%rax), %xmm1
++	pmovmskb %xmm1, %edx
++	test	%edx, %edx
++	lea	16(%rax), %rax
++	jnz	L(exit)
++
++	pcmpeqb	(%rax), %xmm2
++	pmovmskb %xmm2, %edx
++	test	%edx, %edx
++	lea	16(%rax), %rax
++	jnz	L(exit)
++
++	pcmpeqb	(%rax), %xmm3
++	pmovmskb %xmm3, %edx
++	test	%edx, %edx
++	lea	16(%rax), %rax
++	jnz	L(exit)
++
++	and	$-0x40, %rax
++	xor	%r8d, %r8d
++L(aligned_64):
++	pcmpeqb	(%rax), %xmm0
++	pcmpeqb	16(%rax), %xmm1
++	pcmpeqb	32(%rax), %xmm2
++	pcmpeqb	48(%rax), %xmm3
++	pmovmskb %xmm0, %edx
++	pmovmskb %xmm1, %esi
++	pmovmskb %xmm2, %edi
++	pmovmskb %xmm3, %r9d
++	or	%edx, %r8d
++	or	%esi, %r8d
++	or	%edi, %r8d
++	or	%r9d, %r8d
++	lea	64(%rax), %rax
++	jz	L(aligned_64)
++
++	test	%edx, %edx
++	jnz	L(aligned_64_exit_16)
++	test	%esi, %esi
++	jnz	L(aligned_64_exit_32)
++	test	%edi, %edi
++	jnz	L(aligned_64_exit_48)
++L(aligned_64_exit_64):
++	mov	%r9d, %edx
++	jmp	L(aligned_64_exit)
++L(aligned_64_exit_48):
++	lea	-16(%rax), %rax
++	mov	%edi, %edx
++	jmp	L(aligned_64_exit)
++L(aligned_64_exit_32):
++	lea	-32(%rax), %rax
++	mov	%esi, %edx
++	jmp	L(aligned_64_exit)
++L(aligned_64_exit_16):
++	lea	-48(%rax), %rax
++L(aligned_64_exit):
++L(exit):
++	sub	%rcx, %rax
++	test	%dl, %dl
++	jz	L(exit_high)
++	test	$0x01, %dl
++	jnz	L(exit_tail0)
++
++	test	$0x02, %dl
++	jnz	L(exit_tail1)
++
++	test	$0x04, %dl
++	jnz	L(exit_tail2)
++
++	test	$0x08, %dl
++	jnz	L(exit_tail3)
++
++	test	$0x10, %dl
++	jnz	L(exit_tail4)
++
++	test	$0x20, %dl
++	jnz	L(exit_tail5)
++
++	test	$0x40, %dl
++	jnz	L(exit_tail6)
++	add	$7, %eax
++L(exit_tail0):
++	ret
++
++L(exit_high):
++	add	$8, %eax
++	test	$0x01, %dh
++	jnz	L(exit_tail0)
++
++	test	$0x02, %dh
++	jnz	L(exit_tail1)
++
++	test	$0x04, %dh
++	jnz	L(exit_tail2)
++
++	test	$0x08, %dh
++	jnz	L(exit_tail3)
++
++	test	$0x10, %dh
++	jnz	L(exit_tail4)
++
++	test	$0x20, %dh
++	jnz	L(exit_tail5)
++
++	test	$0x40, %dh
++	jnz	L(exit_tail6)
++	add	$7, %eax
++	ret
++	.p2align 4
++L(exit_tail1):
++	add	$1, %eax
++	ret
++
++L(exit_tail2):
++	add	$2, %eax
++	ret
++
++L(exit_tail3):
++	add	$3, %eax
++	ret
++
++L(exit_tail4):
++	add	$4, %eax
++	ret
++
++L(exit_tail5):
++	add	$5, %eax
++	ret
++L(exit_tail6):
++	add	$6, %eax
++	ret
++L(exit_tail7):
++	add	$7, %eax
++	ret
++L(exit_tail8):
++	add	$8, %eax
++	ret
++L(exit_tail9):
++	add	$9, %eax
++	ret
++L(exit_tail10):
++	add	$10, %eax
++	ret
++L(exit_tail11):
++	add	$11, %eax
++	ret
++L(exit_tail12):
++	add	$12, %eax
++	ret
++L(exit_tail13):
++	add	$13, %eax
++	ret
++L(exit_tail14):
++	add	$14, %eax
++	ret
++L(exit_tail15):
++	add	$15, %eax
++	ret
++END (__strlen_no_bsf)
++
++#endif
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strlen-sse4.S
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strlen-sse4.S
+@@ -0,0 +1,85 @@
++/* strlen with SSE4
++   Copyright (C) 2009, 2010 Free Software Foundation, Inc.
++   Contributed by Ulrich Drepper <drepper@redhat.com>.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library 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
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++#if defined SHARED && !defined NOT_IN_libc
++
++#include <sysdep.h>
++
++	.section .text.sse4.2,"ax",@progbits
++ENTRY (__strlen_sse42)
++	pxor	%xmm1, %xmm1
++	movl	%edi, %ecx
++	movq	%rdi, %r8
++	andq	$~15, %rdi
++	xor	%edi, %ecx
++	pcmpeqb	(%rdi), %xmm1
++	pmovmskb %xmm1, %edx
++	shrl	%cl, %edx
++	shll	%cl, %edx
++	andl	%edx, %edx
++	jnz	L(less16bytes)
++	pxor	%xmm1, %xmm1
++
++	.p2align 4
++L(more64bytes_loop):
++	pcmpistri $0x08, 16(%rdi), %xmm1
++	jz	L(more32bytes)
++
++	pcmpistri $0x08, 32(%rdi), %xmm1
++	jz	L(more48bytes)
++
++	pcmpistri $0x08, 48(%rdi), %xmm1
++	jz	L(more64bytes)
++
++	add	$64, %rdi
++	pcmpistri $0x08, (%rdi), %xmm1
++	jnz	L(more64bytes_loop)
++	leaq	(%rdi,%rcx), %rax
++	subq	%r8, %rax
++	ret
++
++	.p2align 4
++L(more32bytes):
++	leaq	16(%rdi,%rcx, 1), %rax
++	subq	%r8, %rax
++	ret
++
++	.p2align 4
++L(more48bytes):
++	leaq	32(%rdi,%rcx, 1), %rax
++	subq	%r8, %rax
++	ret
++
++	.p2align 4
++L(more64bytes):
++	leaq	48(%rdi,%rcx, 1), %rax
++	subq	%r8, %rax
++	ret
++
++	.p2align 4
++L(less16bytes):
++	subq	%r8, %rdi
++	bsfl	%edx, %eax
++	addq	%rdi, %rax
++	ret
++
++END (__strlen_sse42)
++
++#endif
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strlen.S
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/multiarch/strlen.S
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/multiarch/strlen.S
+@@ -36,74 +36,12 @@ ENTRY(strlen)
+ 	testl	$bit_SSE4_2, __cpu_features+CPUID_OFFSET+index_SSE4_2(%rip)
+ 	jz	2f
+ 	leaq	__strlen_sse42(%rip), %rax
+-2:	ret
+-END(strlen)
+-
+-
+-	.section .text.sse4.2,"ax",@progbits
+-	.align 	16
+-	.type	__strlen_sse42, @function
+-__strlen_sse42:
+-	cfi_startproc
+-	CALL_MCOUNT
+-	pxor	%xmm1, %xmm1
+-	movl	%edi, %ecx
+-	movq	%rdi, %r8
+-	andq	$~15, %rdi
+-	xor	%edi, %ecx
+-	pcmpeqb	(%rdi), %xmm1
+-	pmovmskb %xmm1, %edx
+-	shrl	%cl, %edx
+-	shll	%cl, %edx
+-	andl	%edx, %edx
+-	jnz	L(less16bytes)
+-	pxor	%xmm1, %xmm1
+-
+-	.p2align 4
+-L(more64bytes_loop):
+-	pcmpistri $0x08, 16(%rdi), %xmm1
+-	jz	L(more32bytes)
+-
+-	pcmpistri $0x08, 32(%rdi), %xmm1
+-	jz	L(more48bytes)
+-
+-	pcmpistri $0x08, 48(%rdi), %xmm1
+-	jz	L(more64bytes)
+-
+-	add	$64, %rdi
+-	pcmpistri $0x08, (%rdi), %xmm1
+-	jnz	L(more64bytes_loop)
+-	leaq	(%rdi,%rcx), %rax
+-	subq	%r8, %rax
+-	ret
+-
+-	.p2align 4
+-L(more32bytes):
+-	leaq	16(%rdi,%rcx, 1), %rax
+-	subq	%r8, %rax
+-	ret
+-
+-	.p2align 4
+-L(more48bytes):
+-	leaq	32(%rdi,%rcx, 1), %rax
+-	subq	%r8, %rax
+-	ret
+-
+-	.p2align 4
+-L(more64bytes):
+-	leaq	48(%rdi,%rcx, 1), %rax
+-	subq	%r8, %rax
+ 	ret
+-
+-	.p2align 4
+-L(less16bytes):
+-	subq	%r8, %rdi
+-	bsfl	%edx, %eax
+-	addq	%rdi, %rax
+-	ret
+-	cfi_endproc
+-	.size	__strlen_sse42, .-__strlen_sse42
+-
++2:	testl	$bit_Slow_BSF, __cpu_features+FEATURE_OFFSET+index_Slow_BSF(%rip)
++	jz	3f
++	leaq    __strlen_no_bsf(%rip), %rax
++3:	ret
++END(strlen)
+ 
+ # undef ENTRY
+ # define ENTRY(name) \
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strlen.S
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/strlen.S
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/strlen.S
+@@ -23,29 +23,80 @@
+ 
+ 	.text
+ ENTRY(strlen)
+-	pxor	%xmm2, %xmm2
+-	movq	%rdi, %rcx
+-	movq	%rdi, %r8
+-	andq	$~15, %rdi
+-	movdqa	%xmm2, %xmm1
+-	pcmpeqb	(%rdi), %xmm2
+-	orl	$0xffffffff, %esi
+-	subq	%rdi, %rcx
+-	shll	%cl, %esi
+-	pmovmskb %xmm2, %edx
+-	andl	%esi, %edx
+-	jnz	1f
+-
+-2:	movdqa	16(%rdi), %xmm0
+-	leaq	16(%rdi), %rdi
++	xor	%rax, %rax
++	mov	%edi, %ecx
++	and	$0x3f, %ecx
++	pxor	%xmm0, %xmm0
++	cmp	$0x30, %ecx
++	ja	L(next)
++	movdqu	(%rdi), %xmm1
+ 	pcmpeqb	%xmm1, %xmm0
+ 	pmovmskb %xmm0, %edx
+-	testl	%edx, %edx
+-	jz	2b
++	test	%edx, %edx
++	jnz	L(exit_less16)
++	mov	%rdi, %rax
++	and	$-16, %rax
++	jmp	L(align16_start)
++L(next):
++	mov	%rdi, %rax
++	and	$-16, %rax
++	pcmpeqb	(%rax), %xmm0
++	mov	$-1, %esi
++	sub	%rax, %rcx
++	shl	%cl, %esi
++	pmovmskb %xmm0, %edx
++	and	%esi, %edx
++	jnz	L(exit)
++L(align16_start):
++	pxor	%xmm0, %xmm0
++	pxor	%xmm1, %xmm1
++	pxor	%xmm2, %xmm2
++	pxor	%xmm3, %xmm3
++	.p2align 4
++L(align16_loop):
++	pcmpeqb	16(%rax), %xmm0
++	pmovmskb %xmm0, %edx
++	test	%edx, %edx
++	jnz	L(exit16)
+ 
+-1:	subq	%r8, %rdi
+-	bsfl	%edx, %eax
+-	addq	%rdi, %rax
++	pcmpeqb	32(%rax), %xmm1
++	pmovmskb %xmm1, %edx
++	test	%edx, %edx
++	jnz	L(exit32)
++
++	pcmpeqb	48(%rax), %xmm2
++	pmovmskb %xmm2, %edx
++	test	%edx, %edx
++	jnz	L(exit48)
++
++	pcmpeqb	64(%rax), %xmm3
++	pmovmskb %xmm3, %edx
++	lea	64(%rax), %rax
++	test	%edx, %edx
++	jz	L(align16_loop)
++L(exit):
++	sub	%rdi, %rax
++L(exit_less16):
++	bsf	%rdx, %rdx
++	add	%rdx, %rax
++	ret
++	.p2align 4
++L(exit16):
++	sub	%rdi, %rax
++	bsf	%rdx, %rdx
++	lea	16(%rdx,%rax), %rax
++	ret
++	.p2align 4
++L(exit32):
++	sub	%rdi, %rax
++	bsf	%rdx, %rdx
++	lea	32(%rdx,%rax), %rax
++	ret
++	.p2align 4
++L(exit48):
++	sub	%rdi, %rax
++	bsf	%rdx, %rdx
++	lea	48(%rdx,%rax), %rax
+ 	ret
+ END(strlen)
+ libc_hidden_builtin_def (strlen)
diff --git a/SOURCES/glibc-rh696472.patch b/SOURCES/glibc-rh696472.patch
new file mode 100644
index 0000000..9d30d38
--- /dev/null
+++ b/SOURCES/glibc-rh696472.patch
@@ -0,0 +1,36 @@
+commit 3d29045b5e8329d97693eda8d98f1d1e60b99c8f
+Author: H.J. Lu <hongjiu.lu@intel.com>
+Date:   Fri Jun 3 07:01:25 2011 -0400
+
+    Assume Intel Core i3/i5/i7 processor if AVX is available
+
+2011-06-02  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* sysdeps/x86_64/multiarch/init-arch.c (__init_cpu_features):
+	Assume Intel Core i3/i5/i7 processor if AVX is available.
+
+diff --git a/sysdeps/x86_64/multiarch/init-arch.c b/sysdeps/x86_64/multiarch/init-arch.c
+index 34ec2df..809d105 100644
+--- a/sysdeps/x86_64/multiarch/init-arch.c
++++ b/sysdeps/x86_64/multiarch/init-arch.c
+@@ -74,6 +74,7 @@ __init_cpu_features (void)
+ 	}
+       else if (family == 0x06)
+ 	{
++	  ecx = __cpu_features.cpuid[COMMON_CPUID_INDEX_1].ecx;
+ 	  model += extended_model;
+ 	  switch (model)
+ 	    {
+@@ -83,6 +84,12 @@ __init_cpu_features (void)
+ 	      __cpu_features.feature[index_Slow_BSF] |= bit_Slow_BSF;
+ 	      break;
+ 
++	    default:
++	      /* Unknown family 0x06 processors.  Assuming this is one
++	         of Core i3/i5/i7 processors if AVX is available.  */
++	      if ((ecx & bit_AVX) == 0)
++		break;
++
+ 	    case 0x1a:
+ 	    case 0x1e:
+ 	    case 0x1f:
diff --git a/SOURCES/glibc-rh697421.patch b/SOURCES/glibc-rh697421.patch
new file mode 100644
index 0000000..961c805
--- /dev/null
+++ b/SOURCES/glibc-rh697421.patch
@@ -0,0 +1,10 @@
+diff -rup a/iconvdata/gconv-modules b/iconvdata/gconv-modules
+--- a/iconvdata/gconv-modules	2010-05-04 05:27:23.000000000 -0600
++++ b/iconvdata/gconv-modules	2012-01-26 10:58:24.181895489 -0700
+@@ -1954,3 +1954,6 @@ alias	HPGREEK8//		HP-GREEK8//
+ alias	OSF10010004//		HP-GREEK8//
+ module	HP-GREEK8//		INTERNAL		HP-GREEK8	1
+ module	INTERNAL		HP-GREEK8//		HP-GREEK8	1
++
++alias	ISO-10646-UCS-2//	UNICODE//
++alias	ISO-10646-UCS-2//	ISO-10646/UTF8/
diff --git a/SOURCES/glibc-rh699724.patch b/SOURCES/glibc-rh699724.patch
new file mode 100644
index 0000000..d25ce84
--- /dev/null
+++ b/SOURCES/glibc-rh699724.patch
@@ -0,0 +1,188 @@
+2011-02-23  Andreas Schwab  <schwab@redhat.com>
+
+	[BZ #12509]
+	* elf/dl-load.c (_dl_map_object_from_fd): Free realname before
+	returning unsuccessfully.
+	* elf/Makefile ($(objpfx)noload-mem): New rule.
+	(noload-ENV): Define.
+	(tests): Add $(objpfx)noload-mem.
+	* elf/noload.c: Include <memcheck.h>.
+	(main): Call mtrace.  Close all opened handles.
+
+2010-09-27  Andreas Schwab  <schwab@redhat.com>
+
+	* include/link.h (struct link_map): Add l_free_initfini.
+	* elf/dl-deps.c (_dl_map_object_deps): Set it when assigning
+	l_initfini.
+	* elf/rtld.c (dl_main): Clear it on all objects loaded on startup.
+	* elf/dl-libc.c (free_mem): Free l_initfini if l_free_initfini is
+	set.
+
+Index: glibc-2.12-2-gc4ccff1/elf/Makefile
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/elf/Makefile
++++ glibc-2.12-2-gc4ccff1/elf/Makefile
+@@ -211,7 +211,7 @@ endif
+ ifeq (yesyes,$(have-fpie)$(build-shared))
+ tests: $(objpfx)tst-pie1.out
+ endif
+-tests: $(objpfx)tst-leaks1-mem
++tests: $(objpfx)tst-leaks1-mem $(objpfx)noload-mem
+ tlsmod17a-suffixes = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
+ tlsmod18a-suffixes = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
+ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \
+@@ -664,6 +664,10 @@ $(objpfx)noload: $(objpfx)testobj1.so $(
+ LDFLAGS-noload = -rdynamic
+ $(objpfx)noload.out: $(objpfx)testobj5.so
+ 
++$(objpfx)noload-mem: $(objpfx)noload.out
++	$(common-objpfx)malloc/mtrace $(objpfx)noload.mtrace > $@
++noload-ENV = MALLOC_TRACE=$(objpfx)noload.mtrace
++
+ LDFLAGS-nodelete = -rdynamic
+ LDFLAGS-nodelmod1.so = -Wl,--enable-new-dtags,-z,nodelete
+ LDFLAGS-nodelmod4.so = -Wl,--enable-new-dtags,-z,nodelete
+Index: glibc-2.12-2-gc4ccff1/elf/dl-deps.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/elf/dl-deps.c
++++ glibc-2.12-2-gc4ccff1/elf/dl-deps.c
+@@ -478,6 +478,7 @@ _dl_map_object_deps (struct link_map *ma
+ 		  nneeded * sizeof needed[0]);
+ 	  atomic_write_barrier ();
+ 	  l->l_initfini = l_initfini;
++	  l->l_free_initfini = 1;
+ 	}
+ 
+       /* If we have no auxiliary objects just go on to the next map.  */
+@@ -662,6 +663,7 @@ Filters not supported with LD_TRACE_PREL
+   l_initfini[nlist] = NULL;
+   atomic_write_barrier ();
+   map->l_initfini = l_initfini;
++  map->l_free_initfini = 1;
+   if (l_reldeps != NULL)
+     {
+       atomic_write_barrier ();
+Index: glibc-2.12-2-gc4ccff1/elf/dl-libc.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/elf/dl-libc.c
++++ glibc-2.12-2-gc4ccff1/elf/dl-libc.c
+@@ -250,5 +250,9 @@ libc_freeres_fn (free_mem)
+ 	    if (! old->dont_free)
+ 	    free (old);
+ 	  }
++
++	/* Free the initfini dependency list.  */
++	if (l->l_free_initfini)
++	  free (l->l_initfini);
+       }
+ }
+Index: glibc-2.12-2-gc4ccff1/elf/dl-load.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/elf/dl-load.c
++++ glibc-2.12-2-gc4ccff1/elf/dl-load.c
+@@ -907,6 +907,7 @@ _dl_map_object_from_fd (const char *name
+     {
+       /* We are not supposed to load the object unless it is already
+ 	 loaded.  So return now.  */
++      free (realname);
+       __close (fd);
+       return NULL;
+     }
+@@ -925,6 +926,7 @@ _dl_map_object_from_fd (const char *name
+       _dl_zerofd = _dl_sysdep_open_zero_fill ();
+       if (_dl_zerofd == -1)
+ 	{
++	  free (realname);
+ 	  __close (fd);
+ 	  _dl_signal_error (errno, NULL, NULL,
+ 			    N_("cannot open zero fill device"));
+Index: glibc-2.12-2-gc4ccff1/elf/noload.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/elf/noload.c
++++ glibc-2.12-2-gc4ccff1/elf/noload.c
+@@ -1,20 +1,28 @@
+ #include <dlfcn.h>
+ #include <stdio.h>
++#include <mcheck.h>
+ 
+ int
+ main (void)
+ {
+   int result = 0;
++  void *p;
++
++  mtrace ();
+ 
+   /* First try to load an object which is a dependency.  This should
+      succeed.  */
+-  if (dlopen ("testobj1.so", RTLD_LAZY | RTLD_NOLOAD) == NULL)
++  p = dlopen ("testobj1.so", RTLD_LAZY | RTLD_NOLOAD);
++  if (p == NULL)
+     {
+       printf ("cannot open \"testobj1.so\": %s\n", dlerror ());
+       result = 1;
+     }
+   else
+-    puts ("loading \"testobj1.so\" succeeded, OK");
++    {
++      puts ("loading \"testobj1.so\" succeeded, OK");
++      dlclose (p);
++    }
+ 
+   /* Now try loading an object which is not already loaded.  */
+   if (dlopen ("testobj5.so", RTLD_LAZY | RTLD_NOLOAD) != NULL)
+@@ -25,8 +33,6 @@ main (void)
+   else
+     {
+       /* Load the object and run the same test again.  */
+-      void *p;
+-
+       puts ("\"testobj5.so\" wasn't loaded and RTLD_NOLOAD prevented it, OK");
+ 
+       p = dlopen ("testobj5.so", RTLD_LAZY);
+@@ -41,13 +47,17 @@ main (void)
+ 	{
+ 	  puts ("loading \"testobj5.so\" succeeded, OK");
+ 
+-	  if (dlopen ("testobj5.so", RTLD_LAZY | RTLD_NOLOAD) == NULL)
++	  void *q = dlopen ("testobj5.so", RTLD_LAZY | RTLD_NOLOAD);
++	  if (q == NULL)
+ 	    {
+ 	      printf ("cannot open \"testobj5.so\": %s\n", dlerror ());
+ 	      result = 1;
+ 	    }
+ 	  else
+-	    puts ("loading \"testobj5.so\" with RTLD_NOLOAD succeeded, OK");
++	    {
++	      puts ("loading \"testobj5.so\" with RTLD_NOLOAD succeeded, OK");
++	      dlclose (q);
++	    }
+ 
+ 	  if (dlclose (p) != 0)
+ 	    {
+Index: glibc-2.12-2-gc4ccff1/elf/rtld.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/elf/rtld.c
++++ glibc-2.12-2-gc4ccff1/elf/rtld.c
+@@ -2249,6 +2249,7 @@ ERROR: ld.so: object '%s' cannot be load
+ 	      lnp->dont_free = 1;
+ 	      lnp = lnp->next;
+ 	    }
++	  l->l_free_initfini = 0;
+ 
+ 	  if (l != &GL(dl_rtld_map))
+ 	    _dl_relocate_object (l, l->l_scope, GLRO(dl_lazy) ? RTLD_LAZY : 0,
+Index: glibc-2.12-2-gc4ccff1/include/link.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/include/link.h
++++ glibc-2.12-2-gc4ccff1/include/link.h
+@@ -192,6 +192,9 @@ struct link_map
+ 						 during LD_TRACE_PRELINKING=1
+ 						 contains any DT_SYMBOLIC
+ 						 libraries.  */
++    unsigned int l_free_initfini:1; /* Nonzero if l_initfini can be
++				       freed, ie. not allocated with
++				       the dummy malloc in ld.so.  */
+ 
+     /* Collected information about own RPATH directories.  */
+     struct r_search_path_struct l_rpath_dirs;
diff --git a/SOURCES/glibc-rh700507.patch b/SOURCES/glibc-rh700507.patch
new file mode 100644
index 0000000..0660431
--- /dev/null
+++ b/SOURCES/glibc-rh700507.patch
@@ -0,0 +1,26 @@
+Index: glibc-2.12-2-gc4ccff1/nscd/nscd.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nscd/nscd.c
++++ glibc-2.12-2-gc4ccff1/nscd/nscd.c
+@@ -260,10 +260,6 @@ main (int argc, char **argv)
+     /* In foreground mode we are not paranoid.  */
+     paranoia = 0;
+ 
+-  /* Start the SELinux AVC.  */
+-  if (selinux_enabled)
+-    nscd_avc_init ();
+-
+   signal (SIGINT, termination_handler);
+   signal (SIGQUIT, termination_handler);
+   signal (SIGTERM, termination_handler);
+@@ -278,6 +274,10 @@ main (int argc, char **argv)
+   /* Init databases.  */
+   nscd_init ();
+ 
++  /* Start the SELinux AVC.  */
++  if (selinux_enabled)
++    nscd_avc_init ();
++
+   /* Handle incoming requests */
+   start_threads ();
+ 
diff --git a/SOURCES/glibc-rh703480.patch b/SOURCES/glibc-rh703480.patch
new file mode 100644
index 0000000..742a79a
--- /dev/null
+++ b/SOURCES/glibc-rh703480.patch
@@ -0,0 +1,68 @@
+2011-01-15  Ulrich Drepper  <drepper@gmail.com>
+
+	[BZ #6812]
+	* nscd/hstcache.c (tryagain): Define.
+	(cache_addhst): Return tryagain not notfound for temporary errors.
+	(addhstbyX): Also set h_errno to TRY_AGAIN when memory allocation
+	failed.
+
+Index: glibc-2.12-2-gc4ccff1/nscd/hstcache.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nscd/hstcache.c
++++ glibc-2.12-2-gc4ccff1/nscd/hstcache.c
+@@ -77,6 +77,20 @@ static const hst_response_header notfoun
+ };
+ 
+ 
++/* This is the standard reply in case there are temporary problems.  */
++static const hst_response_header tryagain =
++{
++  .version = NSCD_VERSION,
++  .found = 0,
++  .h_name_len = 0,
++  .h_aliases_cnt = 0,
++  .h_addrtype = -1,
++  .h_length = -1,
++  .h_addr_list_cnt = 0,
++  .error = TRY_AGAIN
++};
++
++
+ static void
+ cache_addhst (struct database_dyn *db, int fd, request_header *req,
+ 	      const void *key, struct hostent *hst, uid_t owner,
+@@ -111,11 +125,15 @@ cache_addhst (struct database_dyn *db, i
+       else
+ 	{
+ 	  /* We have no data.  This means we send the standard reply for this
+-	     case.  */
++	     case.  Possibly this is only temporary.  */
+ 	  ssize_t total = sizeof (notfound);
++	  assert (sizeof (notfound) == sizeof (tryagain));
++
++	  const hst_response_header *resp = (errval == EAGAIN
++					     ? &tryagain : &notfound);
+ 
+ 	  if (fd != -1 &&
+-	      TEMP_FAILURE_RETRY (send (fd, &notfound, total,
++	      TEMP_FAILURE_RETRY (send (fd, resp, total,
+ 					MSG_NOSIGNAL)) != total)
+ 	    all_written = false;
+ 
+@@ -135,7 +153,7 @@ cache_addhst (struct database_dyn *db, i
+ 					   ? db->negtimeout : ttl);
+ 
+ 	      /* This is the reply.  */
+-	      memcpy (&dataset->resp, &notfound, total);
++	      memcpy (&dataset->resp, resp, total);
+ 
+ 	      /* Copy the key data.  */
+ 	      memcpy (dataset->strdata, key, req->key_len);
+@@ -490,6 +508,7 @@ addhstbyX (struct database_dyn *db, int 
+ 	      /* We set the error to indicate this is (possibly) a
+ 		 temporary error and that it does not mean the entry
+ 		 is not available at all.  */
++	      h_errno = TRY_AGAIN;
+ 	      errval = EAGAIN;
+ 	      break;
+ 	    }
diff --git a/SOURCES/glibc-rh703481.patch b/SOURCES/glibc-rh703481.patch
new file mode 100644
index 0000000..fdde4b5
--- /dev/null
+++ b/SOURCES/glibc-rh703481.patch
@@ -0,0 +1,875 @@
+2011-02-05  Ulrich Drepper  <drepper@gmail.com>
+
+	* nscd/nscd-client.h: Define MAX_TIMEOUT_VALUE.
+	(struct datahead): Reuse 32 bits of the alignment for a TTL field.
+	* nscd/aicache.c (addhstaiX): Return timeout of added value.
+	(readdhstai): Return value of addhstaiX call.
+	* nscd/grpcache.c (cache_addgr): Return timeout of added value.
+	(addgrbyX): Return value returned by cache_addgr.
+	(readdgrbyname): Return value returned by addgrbyX.
+	(readdgrbygid): Likewise.
+	* nscd/pwdcache.c (cache_addpw): Return timeout of added value.
+	(addpwbyX): Return value returned by cache_addpw.
+	(readdpwbyname): Return value returned by addhstbyX.
+	(readdpwbyuid): Likewise.
+	* nscd/servicescache.c (cache_addserv): Return timeout of added value.
+	(addservbyX): Return value returned by cache_addserv.
+	(readdservbyname): Return value returned by addservbyX:
+	(readdservbyport): Likewise.
+	* nscd/hstcache.c (cache_addhst): Return timeout of added value.
+	(addhstbyX): Return value returned by cache_addhst.
+	(readdhstbyname): Return value returned by addhstbyX.
+	(readdhstbyaddr): Likewise.
+	(readdhstbynamev6): Likewise.
+	(readdhstbyaddrv6): Likewise.
+	* nscd/initgrcache.c (addinitgroupsX): Return timeout of added value.
+	(readdinitgroups): Return value returned by addinitgroupsX.
+	* nscd/cache.c (readdfcts): Change return value of functions to time_t.
+	(prune_cache): Keep track of timeout value of re-added entries.
+	* nscd/connections.c (nscd_run_prune): Use MAX_TIMEOUT_VALUE.
+	* nscd/nscd.h: Adjust prototypes of readd* functions.
+
+Index: glibc-2.12-2-gc4ccff1/nscd/aicache.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nscd/aicache.c
++++ glibc-2.12-2-gc4ccff1/nscd/aicache.c
+@@ -58,7 +58,7 @@ static const ai_response_header notfound
+ };
+ 
+ 
+-static void
++static time_t
+ addhstaiX (struct database_dyn *db, int fd, request_header *req,
+ 	   void *key, uid_t uid, struct hashentry *const he,
+ 	   struct datahead *dh)
+@@ -119,6 +119,7 @@ addhstaiX (struct database_dyn *db, int 
+   ssize_t total = 0;
+   char *key_copy = NULL;
+   bool alloca_used = false;
++  time_t timeout = MAX_TIMEOUT_VALUE;
+ 
+   while (!no_more)
+     {
+@@ -388,8 +389,8 @@ addhstaiX (struct database_dyn *db, int 
+       dataset->head.usable = true;
+ 
+       /* Compute the timeout time.  */
+-      dataset->head.timeout = time (NULL) + (ttl == INT32_MAX
+-					     ? db->postimeout : ttl);
++      dataset->head.ttl = ttl == INT32_MAX ? db->postimeout : ttl;
++      timeout = dataset->head.timeout = time (NULL) + dataset->head.ttl;
+ 
+       dataset->resp.version = NSCD_VERSION;
+       dataset->resp.found = 1;
+@@ -421,6 +422,7 @@ addhstaiX (struct database_dyn *db, int 
+ 		 timeout value.  Note that the new record has been
+ 		 allocated on the stack and need not be freed.  */
+ 	      dh->timeout = dataset->head.timeout;
++	      dh->ttl = dataset->head.ttl;
+ 	      ++dh->nreloads;
+ 	    }
+ 	  else
+@@ -496,6 +498,9 @@ next_nip:
+       if (reload_count != UINT_MAX && dh->nreloads == reload_count)
+ 	/* Do not reset the value if we never not reload the record.  */
+ 	dh->nreloads = reload_count - 1;
++
++      /* Reload with the same time-to-live value.  */
++      timeout = dh->timeout = time (NULL) + dh->ttl;
+     }
+   else
+     {
+@@ -517,7 +522,8 @@ next_nip:
+ 	  dataset->head.usable = true;
+ 
+ 	  /* Compute the timeout time.  */
+-	  dataset->head.timeout = time (NULL) + db->negtimeout;
++	  timeout = dataset->head.timeout = time (NULL) + db->negtimeout;
++	  dataset->head.ttl = db->negtimeout;
+ 
+ 	  /* This is the reply.  */
+ 	  memcpy (&dataset->resp, &notfound, total);
+@@ -551,6 +557,8 @@ next_nip:
+       if (dh != NULL)
+ 	dh->usable = false;
+     }
++
++  return timeout;
+ }
+ 
+ 
+@@ -562,7 +570,7 @@ addhstai (struct database_dyn *db, int f
+ }
+ 
+ 
+-void
++time_t
+ readdhstai (struct database_dyn *db, struct hashentry *he, struct datahead *dh)
+ {
+   request_header req =
+@@ -571,5 +579,5 @@ readdhstai (struct database_dyn *db, str
+       .key_len = he->len
+     };
+ 
+-  addhstaiX (db, -1, &req, db->data + he->key, he->owner, he, dh);
++  return addhstaiX (db, -1, &req, db->data + he->key, he->owner, he, dh);
+ }
+Index: glibc-2.12-2-gc4ccff1/nscd/cache.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nscd/cache.c
++++ glibc-2.12-2-gc4ccff1/nscd/cache.c
+@@ -45,9 +45,9 @@ extern void *xcalloc (size_t n, size_t s
+ unsigned int reload_count = DEFAULT_RELOAD_LIMIT;
+ 
+ 
+-static void (*const readdfcts[LASTREQ]) (struct database_dyn *,
+-					 struct hashentry *,
+-					 struct datahead *) =
++static time_t (*const readdfcts[LASTREQ]) (struct database_dyn *,
++					   struct hashentry *,
++					   struct datahead *) =
+ {
+   [GETPWBYNAME] = readdpwbyname,
+   [GETPWBYUID] = readdpwbyuid,
+@@ -389,7 +389,8 @@ prune_cache (struct database_dyn *table,
+ 		      assert (runp->type < LASTREQ
+ 			      && readdfcts[runp->type] != NULL);
+ 
+-		      readdfcts[runp->type] (table, runp, dh);
++		      time_t timeout = readdfcts[runp->type] (table, runp, dh);
++		      next_timeout = MIN (next_timeout, timeout);
+ 
+ 		      /* If the entry has been replaced, we might need
+ 			 cleanup.  */
+Index: glibc-2.12-2-gc4ccff1/nscd/connections.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nscd/connections.c
++++ glibc-2.12-2-gc4ccff1/nscd/connections.c
+@@ -1533,10 +1533,7 @@ nscd_run_prune (void *p)
+ 	     pruning we want to know about it.  Therefore set the
+ 	     timeout to the maximum.  It will be descreased when adding
+ 	     new entries to the cache, if necessary.  */
+-	  if (sizeof (time_t) == sizeof (long int))
+-	    dbs[my_number].wakeup_time = LONG_MAX;
+-	  else
+-	    dbs[my_number].wakeup_time = INT_MAX;
++	  dbs[my_number].wakeup_time = MAX_TIMEOUT_VALUE;
+ 
+ 	  /* Unconditionally reset the flag.  */
+ 	  time_t prune_now = dbs[my_number].clear_cache ? LONG_MAX : now;
+Index: glibc-2.12-2-gc4ccff1/nscd/grpcache.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nscd/grpcache.c
++++ glibc-2.12-2-gc4ccff1/nscd/grpcache.c
+@@ -71,7 +71,7 @@ static const gr_response_header notfound
+ };
+ 
+ 
+-static void
++static time_t
+ cache_addgr (struct database_dyn *db, int fd, request_header *req,
+ 	     const void *key, struct group *grp, uid_t owner,
+ 	     struct hashentry *const he, struct datahead *dh, int errval)
+@@ -91,6 +91,7 @@ cache_addgr (struct database_dyn *db, in
+ 
+   assert (offsetof (struct dataset, resp) == offsetof (struct datahead, data));
+ 
++  time_t timeout = MAX_TIMEOUT_VALUE;
+   if (grp == NULL)
+     {
+       if (he != NULL && errval == EAGAIN)
+@@ -102,6 +103,9 @@ cache_addgr (struct database_dyn *db, in
+ 	    /* Do not reset the value if we never not reload the record.  */
+ 	    dh->nreloads = reload_count - 1;
+ 
++	  /* Reload with the same time-to-live value.  */
++	  timeout = dh->timeout = t + db->postimeout;
++
+ 	  written = total = 0;
+ 	}
+       else
+@@ -125,7 +129,7 @@ cache_addgr (struct database_dyn *db, in
+ 	      dataset->head.usable = true;
+ 
+ 	      /* Compute the timeout time.  */
+-	      dataset->head.timeout = t + db->negtimeout;
++	      timeout = dataset->head.timeout = t + db->negtimeout;
+ 
+ 	      /* This is the reply.  */
+ 	      memcpy (&dataset->resp, &notfound, total);
+@@ -217,7 +221,7 @@ cache_addgr (struct database_dyn *db, in
+       dataset->head.usable = true;
+ 
+       /* Compute the timeout time.  */
+-      dataset->head.timeout = t + db->postimeout;
++      timeout = dataset->head.timeout = t + db->postimeout;
+ 
+       dataset->resp.version = NSCD_VERSION;
+       dataset->resp.found = 1;
+@@ -379,6 +383,8 @@ cache_addgr (struct database_dyn *db, in
+       dbg_log (_("short write in %s: %s"),  __FUNCTION__,
+ 	       strerror_r (errno, buf, sizeof (buf)));
+     }
++
++  return timeout;
+ }
+ 
+ 
+@@ -400,7 +406,7 @@ lookup (int type, union keytype key, str
+ }
+ 
+ 
+-static void
++static time_t
+ addgrbyX (struct database_dyn *db, int fd, request_header *req,
+ 	  union keytype key, const char *keystr, uid_t uid,
+ 	  struct hashentry *he, struct datahead *dh)
+@@ -456,10 +462,12 @@ addgrbyX (struct database_dyn *db, int f
+ 	buffer = (char *) extend_alloca (buffer, buflen, 2 * buflen);
+     }
+ 
+-  cache_addgr (db, fd, req, keystr, grp, uid, he, dh, errval);
++  time_t timeout = cache_addgr (db, fd, req, keystr, grp, uid, he, dh, errval);
+ 
+   if (use_malloc)
+     free (buffer);
++
++  return timeout;
+ }
+ 
+ 
+@@ -473,7 +481,7 @@ addgrbyname (struct database_dyn *db, in
+ }
+ 
+ 
+-void
++time_t
+ readdgrbyname (struct database_dyn *db, struct hashentry *he,
+ 	       struct datahead *dh)
+ {
+@@ -484,7 +492,7 @@ readdgrbyname (struct database_dyn *db, 
+     };
+   union keytype u = { .v = db->data + he->key };
+ 
+-  addgrbyX (db, -1, &req, u, db->data + he->key, he->owner, he, dh);
++  return addgrbyX (db, -1, &req, u, db->data + he->key, he->owner, he, dh);
+ }
+ 
+ 
+@@ -510,7 +518,7 @@ addgrbygid (struct database_dyn *db, int
+ }
+ 
+ 
+-void
++time_t
+ readdgrbygid (struct database_dyn *db, struct hashentry *he,
+ 	      struct datahead *dh)
+ {
+@@ -527,5 +535,5 @@ readdgrbygid (struct database_dyn *db, s
+     };
+   union keytype u = { .g = gid };
+ 
+-  addgrbyX (db, -1, &req, u, db->data + he->key, he->owner, he, dh);
++  return addgrbyX (db, -1, &req, u, db->data + he->key, he->owner, he, dh);
+ }
+Index: glibc-2.12-2-gc4ccff1/nscd/hstcache.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nscd/hstcache.c
++++ glibc-2.12-2-gc4ccff1/nscd/hstcache.c
+@@ -91,7 +91,7 @@ static const hst_response_header tryagai
+ };
+ 
+ 
+-static void
++static time_t
+ cache_addhst (struct database_dyn *db, int fd, request_header *req,
+ 	      const void *key, struct hostent *hst, uid_t owner,
+ 	      struct hashentry *const he, struct datahead *dh, int errval,
+@@ -111,6 +111,7 @@ cache_addhst (struct database_dyn *db, i
+ 
+   assert (offsetof (struct dataset, resp) == offsetof (struct datahead, data));
+ 
++  time_t timeout = MAX_TIMEOUT_VALUE;
+   if (hst == NULL)
+     {
+       if (he != NULL && errval == EAGAIN)
+@@ -121,6 +122,9 @@ cache_addhst (struct database_dyn *db, i
+ 	  if (reload_count != UINT_MAX)
+ 	    /* Do not reset the value if we never not reload the record.  */
+ 	    dh->nreloads = reload_count - 1;
++
++	  /* Reload with the same time-to-live value.  */
++	  timeout = dh->timeout = t + dh->ttl;
+ 	}
+       else
+ 	{
+@@ -149,8 +153,8 @@ cache_addhst (struct database_dyn *db, i
+ 	      dataset->head.usable = true;
+ 
+ 	      /* Compute the timeout time.  */
+-	      dataset->head.timeout = t + (ttl == INT32_MAX
+-					   ? db->negtimeout : ttl);
++	      dataset->head.ttl = ttl == INT32_MAX ? db->negtimeout : ttl;
++	      timeout = dataset->head.timeout = t + dataset->head.ttl;
+ 
+ 	      /* This is the reply.  */
+ 	      memcpy (&dataset->resp, resp, total);
+@@ -214,7 +218,7 @@ cache_addhst (struct database_dyn *db, i
+ 
+       if (h_addr_list_cnt == 0)
+ 	/* Invalid entry.  */
+-	return;
++	return MAX_TIMEOUT_VALUE;
+ 
+       total += (sizeof (struct dataset)
+ 		+ h_name_len
+@@ -255,7 +259,8 @@ cache_addhst (struct database_dyn *db, i
+       dataset->head.usable = true;
+ 
+       /* Compute the timeout time.  */
+-      dataset->head.timeout = t + (ttl == INT32_MAX ? db->postimeout : ttl);
++      dataset->head.ttl = ttl == INT32_MAX ? db->postimeout : ttl;
++      timeout = dataset->head.timeout = t + dataset->head.ttl;
+ 
+       dataset->resp.version = NSCD_VERSION;
+       dataset->resp.found = 1;
+@@ -312,6 +317,7 @@ cache_addhst (struct database_dyn *db, i
+ 		 timeout value.  Note that the new record has been
+ 		 allocated on the stack and need not be freed.  */
+ 	      assert (h_addr_list_cnt == 1);
++	      dh->ttl = dataset->head.ttl;
+ 	      dh->timeout = dataset->head.timeout;
+ 	      ++dh->nreloads;
+ 	    }
+@@ -433,6 +439,8 @@ cache_addhst (struct database_dyn *db, i
+       dbg_log (_("short write in %s: %s"),  __FUNCTION__,
+ 	       strerror_r (errno, buf, sizeof (buf)));
+     }
++
++  return timeout;
+ }
+ 
+ 
+@@ -454,7 +462,7 @@ lookup (int type, void *key, struct host
+ }
+ 
+ 
+-static void
++static time_t
+ addhstbyX (struct database_dyn *db, int fd, request_header *req,
+ 	   void *key, uid_t uid, struct hashentry *he, struct datahead *dh)
+ {
+@@ -520,11 +528,13 @@ addhstbyX (struct database_dyn *db, int 
+ 	buffer = (char *) extend_alloca (buffer, buflen, 2 * buflen);
+     }
+ 
+-  cache_addhst (db, fd, req, key, hst, uid, he, dh,
+-		h_errno == TRY_AGAIN ? errval : 0, ttl);
++  time_t timeout = cache_addhst (db, fd, req, key, hst, uid, he, dh,
++				 h_errno == TRY_AGAIN ? errval : 0, ttl);
+ 
+   if (use_malloc)
+     free (buffer);
++
++  return timeout;
+ }
+ 
+ 
+@@ -536,7 +546,7 @@ addhstbyname (struct database_dyn *db, i
+ }
+ 
+ 
+-void
++time_t
+ readdhstbyname (struct database_dyn *db, struct hashentry *he,
+ 		struct datahead *dh)
+ {
+@@ -546,7 +556,7 @@ readdhstbyname (struct database_dyn *db,
+       .key_len = he->len
+     };
+ 
+-  addhstbyX (db, -1, &req, db->data + he->key, he->owner, he, dh);
++  return addhstbyX (db, -1, &req, db->data + he->key, he->owner, he, dh);
+ }
+ 
+ 
+@@ -558,7 +568,7 @@ addhstbyaddr (struct database_dyn *db, i
+ }
+ 
+ 
+-void
++time_t
+ readdhstbyaddr (struct database_dyn *db, struct hashentry *he,
+ 		struct datahead *dh)
+ {
+@@ -568,7 +578,7 @@ readdhstbyaddr (struct database_dyn *db,
+       .key_len = he->len
+     };
+ 
+-  addhstbyX (db, -1, &req, db->data + he->key, he->owner, he, dh);
++  return addhstbyX (db, -1, &req, db->data + he->key, he->owner, he, dh);
+ }
+ 
+ 
+@@ -580,7 +590,7 @@ addhstbynamev6 (struct database_dyn *db,
+ }
+ 
+ 
+-void
++time_t
+ readdhstbynamev6 (struct database_dyn *db, struct hashentry *he,
+ 		  struct datahead *dh)
+ {
+@@ -590,7 +600,7 @@ readdhstbynamev6 (struct database_dyn *d
+       .key_len = he->len
+     };
+ 
+-  addhstbyX (db, -1, &req, db->data + he->key, he->owner, he, dh);
++  return addhstbyX (db, -1, &req, db->data + he->key, he->owner, he, dh);
+ }
+ 
+ 
+@@ -602,7 +612,7 @@ addhstbyaddrv6 (struct database_dyn *db,
+ }
+ 
+ 
+-void
++time_t
+ readdhstbyaddrv6 (struct database_dyn *db, struct hashentry *he,
+ 		  struct datahead *dh)
+ {
+@@ -612,5 +622,5 @@ readdhstbyaddrv6 (struct database_dyn *d
+       .key_len = he->len
+     };
+ 
+-  addhstbyX (db, -1, &req, db->data + he->key, he->owner, he, dh);
++  return addhstbyX (db, -1, &req, db->data + he->key, he->owner, he, dh);
+ }
+Index: glibc-2.12-2-gc4ccff1/nscd/initgrcache.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nscd/initgrcache.c
++++ glibc-2.12-2-gc4ccff1/nscd/initgrcache.c
+@@ -52,7 +52,7 @@ static const initgr_response_header notf
+ #include "../grp/compat-initgroups.c"
+ 
+ 
+-static void
++static time_t
+ addinitgroupsX (struct database_dyn *db, int fd, request_header *req,
+ 		void *key, uid_t uid, struct hashentry *const he,
+ 		struct datahead *dh)
+@@ -174,7 +174,9 @@ addinitgroupsX (struct database_dyn *db,
+ 
+   ssize_t total;
+   ssize_t written;
++  time_t timeout;
+  out:
++  timeout = MAX_TIMEOUT_VALUE;
+   if (!any_success)
+     {
+       /* Nothing found.  Create a negative result record.  */
+@@ -188,6 +190,9 @@ addinitgroupsX (struct database_dyn *db,
+ 	  if (reload_count != UINT_MAX && dh->nreloads == reload_count)
+ 	    /* Do not reset the value if we never not reload the record.  */
+ 	    dh->nreloads = reload_count - 1;
++
++	  /* Reload with the same time-to-live value.  */
++	  timeout = dh->timeout = time (NULL) + db->postimeout;
+ 	}
+       else
+ 	{
+@@ -209,7 +214,7 @@ addinitgroupsX (struct database_dyn *db,
+ 	      dataset->head.usable = true;
+ 
+ 	      /* Compute the timeout time.  */
+-	      dataset->head.timeout = time (NULL) + db->negtimeout;
++	      timeout = dataset->head.timeout = time (NULL) + db->negtimeout;
+ 
+ 	      /* This is the reply.  */
+ 	      memcpy (&dataset->resp, &notfound, total);
+@@ -273,7 +278,7 @@ addinitgroupsX (struct database_dyn *db,
+       dataset->head.usable = true;
+ 
+       /* Compute the timeout time.  */
+-      dataset->head.timeout = time (NULL) + db->postimeout;
++      timeout = dataset->head.timeout = time (NULL) + db->postimeout;
+ 
+       dataset->resp.version = NSCD_VERSION;
+       dataset->resp.found = 1;
+@@ -401,6 +406,8 @@ addinitgroupsX (struct database_dyn *db,
+       dbg_log (_("short write in %s: %s"), __FUNCTION__,
+ 	       strerror_r (errno, buf, sizeof (buf)));
+     }
++
++  return timeout;
+ }
+ 
+ 
+@@ -412,7 +419,7 @@ addinitgroups (struct database_dyn *db, 
+ }
+ 
+ 
+-void
++time_t
+ readdinitgroups (struct database_dyn *db, struct hashentry *he,
+ 		 struct datahead *dh)
+ {
+@@ -422,5 +429,5 @@ readdinitgroups (struct database_dyn *db
+       .key_len = he->len
+     };
+ 
+-  addinitgroupsX (db, -1, &req, db->data + he->key, he->owner, he, dh);
++  return addinitgroupsX (db, -1, &req, db->data + he->key, he->owner, he, dh);
+ }
+Index: glibc-2.12-2-gc4ccff1/nscd/nscd-client.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nscd/nscd-client.h
++++ glibc-2.12-2-gc4ccff1/nscd/nscd-client.h
+@@ -179,6 +179,10 @@ typedef uint32_t ref_t;
+ /* Timestamp type.  */
+ typedef uint64_t nscd_time_t;
+ 
++/* Maximum timestamp.  */
++#define MAX_TIMEOUT_VALUE \
++  (sizeof (time_t) == sizeof (long int) ? LONG_MAX : INT_MAX)
++
+ /* Alignment requirement of the beginning of the data region.  */
+ #define ALIGN 16
+ 
+@@ -192,7 +196,8 @@ struct datahead
+   uint8_t notfound;		/* Nonzero if data has not been found.  */
+   uint8_t nreloads;		/* Reloads without use.  */
+   uint8_t usable;		/* False if the entry must be ignored.  */
+-  uint64_t :40;			/* Alignment.  */
++  uint8_t unused;		/* Unused.  */
++  uint32_t ttl;			/* TTL value used.  */
+ 
+   /* We need to have the following element aligned for the response
+      header data types and their use in the 'struct dataset' types
+Index: glibc-2.12-2-gc4ccff1/nscd/nscd.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nscd/nscd.h
++++ glibc-2.12-2-gc4ccff1/nscd/nscd.h
+@@ -217,20 +217,20 @@ extern void addpwbyname (struct database
+ 			 void *key, uid_t uid);
+ extern void addpwbyuid (struct database_dyn *db, int fd, request_header *req,
+ 			void *key, uid_t uid);
+-extern void readdpwbyname (struct database_dyn *db, struct hashentry *he,
+-			   struct datahead *dh);
+-extern void readdpwbyuid (struct database_dyn *db, struct hashentry *he,
+-			  struct datahead *dh);
++extern time_t readdpwbyname (struct database_dyn *db, struct hashentry *he,
++			     struct datahead *dh);
++extern time_t readdpwbyuid (struct database_dyn *db, struct hashentry *he,
++			    struct datahead *dh);
+ 
+ /* grpcache.c */
+ extern void addgrbyname (struct database_dyn *db, int fd, request_header *req,
+ 			 void *key, uid_t uid);
+ extern void addgrbygid (struct database_dyn *db, int fd, request_header *req,
+ 			void *key, uid_t uid);
+-extern void readdgrbyname (struct database_dyn *db, struct hashentry *he,
+-			   struct datahead *dh);
+-extern void readdgrbygid (struct database_dyn *db, struct hashentry *he,
+-			  struct datahead *dh);
++extern time_t readdgrbyname (struct database_dyn *db, struct hashentry *he,
++			     struct datahead *dh);
++extern time_t readdgrbygid (struct database_dyn *db, struct hashentry *he,
++			    struct datahead *dh);
+ 
+ /* hstcache.c */
+ extern void addhstbyname (struct database_dyn *db, int fd, request_header *req,
+@@ -241,37 +241,37 @@ extern void addhstbynamev6 (struct datab
+ 			    request_header *req, void *key, uid_t uid);
+ extern void addhstbyaddrv6 (struct database_dyn *db, int fd,
+ 			    request_header *req, void *key, uid_t uid);
+-extern void readdhstbyname (struct database_dyn *db, struct hashentry *he,
+-			    struct datahead *dh);
+-extern void readdhstbyaddr (struct database_dyn *db, struct hashentry *he,
+-			    struct datahead *dh);
+-extern void readdhstbynamev6 (struct database_dyn *db, struct hashentry *he,
++extern time_t readdhstbyname (struct database_dyn *db, struct hashentry *he,
+ 			      struct datahead *dh);
+-extern void readdhstbyaddrv6 (struct database_dyn *db, struct hashentry *he,
++extern time_t readdhstbyaddr (struct database_dyn *db, struct hashentry *he,
+ 			      struct datahead *dh);
++extern time_t readdhstbynamev6 (struct database_dyn *db, struct hashentry *he,
++				struct datahead *dh);
++extern time_t readdhstbyaddrv6 (struct database_dyn *db, struct hashentry *he,
++				struct datahead *dh);
+ 
+ /* aicache.c */
+ extern void addhstai (struct database_dyn *db, int fd, request_header *req,
+ 		      void *key, uid_t uid);
+-extern void readdhstai (struct database_dyn *db, struct hashentry *he,
+-			struct datahead *dh);
++extern time_t readdhstai (struct database_dyn *db, struct hashentry *he,
++			  struct datahead *dh);
+ 
+ 
+ /* initgrcache.c */
+ extern void addinitgroups (struct database_dyn *db, int fd,
+ 			   request_header *req, void *key, uid_t uid);
+-extern void readdinitgroups (struct database_dyn *db, struct hashentry *he,
+-			     struct datahead *dh);
++extern time_t readdinitgroups (struct database_dyn *db, struct hashentry *he,
++			       struct datahead *dh);
+ 
+ /* servicecache.c */
+ extern void addservbyname (struct database_dyn *db, int fd,
+ 			   request_header *req, void *key, uid_t uid);
+-extern void readdservbyname (struct database_dyn *db, struct hashentry *he,
+-			     struct datahead *dh);
++extern time_t readdservbyname (struct database_dyn *db, struct hashentry *he,
++			       struct datahead *dh);
+ extern void addservbyport (struct database_dyn *db, int fd,
+ 			   request_header *req, void *key, uid_t uid);
+-extern void readdservbyport (struct database_dyn *db, struct hashentry *he,
+-			     struct datahead *dh);
++extern time_t readdservbyport (struct database_dyn *db, struct hashentry *he,
++			       struct datahead *dh);
+ 
+ /* mem.c */
+ extern void *mempool_alloc (struct database_dyn *db, size_t len,
+Index: glibc-2.12-2-gc4ccff1/nscd/pwdcache.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nscd/pwdcache.c
++++ glibc-2.12-2-gc4ccff1/nscd/pwdcache.c
+@@ -77,7 +77,7 @@ static const pw_response_header notfound
+ };
+ 
+ 
+-static void
++static time_t
+ cache_addpw (struct database_dyn *db, int fd, request_header *req,
+ 	     const void *key, struct passwd *pwd, uid_t owner,
+ 	     struct hashentry *const he, struct datahead *dh, int errval)
+@@ -97,6 +97,7 @@ cache_addpw (struct database_dyn *db, in
+ 
+   assert (offsetof (struct dataset, resp) == offsetof (struct datahead, data));
+ 
++  time_t timeout = MAX_TIMEOUT_VALUE;
+   if (pwd == NULL)
+     {
+       if (he != NULL && errval == EAGAIN)
+@@ -108,6 +109,9 @@ cache_addpw (struct database_dyn *db, in
+ 	    /* Do not reset the value if we never not reload the record.  */
+ 	    dh->nreloads = reload_count - 1;
+ 
++	  /* Reload with the same time-to-live value.  */
++	  timeout = dh->timeout = t + db->postimeout;
++
+ 	  written = total = 0;
+ 	}
+       else
+@@ -132,7 +136,7 @@ cache_addpw (struct database_dyn *db, in
+ 	      dataset->head.usable = true;
+ 
+ 	      /* Compute the timeout time.  */
+-	      dataset->head.timeout = t + db->negtimeout;
++	      timeout = dataset->head.timeout = t + db->negtimeout;
+ 
+ 	      /* This is the reply.  */
+ 	      memcpy (&dataset->resp, &notfound, total);
+@@ -212,7 +216,7 @@ cache_addpw (struct database_dyn *db, in
+       dataset->head.usable = true;
+ 
+       /* Compute the timeout time.  */
+-      dataset->head.timeout = t + db->postimeout;
++      timeout = dataset->head.timeout = t + db->postimeout;
+ 
+       dataset->resp.version = NSCD_VERSION;
+       dataset->resp.found = 1;
+@@ -293,8 +297,8 @@ cache_addpw (struct database_dyn *db, in
+ 	      assert ((char *) dataset - (char *) db->head
+ 		      + total
+ 		      <= (sizeof (struct database_pers_head)
+-                          + db->head->module * sizeof (ref_t)
+-                          + db->head->data_size));
++			  + db->head->module * sizeof (ref_t)
++			  + db->head->data_size));
+ 	      written = sendfileall (fd, db->wr_fd,
+ 				     (char *) &dataset->resp
+ 				     - (char *) db->head, dataset->head.recsize );
+@@ -374,6 +378,8 @@ cache_addpw (struct database_dyn *db, in
+       dbg_log (_("short write in %s: %s"),  __FUNCTION__,
+ 	       strerror_r (errno, buf, sizeof (buf)));
+     }
++
++  return timeout;
+ }
+ 
+ 
+@@ -395,7 +401,7 @@ lookup (int type, union keytype key, str
+ }
+ 
+ 
+-static void
++static time_t
+ addpwbyX (struct database_dyn *db, int fd, request_header *req,
+ 	  union keytype key, const char *keystr, uid_t c_uid,
+ 	  struct hashentry *he, struct datahead *dh)
+@@ -452,10 +458,13 @@ addpwbyX (struct database_dyn *db, int f
+     }
+ 
+   /* Add the entry to the cache.  */
+-  cache_addpw (db, fd, req, keystr, pwd, c_uid, he, dh, errval);
++  time_t timeout = cache_addpw (db, fd, req, keystr, pwd, c_uid, he, dh,
++				errval);
+ 
+   if (use_malloc)
+     free (buffer);
++
++  return timeout;
+ }
+ 
+ 
+@@ -469,7 +478,7 @@ addpwbyname (struct database_dyn *db, in
+ }
+ 
+ 
+-void
++time_t
+ readdpwbyname (struct database_dyn *db, struct hashentry *he,
+ 	       struct datahead *dh)
+ {
+@@ -480,7 +489,7 @@ readdpwbyname (struct database_dyn *db, 
+     };
+   union keytype u = { .v = db->data + he->key };
+ 
+-  addpwbyX (db, -1, &req, u, db->data + he->key, he->owner, he, dh);
++  return addpwbyX (db, -1, &req, u, db->data + he->key, he->owner, he, dh);
+ }
+ 
+ 
+@@ -506,7 +515,7 @@ addpwbyuid (struct database_dyn *db, int
+ }
+ 
+ 
+-void
++time_t
+ readdpwbyuid (struct database_dyn *db, struct hashentry *he,
+ 	      struct datahead *dh)
+ {
+@@ -523,5 +532,5 @@ readdpwbyuid (struct database_dyn *db, s
+     };
+   union keytype u = { .u = uid };
+ 
+-  addpwbyX (db, -1, &req, u, db->data + he->key, he->owner, he, dh);
++  return addpwbyX (db, -1, &req, u, db->data + he->key, he->owner, he, dh);
+ }
+Index: glibc-2.12-2-gc4ccff1/nscd/servicescache.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nscd/servicescache.c
++++ glibc-2.12-2-gc4ccff1/nscd/servicescache.c
+@@ -61,7 +61,7 @@ static const serv_response_header notfou
+ };
+ 
+ 
+-static void
++static time_t
+ cache_addserv (struct database_dyn *db, int fd, request_header *req,
+ 	       const void *key, struct servent *serv, uid_t owner,
+ 	       struct hashentry *const he, struct datahead *dh, int errval)
+@@ -81,6 +81,7 @@ cache_addserv (struct database_dyn *db, 
+ 
+   assert (offsetof (struct dataset, resp) == offsetof (struct datahead, data));
+ 
++  time_t timeout = MAX_TIMEOUT_VALUE;
+   if (serv == NULL)
+     {
+       if (he != NULL && errval == EAGAIN)
+@@ -92,6 +93,9 @@ cache_addserv (struct database_dyn *db, 
+ 	    /* Do not reset the value if we never not reload the record.  */
+ 	    dh->nreloads = reload_count - 1;
+ 
++	  /* Reload with the same time-to-live value.  */
++	  timeout = dh->timeout = t + db->postimeout;
++
+ 	  written = total = 0;
+ 	}
+       else
+@@ -115,7 +119,7 @@ cache_addserv (struct database_dyn *db, 
+ 	      dataset->head.usable = true;
+ 
+ 	      /* Compute the timeout time.  */
+-	      dataset->head.timeout = t + db->negtimeout;
++	      timeout = dataset->head.timeout = t + db->negtimeout;
+ 
+ 	      /* This is the reply.  */
+ 	      memcpy (&dataset->resp, &notfound, total);
+@@ -203,7 +207,7 @@ cache_addserv (struct database_dyn *db, 
+       dataset->head.usable = true;
+ 
+       /* Compute the timeout time.  */
+-      dataset->head.timeout = t + db->postimeout;
++      timeout = dataset->head.timeout = t + db->postimeout;
+ 
+       dataset->resp.version = NSCD_VERSION;
+       dataset->resp.found = 1;
+@@ -328,6 +332,8 @@ cache_addserv (struct database_dyn *db, 
+       dbg_log (_("short write in %s: %s"),  __FUNCTION__,
+ 	       strerror_r (errno, buf, sizeof (buf)));
+     }
++
++  return timeout;
+ }
+ 
+ 
+@@ -354,7 +360,7 @@ lookup (int type, char *key, struct serv
+ }
+ 
+ 
+-static void
++static time_t
+ addservbyX (struct database_dyn *db, int fd, request_header *req,
+ 	    char *key, uid_t uid, struct hashentry *he, struct datahead *dh)
+ {
+@@ -409,10 +415,12 @@ addservbyX (struct database_dyn *db, int
+ 	buffer = (char *) extend_alloca (buffer, buflen, 2 * buflen);
+     }
+ 
+-  cache_addserv (db, fd, req, key, serv, uid, he, dh, errval);
++  time_t timeout = cache_addserv (db, fd, req, key, serv, uid, he, dh, errval);
+ 
+   if (use_malloc)
+     free (buffer);
++
++  return timeout;
+ }
+ 
+ 
+@@ -424,7 +432,7 @@ addservbyname (struct database_dyn *db, 
+ }
+ 
+ 
+-void
++time_t
+ readdservbyname (struct database_dyn *db, struct hashentry *he,
+ 		 struct datahead *dh)
+ {
+@@ -434,7 +442,7 @@ readdservbyname (struct database_dyn *db
+       .key_len = he->len
+     };
+ 
+-  addservbyX (db, -1, &req, db->data + he->key, he->owner, he, dh);
++  return addservbyX (db, -1, &req, db->data + he->key, he->owner, he, dh);
+ }
+ 
+ 
+@@ -446,7 +454,7 @@ addservbyport (struct database_dyn *db, 
+ }
+ 
+ 
+-void
++time_t
+ readdservbyport (struct database_dyn *db, struct hashentry *he,
+ 		 struct datahead *dh)
+ {
+@@ -456,5 +464,5 @@ readdservbyport (struct database_dyn *db
+       .key_len = he->len
+     };
+ 
+-  addservbyX (db, -1, &req, db->data + he->key, he->owner, he, dh);
++  return addservbyX (db, -1, &req, db->data + he->key, he->owner, he, dh);
+ }
diff --git a/SOURCES/glibc-rh705465.patch b/SOURCES/glibc-rh705465.patch
new file mode 100644
index 0000000..63b971e
--- /dev/null
+++ b/SOURCES/glibc-rh705465.patch
@@ -0,0 +1,449 @@
+2011-11-07  Andreas Schwab  <schwab@redhat.com>
+
+	* nss/nss_files/files-initgroups.c (_nss_files_initgroups_dyn):
+	Fix size of allocated buffer.
+
+2011-05-10  Ulrich Drepper  <drepper@gmail.com>
+
+	[BZ #11257]
+	* grp/initgroups.c (internal_getgrouplist): When we found the service
+	list through the initgroups entry in nsswitch.conf do not always
+	continue on a successful lookup.  Don't always use the
+	__nss_group_data-ase value if it is set.
+	* nss/nsswitch.conf (initgroups): Change action for successful db
+	lookup to continue for compatibility.
+
+2011-05-06  Ulrich Drepper  <drepper@gmail.com>
+
+	* nss/nss_files/files-initgroups.c (_nss_files_initgroups_dyn): Return
+	NSS_STATUS_NOTFOUND if no record was found.
+
+2011-04-29  Ulrich Drepper  <drepper@gmail.com>
+
+	* grp/initgroups.c (internal_getgrouplist): Prefer initgroups setting
+	to groups setting in database lookup.
+	* nss/nsswitch.conf: Add initgroups entry.
+
+2011-04-21  Ulrich Drepper  <drepper@gmail.com>
+
+	* nss/nss_files/files-initgroups.c (_nss_files_initgroups_dyn): Fix
+	problem in reallocation in last patch.
+
+2011-04-19  Ulrich Drepper  <drepper@gmail.com>
+
+	* nss/nss_files/files-initgroups.c: New file.
+	* nss/Makefile (libnss_files-routines): Add files-initgroups.
+	* nss/Versions (libnss_files) [GLIBC_PRIVATE]: Export
+	_nss_files_initgroups_dyn.
+
+2011-01-13  Ulrich Drepper  <drepper@gmail.com>
+
+	[BZ #10484]
+	* nss/nss_files/files-hosts.c (HOST_DB_LOOKUP): Handle overflows of
+	temporary buffer used to handle multi lookups locally.
+	* include/alloca.h: Add libc_hidden_proto for __libc_alloca_cutoff.
+
+2011-01-13  Ulrich Drepper  <drepper@gmail.com>
+
+	[BZ #10484]
+	* Versions [libc] (GLIBC_PRIVATE): Export __libc_alloca_cutoff.
+	* alloca_cutoff.c: Add libc_hidden_def.
+
+Index: glibc-2.12-2-gc4ccff1/grp/initgroups.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/grp/initgroups.c
++++ glibc-2.12-2-gc4ccff1/grp/initgroups.c
+@@ -43,6 +43,8 @@ extern int __nss_group_lookup (service_u
+ extern void *__nss_lookup_function (service_user *ni, const char *fct_name);
+ 
+ extern service_user *__nss_group_database attribute_hidden;
++static service_user *initgroups_database;
++static bool use_initgroups_entry;
+ 
+ 
+ #include "compat-initgroups.c"
+@@ -67,32 +69,41 @@ internal_getgrouplist (const char *user,
+     }
+ #endif
+ 
+-  service_user *nip = NULL;
+-  initgroups_dyn_function fct;
+   enum nss_status status = NSS_STATUS_UNAVAIL;
+-  int no_more;
+-  /* Start is one, because we have the first group as parameter.  */
+-  long int start = 1;
++  int no_more = 0;
+ 
+   /* Never store more than the starting *SIZE number of elements.  */
+   assert (*size > 0);
+   (*groupsp)[0] = group;
++  /* Start is one, because we have the first group as parameter.  */
++  long int start = 1;
+ 
+-  if (__nss_group_database != NULL)
++  if (initgroups_database == NULL)
+     {
+-      no_more = 0;
+-      nip = __nss_group_database;
++      no_more = __nss_database_lookup ("initgroups", NULL, "",
++				       &initgroups_database);
++      if (no_more == 0 && initgroups_database == NULL)
++	{
++	  if (__nss_group_database == NULL)
++	    no_more = __nss_database_lookup ("group", NULL, "compat files",
++					     &__nss_group_database);
++
++	  initgroups_database = __nss_group_database;
++	}
++      else if (initgroups_database != NULL)
++	{
++	  assert (no_more == 0);
++	  use_initgroups_entry = true;
++	}
+     }
+-  else
+-    no_more = __nss_database_lookup ("group", NULL,
+-				     "compat [NOTFOUND=return] files", &nip);
+ 
++  service_user *nip = initgroups_database;
+   while (! no_more)
+     {
+       long int prev_start = start;
+ 
+-      fct = __nss_lookup_function (nip, "initgroups_dyn");
+-
++      initgroups_dyn_function fct = __nss_lookup_function (nip,
++							   "initgroups_dyn");
+       if (fct == NULL)
+ 	status = compat_call (nip, user, group, &start, size, groupsp,
+ 			      limit, &errno);
+@@ -119,7 +130,13 @@ internal_getgrouplist (const char *user,
+       if (NSS_STATUS_TRYAGAIN > status || status > NSS_STATUS_RETURN)
+ 	__libc_fatal ("illegal status in internal_getgrouplist");
+ 
+-      if (status != NSS_STATUS_SUCCESS
++      /* For compatibility reason we will continue to look for more
++	 entries using the next service even though data has already
++	 been found if the nsswitch.conf file contained only a 'groups'
++	 line and no 'initgroups' line.  If the latter is available
++	 we always respect the status.  This means that the default
++	 for successful lookups is to return.  */
++      if ((use_initgroups_entry || status != NSS_STATUS_SUCCESS)
+ 	  && nss_next_action (nip, status) == NSS_ACTION_RETURN)
+ 	 break;
+ 
+Index: glibc-2.12-2-gc4ccff1/include/alloca.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/include/alloca.h
++++ glibc-2.12-2-gc4ccff1/include/alloca.h
+@@ -14,6 +14,7 @@ extern void *__alloca (size_t __size);
+ 
+ extern int __libc_use_alloca (size_t size) __attribute__ ((const));
+ extern int __libc_alloca_cutoff (size_t size) __attribute__ ((const));
++libc_hidden_proto (__libc_alloca_cutoff)
+ 
+ #define __MAX_ALLOCA_CUTOFF	65536
+ 
+Index: glibc-2.12-2-gc4ccff1/nptl/Versions
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nptl/Versions
++++ glibc-2.12-2-gc4ccff1/nptl/Versions
+@@ -27,6 +27,7 @@ libc {
+     pthread_cond_broadcast; pthread_cond_timedwait;
+   }
+   GLIBC_PRIVATE {
++    __libc_alloca_cutoff;
+     # Internal libc interface to libpthread
+     __libc_dl_error_tsd;
+   }
+Index: glibc-2.12-2-gc4ccff1/nptl/alloca_cutoff.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nptl/alloca_cutoff.c
++++ glibc-2.12-2-gc4ccff1/nptl/alloca_cutoff.c
+@@ -34,3 +34,4 @@ __libc_alloca_cutoff (size_t size)
+ 			  assume the maximum available stack space.  */
+ 		       ?: __MAX_ALLOCA_CUTOFF * 4));
+ }
++libc_hidden_def (__libc_alloca_cutoff)
+Index: glibc-2.12-2-gc4ccff1/nss/Makefile
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nss/Makefile
++++ glibc-2.12-2-gc4ccff1/nss/Makefile
+@@ -63,7 +63,7 @@ vpath %.c $(subdir-dirs)
+ 
+ 
+ libnss_files-routines	:= $(addprefix files-,$(databases)) \
+-			   files-have_o_cloexec
++			   files-initgroups files-have_o_cloexec
+ distribute		+= files-XXX.c files-parse.c
+ 
+ 
+Index: glibc-2.12-2-gc4ccff1/nss/Versions
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nss/Versions
++++ glibc-2.12-2-gc4ccff1/nss/Versions
+@@ -95,5 +95,7 @@ libnss_files {
+     _nss_netgroup_parseline;
+     _nss_files_getpublickey;
+     _nss_files_getsecretkey;
++
++    _nss_files_initgroups_dyn;
+   }
+ }
+Index: glibc-2.12-2-gc4ccff1/nss/nss_files/files-hosts.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nss/nss_files/files-hosts.c
++++ glibc-2.12-2-gc4ccff1/nss/nss_files/files-hosts.c
+@@ -129,19 +129,22 @@ _nss_files_get##name##_r (proto,					   
+ 	  && _res_hconf.flags & HCONF_FLAG_MULTI)			      \
+ 	{								      \
+ 	  /* We have to get all host entries from the file.  */		      \
+-	  const size_t tmp_buflen = MIN (buflen, 4096);			      \
+-	  char tmp_buffer[tmp_buflen]					      \
++	  size_t tmp_buflen = MIN (buflen, 4096);			      \
++	  char tmp_buffer_stack[tmp_buflen]				      \
+ 	    __attribute__ ((__aligned__ (__alignof__ (struct hostent_data))));\
++	  char *tmp_buffer = tmp_buffer_stack;				      \
+ 	  struct hostent tmp_result_buf;				      \
+ 	  int naddrs = 1;						      \
+ 	  int naliases = 0;						      \
+ 	  char *bufferend;						      \
++	  bool tmp_buffer_malloced = false;				      \
+ 									      \
+ 	  while (result->h_aliases[naliases] != NULL)			      \
+ 	    ++naliases;							      \
+ 									      \
+ 	  bufferend = (char *) &result->h_aliases[naliases + 1];	      \
+ 									      \
++	again:								      \
+ 	  while ((status = internal_getent (&tmp_result_buf, tmp_buffer,      \
+ 					    tmp_buflen, errnop H_ERRNO_ARG    \
+ 					    EXTRA_ARGS_VALUE))		      \
+@@ -182,7 +185,7 @@ _nss_files_get##name##_r (proto,					   
+ 		    }							      \
+ 		  /* If the real name is different add it also to the	      \
+ 		     aliases.  This means that there is a duplication	      \
+-		     in the alias list but this is really the users	      \
++		     in the alias list but this is really the user's	      \
+ 		     problem.  */					      \
+ 		  if (strcmp (old_result->h_name,			      \
+ 			      tmp_result_buf.h_name) != 0)		      \
+@@ -204,7 +207,7 @@ _nss_files_get##name##_r (proto,					   
+ 		      *errnop = ERANGE;					      \
+ 		      *herrnop = NETDB_INTERNAL;			      \
+ 		      status = NSS_STATUS_TRYAGAIN;			      \
+-		      break;						      \
++		      goto out;						      \
+ 		    }							      \
+ 									      \
+ 		  new_h_addr_list =					      \
+@@ -268,8 +271,54 @@ _nss_files_get##name##_r (proto,					   
+ 		}							      \
+ 	    }								      \
+ 									      \
+-	  if (status != NSS_STATUS_TRYAGAIN)				      \
++	  if (status == NSS_STATUS_TRYAGAIN)				      \
++	    {								      \
++	      size_t newsize = 2 * tmp_buflen;				      \
++	      if (tmp_buffer_malloced)					      \
++		{							      \
++		  char *newp = realloc (tmp_buffer, newsize);		      \
++		  if (newp != NULL)					      \
++		    {							      \
++		      assert ((((uintptr_t) newp)			      \
++			       & (__alignof__ (struct hostent_data) - 1))     \
++			      == 0);					      \
++		      tmp_buffer = newp;				      \
++		      tmp_buflen = newsize;				      \
++		      goto again;					      \
++		    }							      \
++		}							      \
++	      else if (!__libc_use_alloca (buflen + newsize))		      \
++		{							      \
++		  tmp_buffer = malloc (newsize);			      \
++		  if (tmp_buffer != NULL)				      \
++		    {							      \
++		      assert ((((uintptr_t) tmp_buffer)			      \
++			       & (__alignof__ (struct hostent_data) - 1))     \
++			      == 0);					      \
++		      tmp_buffer_malloced = true;			      \
++		      tmp_buflen = newsize;				      \
++		      goto again;					      \
++		    }							      \
++		}							      \
++	      else							      \
++		{							      \
++		  tmp_buffer						      \
++		    = extend_alloca (tmp_buffer, tmp_buflen,		      \
++				     newsize				      \
++				     + __alignof__ (struct hostent_data));    \
++		  tmp_buffer = (char *) (((uintptr_t) tmp_buffer	      \
++					  + __alignof__ (struct hostent_data) \
++					  - 1)				      \
++					 & ~(__alignof__ (struct hostent_data)\
++					     - 1));			      \
++		  goto again;						      \
++		}							      \
++	    }								      \
++	  else								      \
+ 	    status = NSS_STATUS_SUCCESS;				      \
++	out:								      \
++	  if (tmp_buffer_malloced)					      \
++	    free (tmp_buffer);						      \
+ 	}								      \
+ 									      \
+ 									      \
+Index: glibc-2.12-2-gc4ccff1/nss/nss_files/files-initgroups.c
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/nss/nss_files/files-initgroups.c
+@@ -0,0 +1,137 @@
++/* Initgroups handling in nss_files module.
++   Copyright (C) 2011 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library 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
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++#include <alloca.h>
++#include <errno.h>
++#include <grp.h>
++#include <nss.h>
++#include <stdio_ext.h>
++#include <string.h>
++#include <sys/param.h>
++
++enum nss_status
++_nss_files_initgroups_dyn (const char *user, gid_t group, long int *start,
++			   long int *size, gid_t **groupsp, long int limit,
++			   int *errnop)
++{
++  FILE *stream = fopen ("/etc/group", "re");
++  if (stream == NULL)
++    {
++      *errnop = errno;
++      return *errnop == ENOMEM ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL;
++    }
++
++  /* No other thread using this stream.  */
++  __fsetlocking (stream, FSETLOCKING_BYCALLER);
++
++  char *line = NULL;
++  size_t linelen = 0;
++  enum nss_status status = NSS_STATUS_SUCCESS;
++  bool any = false;
++
++  size_t buflen = 1024;
++  void *buffer = alloca (buflen);
++  bool buffer_use_malloc = false;
++
++  gid_t *groups = *groupsp;
++
++  /* We have to iterate over the entire file.  */
++  while (!feof_unlocked (stream))
++    {
++      ssize_t n = getline (&line, &linelen, stream);
++      if (n < 0)
++	{
++	  if (! feof_unlocked (stream))
++	    status = ((*errnop = errno) == ENOMEM
++		      ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL);
++	  break;
++	}
++
++      struct group grp;
++      int res;
++      while ((res = _nss_files_parse_grent (line, &grp, buffer, buflen,
++					    errnop)) == -1)
++	{
++	  size_t newbuflen = 2 * buflen;
++	  if (buffer_use_malloc || ! __libc_use_alloca (buflen + newbuflen))
++	    {
++	      void *newbuf = realloc (buffer_use_malloc ? buffer : NULL,
++				      newbuflen);
++	      if (newbuf == NULL)
++		{
++		  *errnop = ENOMEM;
++		  status = NSS_STATUS_TRYAGAIN;
++		  goto out;
++		}
++	      buffer = newbuf;
++	      buflen = newbuflen;
++	      buffer_use_malloc = true;
++	    }
++	  else
++	    buffer = extend_alloca (buffer, buflen, newbuflen);
++	}
++
++      if (res > 0 && grp.gr_gid != group)
++	for (char **m = grp.gr_mem; *m != NULL; ++m)
++	  if (strcmp (*m, user) == 0)
++	    {
++	      /* Matches user.  Insert this group.  */
++	      if (*start == *size)
++		{
++		  /* Need a bigger buffer.  */
++		  if (limit > 0 && *size == limit)
++		    /* We reached the maximum.  */
++		    goto out;
++
++		  long int newsize;
++		  if (limit <= 0)
++		    newsize = 2 * *size;
++		  else
++		    newsize = MIN (limit, 2 * *size);
++
++		  gid_t *newgroups = realloc (groups,
++					      newsize * sizeof (*groups));
++		  if (newgroups == NULL)
++		    {
++		      *errnop = ENOMEM;
++		      status = NSS_STATUS_TRYAGAIN;
++		      goto out;
++		    }
++		  *groupsp = groups = newgroups;
++		  *size = newsize;
++		}
++
++	      groups[*start] = grp.gr_gid;
++	      *start += 1;
++	      any = true;
++
++	      break;
++	    }
++    }
++
++ out:
++  /* Free memory.  */
++  if (buffer_use_malloc)
++    free (buffer);
++  free (line);
++
++  fclose (stream);
++
++  return status == NSS_STATUS_SUCCESS && !any ? NSS_STATUS_NOTFOUND : status;
++}
+Index: glibc-2.12-2-gc4ccff1/nss/nsswitch.conf
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nss/nsswitch.conf
++++ glibc-2.12-2-gc4ccff1/nss/nsswitch.conf
+@@ -5,6 +5,7 @@
+ 
+ passwd:		db files
+ group:		db files
++initgroups:	db [SUCCESS=continue] files
+ shadow:		db files
+ gshadow:	files
+ 
diff --git a/SOURCES/glibc-rh711927.patch b/SOURCES/glibc-rh711927.patch
new file mode 100644
index 0000000..26949fe
--- /dev/null
+++ b/SOURCES/glibc-rh711927.patch
@@ -0,0 +1,503 @@
+Index: glibc-2.12-2-gc4ccff1/config.h.in
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/config.h.in
++++ glibc-2.12-2-gc4ccff1/config.h.in
+@@ -201,6 +201,9 @@
+ /* Define if multi-arch DSOs should be generated.  */
+ #undef USE_MULTIARCH
+ 
++/* Define if Systemtap <sys/sdt.h> probes should be defined.  */
++#undef USE_STAP_PROBE
++
+ /*
+  */
+ 
+Index: glibc-2.12-2-gc4ccff1/configure
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/configure
++++ glibc-2.12-2-gc4ccff1/configure
+@@ -830,6 +830,7 @@ enable_all_warnings
+ enable_multi_arch
+ enable_experimental_malloc
+ enable_nss_crypt
++enable_systemtap
+ with_cpu
+ '
+       ac_precious_vars='build_alias
+@@ -1501,6 +1502,7 @@ Optional Features:
+   --enable-experimental-malloc
+                           enable experimental malloc features
+   --enable-nss-crypt      enable libcrypt to use nss
++  --enable-systemtap      enable systemtap static probe points [default=no]
+ 
+ Optional Packages:
+   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+@@ -3932,6 +3934,79 @@ else
+ fi
+ 
+ 
++# Check whether --enable-systemtap was given.
++if test "${enable_systemtap+set}" = set; then
++  enableval=$enable_systemtap; systemtap=$enableval
++else
++  systemtap=no
++fi
++
++if test x$systemtap != xno; then
++
++  { $as_echo "$as_me:$LINENO: checking for systemtap static probe support" >&5
++$as_echo_n "checking for systemtap static probe support... " >&6; }
++if test "${libc_cv_sdt+set}" = set; then
++  $as_echo_n "(cached) " >&6
++else
++    old_CFLAGS="$CFLAGS"
++  CFLAGS="-std=gnu99 $CFLAGS"
++  cat >conftest.$ac_ext <<_ACEOF
++#include <sys/sdt.h>
++void foo (int i, void *p)
++{
++  asm ("" STAP_PROBE_ASM (foo, bar, STAP_PROBE_ASM_TEMPLATE (2)) ""
++       :: STAP_PROBE_ASM_OPERANDS (2, i, p));
++}
++_ACEOF
++rm -f conftest.$ac_objext
++if { (ac_try="$ac_compile"
++case "(($ac_try" in
++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++  *) ac_try_echo=$ac_try;;
++esac
++eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
++$as_echo "$ac_try_echo") >&5
++  (eval "$ac_compile") 2>conftest.er1
++  ac_status=$?
++  grep -v '^ *+' conftest.er1 >conftest.err
++  rm -f conftest.er1
++  cat conftest.err >&5
++  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
++  (exit $ac_status); } && {
++	 test -z "$ac_c_werror_flag" ||
++	 test ! -s conftest.err
++       } && test -s conftest.$ac_objext; then
++  libc_cv_sdt=yes
++else
++  $as_echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++	libc_cv_sdt=no
++fi
++
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++  CFLAGS="$old_CFLAGS"
++fi
++{ $as_echo "$as_me:$LINENO: result: $libc_cv_sdt" >&5
++$as_echo "$libc_cv_sdt" >&6; }
++  if test $libc_cv_sdt = yes; then
++    cat >>confdefs.h <<\_ACEOF
++#define USE_STAP_PROBE 1
++_ACEOF
++
++  else
++    { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5
++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++{ { $as_echo "$as_me:$LINENO: error: systemtap support needs sys/sdt.h with asm support
++See \`config.log' for more details." >&5
++$as_echo "$as_me: error: systemtap support needs sys/sdt.h with asm support
++See \`config.log' for more details." >&2;}
++   { (exit 1); exit 1; }; }; }
++  fi
++
++fi
++
++
+ # The way shlib-versions is used to generate soversions.mk uses a
+ # fairly simplistic model for name recognition that can't distinguish
+ # i486-pc-linux-gnu fully from i486-pc-gnu.  So we mutate a $host_os
+Index: glibc-2.12-2-gc4ccff1/configure.in
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/configure.in
++++ glibc-2.12-2-gc4ccff1/configure.in
+@@ -319,6 +319,29 @@ else
+ fi
+ AC_SUBST(libc_cv_nss_crypt)
+ 
++AC_ARG_ENABLE([systemtap],
++              [AS_HELP_STRING([--enable-systemtap],
++	       [enable systemtap static probe points @<:@default=no@:>@])],
++              [systemtap=$enableval],
++	      [systemtap=no])
++AS_IF([test x$systemtap != xno], [
++  AC_CACHE_CHECK([for systemtap static probe support], libc_cv_sdt, [dnl
++  old_CFLAGS="$CFLAGS"
++  CFLAGS="-std=gnu99 $CFLAGS"
++  AC_COMPILE_IFELSE([#include <sys/sdt.h>
++void foo (int i, void *p)
++{
++  asm ("" STAP_PROBE_ASM (foo, bar, STAP_PROBE_ASM_TEMPLATE (2)) ""
++       :: STAP_PROBE_ASM_OPERANDS (2, i, p));
++}], [libc_cv_sdt=yes], [libc_cv_sdt=no])
++  CFLAGS="$old_CFLAGS"])
++  if test $libc_cv_sdt = yes; then
++    AC_DEFINE([USE_STAP_PROBE])
++  else
++    AC_MSG_FAILURE([systemtap support needs sys/sdt.h with asm support])
++  fi
++])
++
+ # The way shlib-versions is used to generate soversions.mk uses a
+ # fairly simplistic model for name recognition that can't distinguish
+ # i486-pc-linux-gnu fully from i486-pc-gnu.  So we mutate a $host_os
+Index: glibc-2.12-2-gc4ccff1/elf/Makefile
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/elf/Makefile
++++ glibc-2.12-2-gc4ccff1/elf/Makefile
+@@ -458,7 +458,8 @@ CFLAGS-ldconfig.c = $(SYSCONF-FLAGS) -D'
+ CFLAGS-dl-cache.c = $(SYSCONF-FLAGS)
+ CFLAGS-cache.c = $(SYSCONF-FLAGS)
+ 
+-CPPFLAGS-.os += $(if $(filter $(@F),$(patsubst %,%.os,$(all-rtld-routines))),-DNOT_IN_libc=1 -DIS_IN_rtld=1)
++CPPFLAGS-.os += $(if $(filter $(@F),$(patsubst %,%.os,$(all-rtld-routines))),\
++		     -DNOT_IN_libc=1 -DIS_IN_rtld=1 -DIN_LIB=rtld)
+ 
+ test-modules = $(addprefix $(objpfx),$(addsuffix .so,$(strip $(modules-names))))
+ generated += $(addsuffix .so,$(strip $(modules-names)))
+Index: glibc-2.12-2-gc4ccff1/elf/dl-close.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/elf/dl-close.c
++++ glibc-2.12-2-gc4ccff1/elf/dl-close.c
+@@ -32,6 +32,7 @@
+ #include <sys/mman.h>
+ #include <sysdep-cancel.h>
+ #include <tls.h>
++#include <stap-probe.h>
+ 
+ 
+ /* Type of the constructor functions.  */
+@@ -469,6 +470,7 @@ _dl_close_worker (struct link_map *map)
+   struct r_debug *r = _dl_debug_initialize (0, nsid);
+   r->r_state = RT_DELETE;
+   _dl_debug_state ();
++  LIBC_PROBE (rtld_unmap_start, 2, nsid, r);
+ 
+   if (unload_global)
+     {
+@@ -722,6 +724,7 @@ _dl_close_worker (struct link_map *map)
+   /* Notify the debugger those objects are finalized and gone.  */
+   r->r_state = RT_CONSISTENT;
+   _dl_debug_state ();
++  LIBC_PROBE (rtld_unmap_complete, 2, nsid, r);
+ 
+   /* Recheck if we need to retry, release the lock.  */
+  out:
+Index: glibc-2.12-2-gc4ccff1/elf/dl-load.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/elf/dl-load.c
++++ glibc-2.12-2-gc4ccff1/elf/dl-load.c
+@@ -36,6 +36,7 @@
+ #include <stackinfo.h>
+ #include <caller.h>
+ #include <sysdep.h>
++#include <stap-probe.h>
+ 
+ #include <dl-dst.h>
+ 
+@@ -806,7 +807,7 @@ _dl_init_paths (const char *llp)
+ static void
+ __attribute__ ((noreturn, noinline))
+ lose (int code, int fd, const char *name, char *realname, struct link_map *l,
+-      const char *msg, struct r_debug *r)
++      const char *msg, struct r_debug *r, Lmid_t nsid)
+ {
+   /* The file might already be closed.  */
+   if (fd != -1)
+@@ -818,6 +819,7 @@ lose (int code, int fd, const char *name
+     {
+       r->r_state = RT_CONSISTENT;
+       _dl_debug_state ();
++      LIBC_PROBE (rtld_map_complete, 2, nsid, r);
+     }
+ 
+   _dl_signal_error (code, name, NULL, msg);
+@@ -856,7 +858,7 @@ _dl_map_object_from_fd (const char *name
+       errval = errno;
+     call_lose:
+       lose (errval, fd, name, realname, l, errstring,
+-	    make_consistent ? r : NULL);
++	    make_consistent ? r : NULL, nsid);
+     }
+ 
+   /* Look again to see if the real name matched another already loaded.  */
+@@ -963,6 +965,7 @@ _dl_map_object_from_fd (const char *name
+ 	 linking has not been used before.  */
+       r->r_state = RT_ADD;
+       _dl_debug_state ();
++      LIBC_PROBE (rtld_map_start, 2, nsid, r);
+       make_consistent = true;
+     }
+   else
+@@ -1656,7 +1659,7 @@ open_verify (const char *name, struct fi
+ 	      name = strdupa (realname);
+ 	      free (realname);
+ 	    }
+-	  lose (errval, fd, name, NULL, NULL, errstring, NULL);
++	  lose (errval, fd, name, NULL, NULL, errstring, NULL, 0);
+ 	}
+ 
+       /* See whether the ELF header is what we expect.  */
+Index: glibc-2.12-2-gc4ccff1/elf/dl-open.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/elf/dl-open.c
++++ glibc-2.12-2-gc4ccff1/elf/dl-open.c
+@@ -33,6 +33,7 @@
+ #include <caller.h>
+ #include <sysdep-cancel.h>
+ #include <tls.h>
++#include <stap-probe.h>
+ 
+ #include <dl-dst.h>
+ 
+@@ -297,6 +298,7 @@ dl_open_worker (void *a)
+   struct r_debug *r = _dl_debug_initialize (0, args->nsid);
+   r->r_state = RT_CONSISTENT;
+   _dl_debug_state ();
++  LIBC_PROBE (rtld_map_complete, 2, args->nsid, r);
+ 
+   /* Only do lazy relocation if `LD_BIND_NOW' is not set.  */
+   int reloc_mode = mode & __RTLD_AUDIT;
+@@ -309,10 +311,18 @@ dl_open_worker (void *a)
+   struct link_map *l = new;
+   while (l->l_next)
+     l = l->l_next;
++  int relocation_in_progress = 0;
+   while (1)
+     {
+       if (! l->l_real->l_relocated)
+ 	{
++	  if (! relocation_in_progress)
++	    {
++	      /* Notify the debugger that relocations are about to happen.  */
++	      LIBC_PROBE (rtld_reloc_start, 2, args->nsid, r);
++	      relocation_in_progress = 1;
++	    }
++
+ #ifdef SHARED
+ 	  if (__builtin_expect (GLRO(dl_profile) != NULL, 0))
+ 	    {
+@@ -460,6 +470,10 @@ cannot load any more object with static 
+     _dl_fatal_printf (N_("\
+ TLS generation counter wrapped!  Please report this."));
+ 
++  /* Notify the debugger all new objects have been relocated.  */
++  if (relocation_in_progress)
++    LIBC_PROBE (rtld_reloc_complete, 2, args->nsid, r);
++
+   /* Run the initializer functions of new objects.  */
+   _dl_init (new, args->argc, args->argv, args->env);
+ 
+Index: glibc-2.12-2-gc4ccff1/elf/rtld-Rules
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/elf/rtld-Rules
++++ glibc-2.12-2-gc4ccff1/elf/rtld-Rules
+@@ -122,6 +122,6 @@ ifdef rtld-depfiles
+ endif
+ 
+ # This here is the whole point of all the shenanigans.
+-rtld-CPPFLAGS := -DNOT_IN_libc=1 -DIS_IN_rtld=1
++rtld-CPPFLAGS := -DNOT_IN_libc=1 -DIS_IN_rtld=1 -DIN_LIB=rtld
+ 
+ endif
+Index: glibc-2.12-2-gc4ccff1/elf/rtld.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/elf/rtld.c
++++ glibc-2.12-2-gc4ccff1/elf/rtld.c
+@@ -40,6 +40,7 @@
+ #include <dl-osinfo.h>
+ #include <dl-procinfo.h>
+ #include <tls.h>
++#include <stap-probe.h>
+ 
+ #include <assert.h>
+ 
+@@ -1656,6 +1657,7 @@ ERROR: ld.so: object '%s' cannot be load
+   /* We start adding objects.  */
+   r->r_state = RT_ADD;
+   _dl_debug_state ();
++  LIBC_PROBE (rtld_init_start, 2, LM_ID_BASE, r);
+ 
+   /* Auditing checkpoint: we are ready to signal that the initial map
+      is being constructed.  */
+@@ -2353,6 +2355,7 @@ ERROR: ld.so: object '%s' cannot be load
+   r = _dl_debug_initialize (0, LM_ID_BASE);
+   r->r_state = RT_CONSISTENT;
+   _dl_debug_state ();
++  LIBC_PROBE (rtld_init_complete, 2, LM_ID_BASE, r);
+ 
+ #ifndef MAP_COPY
+   /* We must munmap() the cache file.  */
+Index: glibc-2.12-2-gc4ccff1/extra-lib.mk
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/extra-lib.mk
++++ glibc-2.12-2-gc4ccff1/extra-lib.mk
+@@ -101,4 +101,4 @@ ifneq (,$(cpp-srcs-left))
+ include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left))
+ endif
+ 
+-CPPFLAGS-$(lib) := -DNOT_IN_libc=1 -DIS_IN_$(lib)=1
++CPPFLAGS-$(lib) := -DNOT_IN_libc=1 -DIS_IN_$(lib)=1 -DIN_LIB=$(lib)
+Index: glibc-2.12-2-gc4ccff1/include/stap-probe.h
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/include/stap-probe.h
+@@ -0,0 +1,140 @@
++/* Macros for defining Systemtap <sys/sdt.h> static probe points.
++   Copyright (C) 2011 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library 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
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++#ifndef _STAP_PROBE_H
++#define _STAP_PROBE_H 1
++
++#ifdef USE_STAP_PROBE
++
++# include <sys/sdt.h>
++
++/* Our code uses one macro LIBC_PROBE (name, n, arg1, ..., argn).
++
++   Without USE_STAP_PROBE, that does nothing but evaluates all
++   its arguments (to prevent bit rot, unlike e.g. assert).
++
++   Systemtap's header defines the macros STAP_PROBE (provider, name) and
++   STAP_PROBEn (provider, name, arg1, ..., argn).  For "provider" we paste
++   in the IN_LIB name (libc, libpthread, etc.) automagically.  */
++
++# ifndef NOT_IN_libc
++#  define IN_LIB	libc
++# elif !defined IN_LIB
++/* This is intentionally defined with extra unquoted commas in it so
++   that macro substitution will bomb out when it is used.  We don't
++   just use #error here, so that this header can be included by
++   other headers that use LIBC_PROBE inside their own macros.  We
++   only want such headers to fail to compile if those macros are
++   actually used in a context where IN_LIB has not been defined.  */
++#  define IN_LIB	,,,missing -DIN_LIB=... -- not extra-lib.mk?,,,
++# endif
++
++# define LIBC_PROBE(name, n, ...)	\
++  LIBC_PROBE_1 (IN_LIB, name, n, ## __VA_ARGS__)
++
++# define LIBC_PROBE_1(lib, name, n, ...) \
++  STAP_PROBE##n (lib, name, ## __VA_ARGS__)
++
++# define STAP_PROBE0		STAP_PROBE
++
++# define LIBC_PROBE_ASM(name, template) \
++  STAP_PROBE_ASM (IN_LIB, name, template)
++
++# define LIBC_PROBE_ASM_OPERANDS STAP_PROBE_ASM_OPERANDS
++
++#else  /* Not USE_STAP_PROBE.  */
++
++# ifndef __ASSEMBLER__
++#  define LIBC_PROBE(name, n, ...)		DUMMY_PROBE##n (__VA_ARGS__)
++# else
++#  define LIBC_PROBE(name, n, ...)		/* Nothing.  */
++# endif
++
++# define LIBC_PROBE_ASM(name, template)		/* Nothing.  */
++# define LIBC_PROBE_ASM_OPERANDS(n, ...)	/* Nothing.  */
++
++/* This silliness lets us evaluate all the arguments for each arity
++   of probe.  My kingdom for a real macro system.  */
++
++# define DUMMY_PROBE0()			do {} while (0)
++# define DUMMY_PROBE1(a1)		do {} while ((void) (a1), 0)
++# define DUMMY_PROBE2(a1, a2)		do {} while ((void) (a1), \
++						     (void) (a2), 0)
++# define DUMMY_PROBE3(a1, a2, a3)	do {} while ((void) (a1), \
++						     (void) (a2), \
++						     (void) (a3), 0)
++# define DUMMY_PROBE4(a1, a2, a3, a4)	do {} while ((void) (a1), \
++						     (void) (a2), \
++						     (void) (a3), \
++						     (void) (a4), 0)
++# define DUMMY_PROBE5(a1, a2, a3, a4, a5)			  \
++					do {} while ((void) (a1), \
++						     (void) (a2), \
++						     (void) (a3), \
++						     (void) (a4), \
++						     (void) (a5), 0)
++# define DUMMY_PROBE6(a1, a2, a3, a4, a5, a6)			  \
++					do {} while ((void) (a1), \
++						     (void) (a2), \
++						     (void) (a3), \
++						     (void) (a4), \
++						     (void) (a5), \
++						     (void) (a6), 0)
++# define DUMMY_PROBE7(a1, a2, a3, a4, a5, a6, a7)		  \
++					do {} while ((void) (a1), \
++						     (void) (a2), \
++						     (void) (a3), \
++						     (void) (a4), \
++						     (void) (a5), \
++						     (void) (a6), \
++						     (void) (a7), 0)
++# define DUMMY_PROBE8(a1, a2, a3, a4, a5, a6, a7, a8)		  \
++					do {} while ((void) (a1), \
++						     (void) (a2), \
++						     (void) (a3), \
++						     (void) (a4), \
++						     (void) (a5), \
++						     (void) (a6), \
++						     (void) (a7), \
++						     (void) (a8), 0)
++# define DUMMY_PROBE9(a1, a2, a3, a4, a5, a6, a7, a8, a9)	  \
++					do {} while ((void) (a1), \
++						     (void) (a2), \
++						     (void) (a3), \
++						     (void) (a4), \
++						     (void) (a5), \
++						     (void) (a6), \
++						     (void) (a7), \
++						     (void) (a8), \
++						     (void) (a9), 0)
++# define DUMMY_PROBE10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)	  \
++					do {} while ((void) (a1), \
++						     (void) (a2), \
++						     (void) (a3), \
++						     (void) (a4), \
++						     (void) (a5), \
++						     (void) (a6), \
++						     (void) (a7), \
++						     (void) (a8), \
++						     (void) (a9), \
++						     (void) (a10), 0)
++
++#endif	/* USE_STAP_PROBE.  */
++
++#endif	/* stap-probe.h */
+Index: glibc-2.12-2-gc4ccff1/scripts/check-local-headers.sh
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/scripts/check-local-headers.sh
++++ glibc-2.12-2-gc4ccff1/scripts/check-local-headers.sh
+@@ -31,6 +31,8 @@ fgrep -v "$includedir/asm" |
+ fgrep -v "$includedir/linux" |
+ fgrep -v "$includedir/selinux" |
+ fgrep -v "$includedir/sys/capability.h" |
++fgrep -v "$includedir/sys/sdt.h" |
++fgrep -v "$includedir/sys/sdt-config.h" |
+ fgrep -v "$includedir/gd" |
+ fgrep -v "$includedir/nss3"; then
+   # If we found a match something is wrong.
diff --git a/SOURCES/glibc-rh711987.patch b/SOURCES/glibc-rh711987.patch
new file mode 100644
index 0000000..bd286e1
--- /dev/null
+++ b/SOURCES/glibc-rh711987.patch
@@ -0,0 +1,136 @@
+2010-08-11  Ulrich Drepper  <drepper@redhat.com>
+
+	* sysdeps/unix/sysv/linux/bits/statfs.h (struct statfs): Add f_flags
+	field.
+	(struct statfs64): Likewise.
+	(_STATFS_F_FLAGS): Define.
+	* sysdeps/unix/sysv/linux/s390/bits/statfs.h: Likewise.
+	* sysdeps/unix/sysv/linux/internal_statvfs.c (__statvfs_getflags):
+	Don't define if __ASSUME_STATFS_F_FLAGS is defined.
+	(ST_VALID): Define locally.
+	(INTERNAL_STATVFS): If f_flags has ST_VALID set don't call
+	__statvfs_getflags, use the provided value.
+	* sysdeps/unix/sysv/linux/kernel-features.h: Define
+	__ASSUME_STATFS_F_FLAGS.
+
+Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/bits/statfs.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/bits/statfs.h
++++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/bits/statfs.h
+@@ -42,7 +42,8 @@ struct statfs
+     __fsid_t f_fsid;
+     __SWORD_TYPE f_namelen;
+     __SWORD_TYPE f_frsize;
+-    __SWORD_TYPE f_spare[5];
++    __SWORD_TYPE f_flags;
++    __SWORD_TYPE f_spare[4];
+   };
+ 
+ #ifdef __USE_LARGEFILE64
+@@ -58,10 +59,12 @@ struct statfs64
+     __fsid_t f_fsid;
+     __SWORD_TYPE f_namelen;
+     __SWORD_TYPE f_frsize;
+-    __SWORD_TYPE f_spare[5];
++    __SWORD_TYPE f_flags;
++    __SWORD_TYPE f_spare[4];
+   };
+ #endif
+ 
+ /* Tell code we have these members.  */
+ #define _STATFS_F_NAMELEN
+ #define _STATFS_F_FRSIZE
++#define _STATFS_F_FLAGS
+Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/internal_statvfs.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/internal_statvfs.c
++++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/internal_statvfs.c
+@@ -29,6 +29,11 @@
+ #include <sys/statfs.h>
+ #include <sys/statvfs.h>
+ #include "linux_fsinfo.h"
++#include "kernel-features.h"
++
++
++/* Special internal-only bit value.  */
++#define ST_VALID 0x0020
+ 
+ 
+ #ifndef STATFS
+@@ -37,6 +42,7 @@
+ # define INTERNAL_STATVFS __internal_statvfs
+ 
+ 
++# ifndef __ASSUME_STATFS_F_FLAGS
+ int
+ __statvfs_getflags (const char *name, int fstype, struct stat64 *st)
+ {
+@@ -200,6 +206,7 @@ __statvfs_getflags (const char *name, in
+ 
+   return result;
+ }
++# endif
+ #else
+ extern int __statvfs_getflags (const char *name, int fstype,
+ 			       struct stat64 *st);
+@@ -240,9 +247,14 @@ INTERNAL_STATVFS (const char *name, stru
+   /* XXX I have no idea how to compute f_favail.  Any idea???  */
+   buf->f_favail = buf->f_ffree;
+ 
+-  /* Determining the flags is tricky.  We have to read /proc/mounts or
+-     the /etc/mtab file and search for the entry which matches the given
+-     file.  The way we can test for matching filesystem is using the
+-     device number.  */
+-  buf->f_flag = __statvfs_getflags (name, fsbuf->f_type, st);
++#ifndef __ASSUME_STATFS_F_FLAGS
++  if ((fsbuf->f_flags & ST_VALID) == 0)
++    /* Determining the flags is tricky.  We have to read /proc/mounts or
++       the /etc/mtab file and search for the entry which matches the given
++       file.  The way we can test for matching filesystem is using the
++       device number.  */
++    buf->f_flag = __statvfs_getflags (name, fsbuf->f_type, st);
++  else
++#endif
++    buf->f_flag = fsbuf->f_flags ^ ST_VALID;
+ }
+Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/kernel-features.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/kernel-features.h
++++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/kernel-features.h
+@@ -552,3 +552,8 @@
+ #if __LINUX_KERNEL_VERSION >= 0x020621
+ # define __ASSUME_RECVMMSG	1
+ #endif
++
++/* statfs fills in f_flags since 2.6.36.  */
++#if __LINUX_KERNEL_VERSION >= 0x020624
++# define __ASSUME_STATFS_F_FLAGS	1
++#endif
+Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/s390/bits/statfs.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/s390/bits/statfs.h
++++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/s390/bits/statfs.h
+@@ -42,7 +42,8 @@ struct statfs
+     __fsid_t f_fsid;
+     int f_namelen;
+     int f_frsize;
+-    int f_spare[5];
++    int f_flags;
++    int f_spare[4];
+   };
+ 
+ #ifdef __USE_LARGEFILE64
+@@ -58,10 +59,12 @@ struct statfs64
+     __fsid_t f_fsid;
+     int f_namelen;
+     int f_frsize;
+-    int f_spare[5];
++    int f_flags;
++    int f_spare[4];
+   };
+ #endif
+ 
+ /* Tell code we have this member.  */
+ #define _STATFS_F_NAMELEN
+ #define _STATFS_F_FRSIZE
++#define _STATFS_F_FLAGS
diff --git a/SOURCES/glibc-rh712248.patch b/SOURCES/glibc-rh712248.patch
new file mode 100644
index 0000000..afadc66
--- /dev/null
+++ b/SOURCES/glibc-rh712248.patch
@@ -0,0 +1,69 @@
+2011-07-07  Ulrich Drepper  <drepper@gmail.com>
+
+	[BZ #12868]
+	* sysdeps/unix/sysv/linux/linux_fsinfo.h: Define Lustre constants.
+	* sysdeps/unix/sysv/linux/internal_statvfs.c (__statvfs_getflags):
+	Handle Lustre.
+	* sysdeps/unix/sysv/linux/pathconf.c (__statfs_link_max): Likewise.
+	(__statfs_filesize_max): Likewise.
+	Patch mostly by Andreas Dilger <adilger@whamcloud.com>.
+
+Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/internal_statvfs.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/internal_statvfs.c
++++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/internal_statvfs.c
+@@ -109,6 +109,9 @@ __statvfs_getflags (const char *name, in
+     case LOGFS_MAGIC_U32:
+       fsname = "logfs";
+       break;
++    case LUSTRE_SUPER_MAGIC:
++      fsname = "lustre";
++      break;
+     }
+ 
+   FILE *mtab = __setmntent ("/proc/mounts", "r");
+Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/linux_fsinfo.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/linux_fsinfo.h
++++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/linux_fsinfo.h
+@@ -77,6 +77,9 @@
+ /* Constant that identifies the `logfs� filesystem.  */
+ #define LOGFS_MAGIC_U32		0xc97e8168u
+ 
++/* Constant that identifies the `lustre' filesystem.  */
++#define LUSTRE_SUPER_MAGIC	0x0BD00BD0
++
+ /* Constants that identify the `minix2' filesystem.  */
+ #define MINIX2_SUPER_MAGIC	0x2468
+ #define MINIX2_SUPER_MAGIC2	0x2478
+@@ -144,6 +147,8 @@
+ /* Maximum link counts.  */
+ #define COH_LINK_MAX		10000
+ #define EXT2_LINK_MAX		32000
++#define EXT4_LINK_MAX		65000
++#define LUSTRE_LINK_MAX		EXT4_LINK_MAX
+ #define MINIX2_LINK_MAX		65530
+ #define MINIX_LINK_MAX		250
+ #define REISERFS_LINK_MAX	64535
+Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/pathconf.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/pathconf.c
++++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/pathconf.c
+@@ -104,6 +104,9 @@ __statfs_link_max (int result, const str
+     case XFS_SUPER_MAGIC:
+       return XFS_LINK_MAX;
+ 
++    case LUSTRE_SUPER_MAGIC:
++      return LUSTRE_LINK_MAX;
++
+     default:
+       return LINUX_LINK_MAX;
+     }
+@@ -136,6 +139,7 @@ __statfs_filesize_max (int result, const
+     case UDF_SUPER_MAGIC:
+     case JFS_SUPER_MAGIC:
+     case VXFS_SUPER_MAGIC:
++    case LUSTRE_SUPER_MAGIC:
+       return 64;
+ 
+     case MSDOS_SUPER_MAGIC:
diff --git a/SOURCES/glibc-rh713134.patch b/SOURCES/glibc-rh713134.patch
new file mode 100644
index 0000000..dc979be
--- /dev/null
+++ b/SOURCES/glibc-rh713134.patch
@@ -0,0 +1,36 @@
+2011-03-18  Andreas Schwab  <schwab@redhat.com>
+
+	* elf/ldd.bash.in: Never run file directly.
+
+Index: glibc-2.12-2-gc4ccff1/elf/ldd.bash.in
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/elf/ldd.bash.in
++++ glibc-2.12-2-gc4ccff1/elf/ldd.bash.in
+@@ -167,18 +167,6 @@ warning: you do not have execution permi
+       fi
+     done
+     case $ret in
+-    0)
+-      # If the program exits with exit code 5, it means the process has been
+-      # invoked with __libc_enable_secure.  Fall back to running it through
+-      # the dynamic linker.
+-      try_trace "$file"
+-      rc=$?
+-      if [ $rc = 5 ]; then
+-	try_trace "$RTLD" "$file"
+-	rc=$?
+-      fi
+-      [ $rc = 0 ] || result=1
+-      ;;
+     1)
+       # This can be a non-ELF binary or no binary at all.
+       nonelf "$file" || {
+@@ -186,7 +174,7 @@ warning: you do not have execution permi
+ 	result=1
+       }
+       ;;
+-    2)
++    0|2)
+       try_trace "$RTLD" "$file" || result=1
+       ;;
+     *)
diff --git a/SOURCES/glibc-rh714823.patch b/SOURCES/glibc-rh714823.patch
new file mode 100644
index 0000000..8bd121b
--- /dev/null
+++ b/SOURCES/glibc-rh714823.patch
@@ -0,0 +1,126 @@
+2011-06-28  Andreas Schwab  <schwab@redhat.com>
+
+	* sysdeps/posix/getaddrinfo.c (gaih_inet): Don't use gethostbyaddr
+	to determine canonical name.
+
+2011-06-22  Andreas Schwab  <schwab@redhat.com>
+
+	* sysdeps/posix/getaddrinfo.c (gaih_inet): Fix last change.
+
+2011-06-21  Ulrich Drepper  <drepper@gmail.com>
+
+	[BZ #12885]
+	* sysdeps/posix/getaddrinfo.c (gaih_inet): When looking up only IPv6
+	addresses using gethostbyname4_r ignore IPv4 addresses.
+
+Index: glibc-2.12-2-gc4ccff1/sysdeps/posix/getaddrinfo.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/posix/getaddrinfo.c
++++ glibc-2.12-2-gc4ccff1/sysdeps/posix/getaddrinfo.c
+@@ -512,10 +512,11 @@ gaih_inet (const char *name, const struc
+ 
+ 	  /* If we do not have to look for IPv4 and IPv6 together, use
+ 	     the simple, old functions.  */
+-	  if (req->ai_family == AF_INET
+-	      || (req->ai_family == AF_INET6
+-		  && ((req->ai_flags & AI_V4MAPPED) == 0
+-		      || (req->ai_flags & AI_ALL) == 0)))
++	  if ((req->ai_family == AF_INET
++	       || (req->ai_family == AF_INET6
++		   && ((req->ai_flags & AI_V4MAPPED) == 0
++		       || (req->ai_flags & AI_ALL) == 0)))
++	      && (req->ai_flags & AI_CANONNAME) == 0)
+ 	    {
+ 	      int family = req->ai_family;
+ 	      size_t tmpbuflen = 512;
+@@ -731,16 +732,44 @@ gaih_inet (const char *name, const struc
+ 					      tmpbuflen, 2 * tmpbuflen);
+ 		    }
+ 
+-		  no_inet6_data = no_data;
+-
+ 		  if (status == NSS_STATUS_SUCCESS)
+ 		    {
++		      assert (!no_data);
++		      no_data = 1;
++
+ 		      if ((req->ai_flags & AI_CANONNAME) != 0 && canon == NULL)
+ 			canon = (*pat)->name;
+ 
+ 		      while (*pat != NULL)
+-			pat = &((*pat)->next);
++			{
++			  if ((*pat)->family == AF_INET
++			      && req->ai_family == AF_INET6
++			      && (req->ai_flags & AI_V4MAPPED) != 0)
++			    {
++			      uint32_t *pataddr = (*pat)->addr;
++			      (*pat)->family = AF_INET6;
++			      pataddr[3] = pataddr[0];
++			      pataddr[2] = htonl (0xffff);
++			      pataddr[1] = 0;
++			      pataddr[0] = 0;
++			      pat = &((*pat)->next);
++			      no_data = 0;
++			    }
++			  else if (req->ai_family == AF_UNSPEC
++				   || (*pat)->family == req->ai_family)
++			    {
++			      pat = &((*pat)->next);
++
++			      no_data = 0;
++			      if (req->ai_family == AF_INET6)
++				got_ipv6 = true;
++			    }
++			  else
++			    *pat = ((*pat)->next);
++			}
+ 		    }
++
++		  no_inet6_data = no_data;
+ 		}
+ 	      else
+ 		{
+@@ -905,39 +934,9 @@ gaih_inet (const char *name, const struc
+ 	  {
+ 	    if (canon == NULL)
+ 	      {
+-		struct hostent *h = NULL;
+-		int herrno;
+-		struct hostent th;
+-		size_t tmpbuflen = 512;
+-		char *tmpbuf = NULL;
+-
+-		do
+-		  {
+-		    tmpbuf = extend_alloca (tmpbuf, tmpbuflen, tmpbuflen * 2);
+-		    rc = __gethostbyaddr_r (at2->addr,
+-					    ((at2->family == AF_INET6)
+-					     ? sizeof (struct in6_addr)
+-					     : sizeof (struct in_addr)),
+-					    at2->family, &th, tmpbuf,
+-					    tmpbuflen, &h, &herrno);
+-		  }
+-		while (rc == ERANGE && herrno == NETDB_INTERNAL);
+-
+-		if (rc != 0 && herrno == NETDB_INTERNAL)
+-		  {
+-		    __set_h_errno (herrno);
+-		    return -EAI_SYSTEM;
+-		  }
+-
+-		if (h != NULL)
+-		  canon = h->h_name;
+-		else
+-		  {
+-		    assert (orig_name != NULL);
+-		    /* If the canonical name cannot be determined, use
+-		       the passed in string.  */
+-		    canon = orig_name;
+-		  }
++		/* If the canonical name cannot be determined, use
++		   the passed in string.  */
++		canon = orig_name;
+ 	      }
+ 
+ #ifdef HAVE_LIBIDN
diff --git a/SOURCES/glibc-rh718057.patch b/SOURCES/glibc-rh718057.patch
new file mode 100644
index 0000000..d331996
--- /dev/null
+++ b/SOURCES/glibc-rh718057.patch
@@ -0,0 +1,109 @@
+2011-07-01  Andreas Schwab  <schwab@redhat.com>
+
+	* nis/nss_compat/compat-pwd.c (getpwent_next_nss_netgr): Query NIS
+	domain only when needed.
+
+Index: glibc-2.12-2-gc4ccff1/nis/nss_compat/compat-pwd.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nis/nss_compat/compat-pwd.c
++++ glibc-2.12-2-gc4ccff1/nis/nss_compat/compat-pwd.c
+@@ -360,7 +360,7 @@ getpwent_next_nss_netgr (const char *nam
+ 			 char *group, char *buffer, size_t buflen,
+ 			 int *errnop)
+ {
+-  char *curdomain, *host, *user, *domain, *p2;
++  char *curdomain = NULL, *host, *user, *domain, *p2;
+   int status;
+   size_t p2len;
+ 
+@@ -369,15 +369,7 @@ getpwent_next_nss_netgr (const char *nam
+   if (!nss_getpwnam_r)
+     return NSS_STATUS_UNAVAIL;
+ 
+-  if (yp_get_default_domain (&curdomain) != YPERR_SUCCESS)
+-    {
+-      ent->netgroup = false;
+-      ent->first = false;
+-      give_pwd_free (&ent->pwd);
+-      return NSS_STATUS_UNAVAIL;
+-    }
+-
+-  if (ent->first == true)
++  if (ent->first)
+     {
+       memset (&ent->netgrdata, 0, sizeof (struct __netgrent));
+       __internal_setnetgrent (group, &ent->netgrdata);
+@@ -403,8 +395,19 @@ getpwent_next_nss_netgr (const char *nam
+       if (user == NULL || user[0] == '-')
+ 	continue;
+ 
+-      if (domain != NULL && strcmp (curdomain, domain) != 0)
+-	continue;
++      if (domain != NULL)
++	{
++	  if (curdomain == NULL
++	      && yp_get_default_domain (&curdomain) != YPERR_SUCCESS)
++	    {
++	      __internal_endnetgrent (&ent->netgrdata);
++	      ent->netgroup = false;
++	      give_pwd_free (&ent->pwd);
++	      return NSS_STATUS_UNAVAIL;
++	    }
++	  if (strcmp (curdomain, domain) != 0)
++	    continue;
++	}
+ 
+       /* If name != NULL, we are called from getpwnam.  */
+       if (name != NULL)
+Index: glibc-2.12-2-gc4ccff1/nis/nss_compat/compat-spwd.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nis/nss_compat/compat-spwd.c
++++ glibc-2.12-2-gc4ccff1/nis/nss_compat/compat-spwd.c
+@@ -317,7 +317,7 @@ getspent_next_nss_netgr (const char *nam
+ 			 char *group, char *buffer, size_t buflen,
+ 			 int *errnop)
+ {
+-  char *curdomain, *host, *user, *domain, *p2;
++  char *curdomain = NULL, *host, *user, *domain, *p2;
+   size_t p2len;
+ 
+   if (!nss_getspnam_r)
+@@ -327,15 +327,7 @@ getspent_next_nss_netgr (const char *nam
+   if (ent->setent_status != NSS_STATUS_SUCCESS)
+     return ent->setent_status;
+ 
+-  if (yp_get_default_domain (&curdomain) != YPERR_SUCCESS)
+-    {
+-      ent->netgroup = false;
+-      ent->first = false;
+-      give_spwd_free (&ent->pwd);
+-      return NSS_STATUS_UNAVAIL;
+-    }
+-
+-  if (ent->first == true)
++  if (ent->first)
+     {
+       memset (&ent->netgrdata, 0, sizeof (struct __netgrent));
+       __internal_setnetgrent (group, &ent->netgrdata);
+@@ -362,8 +354,19 @@ getspent_next_nss_netgr (const char *nam
+       if (user == NULL || user[0] == '-')
+ 	continue;
+ 
+-      if (domain != NULL && strcmp (curdomain, domain) != 0)
+-	continue;
++      if (domain != NULL)
++	{
++	  if (curdomain == NULL
++	      && yp_get_default_domain (&curdomain) != YPERR_SUCCESS)
++	    {
++	      __internal_endnetgrent (&ent->netgrdata);
++	      ent->netgroup = false;
++	      give_spwd_free (&ent->pwd);
++	      return NSS_STATUS_UNAVAIL;
++	    }
++	  if (strcmp (curdomain, domain) != 0)
++	    continue;
++	}
+ 
+       /* If name != NULL, we are called from getpwnam */
+       if (name != NULL)
diff --git a/SOURCES/glibc-rh726517.patch b/SOURCES/glibc-rh726517.patch
new file mode 100644
index 0000000..26addbf
--- /dev/null
+++ b/SOURCES/glibc-rh726517.patch
@@ -0,0 +1,173 @@
+Index: glibc-2.12-2-gc4ccff1/malloc/arena.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/malloc/arena.c
++++ glibc-2.12-2-gc4ccff1/malloc/arena.c
+@@ -870,7 +870,7 @@ heap_trim(heap, pad) heap_info *heap; si
+     heap = prev_heap;
+     if(!prev_inuse(p)) { /* consolidate backward */
+       p = prev_chunk(p);
+-      unlink(p, bck, fwd);
++      unlink(ar_ptr, p, bck, fwd);
+     }
+     assert(((unsigned long)((char*)p + new_size) & (pagesz-1)) == 0);
+     assert( ((char*)p + new_size) == ((char*)heap + heap->size) );
+Index: glibc-2.12-2-gc4ccff1/malloc/hooks.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/malloc/hooks.c
++++ glibc-2.12-2-gc4ccff1/malloc/hooks.c
+@@ -219,7 +219,9 @@ top_check()
+ 	(char*)t + chunksize(t) == mp_.sbrk_base + main_arena.system_mem)))
+     return 0;
+ 
++  mutex_unlock(&main_arena);
+   malloc_printerr (check_action, "malloc: top chunk is corrupt", t);
++  mutex_lock(&main_arena);
+ 
+   /* Try to set up a new top chunk. */
+   brk = MORECORE(0);
+Index: glibc-2.12-2-gc4ccff1/malloc/malloc.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/malloc/malloc.c
++++ glibc-2.12-2-gc4ccff1/malloc/malloc.c
+@@ -2109,12 +2109,14 @@ typedef struct malloc_chunk* mbinptr;
+ #define last(b)      ((b)->bk)
+ 
+ /* Take a chunk off a bin list */
+-#define unlink(P, BK, FD) {                                            \
++#define unlink(AV, P, BK, FD) {					       \
+   FD = P->fd;                                                          \
+   BK = P->bk;                                                          \
+-  if (__builtin_expect (FD->bk != P || BK->fd != P, 0))                \
++  if (__builtin_expect (FD->bk != P || BK->fd != P, 0)) {	       \
++    mutex_unlock(&(AV)->mutex);					       \
+     malloc_printerr (check_action, "corrupted double-linked list", P); \
+-  else {                                                               \
++    mutex_lock(&(AV)->mutex);					       \
++  } else {							       \
+     FD->bk = BK;                                                       \
+     BK->fd = FD;                                                       \
+     if (!in_smallbin_range (P->size)				       \
+@@ -3257,7 +3259,9 @@ static Void_t* sYSMALLOc(nb, av) INTERNA
+ 
+     else if (contiguous(av) && old_size && brk < old_end) {
+       /* Oops!  Someone else killed our space..  Can't touch anything.  */
++      mutex_unlock(&av->mutex);
+       malloc_printerr (3, "break adjusted to free malloc space", brk);
++      mutex_lock(&av->mutex);
+     }
+ 
+     /*
+@@ -4305,7 +4309,9 @@ _int_malloc(mstate av, size_t bytes)
+ 	{
+ 	  errstr = "malloc(): memory corruption (fast)";
+ 	errout:
++	  mutex_unlock(&av->mutex);
+ 	  malloc_printerr (check_action, errstr, chunk2mem (victim));
++	  mutex_lock(&av->mutex);
+ 	  return NULL;
+ 	}
+ #ifndef ATOMIC_FASTBINS
+@@ -4393,8 +4399,12 @@ _int_malloc(mstate av, size_t bytes)
+       bck = victim->bk;
+       if (__builtin_expect (victim->size <= 2 * SIZE_SZ, 0)
+ 	  || __builtin_expect (victim->size > av->system_mem, 0))
+-	malloc_printerr (check_action, "malloc(): memory corruption",
+-			 chunk2mem (victim));
++	{
++	  void *p = chunk2mem(victim);
++	  mutex_unlock(&av->mutex);
++	  malloc_printerr (check_action, "malloc(): memory corruption", p);
++	  mutex_lock(&av->mutex);
++	}
+       size = chunksize(victim);
+ 
+       /*
+@@ -4535,7 +4545,7 @@ _int_malloc(mstate av, size_t bytes)
+ 	  victim = victim->fd;
+ 
+ 	remainder_size = size - nb;
+-	unlink(victim, bck, fwd);
++	unlink(av, victim, bck, fwd);
+ 
+ 	/* Exhaust */
+ 	if (remainder_size < MINSIZE)  {
+@@ -4633,7 +4643,7 @@ _int_malloc(mstate av, size_t bytes)
+ 	remainder_size = size - nb;
+ 
+ 	/* unlink */
+-	unlink(victim, bck, fwd);
++	unlink(av, victim, bck, fwd);
+ 
+ 	/* Exhaust */
+ 	if (remainder_size < MINSIZE) {
+@@ -4789,10 +4799,14 @@ _int_free(mstate av, mchunkptr p)
+       errstr = "free(): invalid pointer";
+     errout:
+ #ifdef ATOMIC_FASTBINS
+-      if (! have_lock && locked)
++      if (have_lock || locked)
+ 	(void)mutex_unlock(&av->mutex);
+ #endif
+       malloc_printerr (check_action, errstr, chunk2mem(p));
++#ifdef ATOMIC_FASTBINS
++      if (have_lock)
++	mutex_lock(&av->mutex);
++#endif
+       return;
+     }
+   /* We know that each chunk is at least MINSIZE bytes in size.  */
+@@ -4961,7 +4975,7 @@ _int_free(mstate av, mchunkptr p)
+       prevsize = p->prev_size;
+       size += prevsize;
+       p = chunk_at_offset(p, -((long) prevsize));
+-      unlink(p, bck, fwd);
++      unlink(av, p, bck, fwd);
+     }
+ 
+     if (nextchunk != av->top) {
+@@ -4970,7 +4984,7 @@ _int_free(mstate av, mchunkptr p)
+ 
+       /* consolidate forward */
+       if (!nextinuse) {
+-	unlink(nextchunk, bck, fwd);
++	unlink(av, nextchunk, bck, fwd);
+ 	size += nextsize;
+       } else
+ 	clear_inuse_bit_at_offset(nextchunk, 0);
+@@ -5158,7 +5172,7 @@ static void malloc_consolidate(av) mstat
+ 	    prevsize = p->prev_size;
+ 	    size += prevsize;
+ 	    p = chunk_at_offset(p, -((long) prevsize));
+-	    unlink(p, bck, fwd);
++	    unlink(av, p, bck, fwd);
+ 	  }
+ 
+ 	  if (nextchunk != av->top) {
+@@ -5166,7 +5180,7 @@ static void malloc_consolidate(av) mstat
+ 
+ 	    if (!nextinuse) {
+ 	      size += nextsize;
+-	      unlink(nextchunk, bck, fwd);
++	      unlink(av, nextchunk, bck, fwd);
+ 	    } else
+ 	      clear_inuse_bit_at_offset(nextchunk, 0);
+ 
+@@ -5235,7 +5249,9 @@ _int_realloc(mstate av, mchunkptr oldp, 
+     {
+       errstr = "realloc(): invalid old size";
+     errout:
++      mutex_unlock(&av->mutex);
+       malloc_printerr (check_action, errstr, chunk2mem(oldp));
++      mutex_lock(&av->mutex);
+       return NULL;
+     }
+ 
+@@ -5282,7 +5298,7 @@ _int_realloc(mstate av, mchunkptr oldp, 
+ 	       (unsigned long)(newsize = oldsize + nextsize) >=
+ 	       (unsigned long)(nb)) {
+ 	newp = oldp;
+-	unlink(next, bck, fwd);
++	unlink(av, next, bck, fwd);
+       }
+ 
+       /* allocate, copy, free */
diff --git a/SOURCES/glibc-rh730379.patch b/SOURCES/glibc-rh730379.patch
new file mode 100644
index 0000000..45808af
--- /dev/null
+++ b/SOURCES/glibc-rh730379.patch
@@ -0,0 +1,34 @@
+2011-08-17  Ulrich Drepper  <drepper@gmail.com>
+
+	* Makeconfig (override CFLAGS): Add library-specific CFLAGS.
+	* resolv/Makefile: Define CFLAGS-libresolv.
+
+Index: glibc-2.12-2-gc4ccff1/Makeconfig
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/Makeconfig
++++ glibc-2.12-2-gc4ccff1/Makeconfig
+@@ -700,7 +700,9 @@ CPPFLAGS = $($(subdir)-CPPFLAGS) $(+incl
+ override CFLAGS	= -std=gnu99 $(gnu89-inline-CFLAGS) \
+ 		  $(filter-out %frame-pointer,$(+cflags)) $(+gccwarn-c) \
+ 		  $(sysdep-CFLAGS) $(CFLAGS-$(suffix $@)) $(CFLAGS-$(<F)) \
+-		  $(CFLAGS-$(@F))
++		  $(CFLAGS-$(@F)) \
++		  $(foreach lib,$(libof-$(basename $(@F))) \
++				$(libof-$(<F)) $(libof-$(@F)),$(CFLAGS-$(lib)))
+ override CXXFLAGS = $(c++-sysincludes) \
+ 		    $(filter-out %frame-pointer,$(+cflags)) $(sysdep-CFLAGS) \
+ 		    $(CFLAGS-$(suffix $@)) $(CFLAGS-$(<F)) $(CFLAGS-$(@F))
+Index: glibc-2.12-2-gc4ccff1/resolv/Makefile
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/resolv/Makefile
++++ glibc-2.12-2-gc4ccff1/resolv/Makefile
+@@ -76,6 +76,9 @@ CPPFLAGS += -Dgethostbyname=res_gethostb
+ 	    -Dgetnetbyname=res_getnetbyname \
+ 	    -Dgetnetbyaddr=res_getnetbyaddr
+ 
++ifeq (yes,$(have-ssp))
++CFLAGS-libresolv += -fstack-protector
++endif
+ CFLAGS-res_hconf.c = -fexceptions
+ CFLAGS-res_send.c += -fno-strict-aliasing
+ 
diff --git a/SOURCES/glibc-rh731042.patch b/SOURCES/glibc-rh731042.patch
new file mode 100644
index 0000000..d2f7b55
--- /dev/null
+++ b/SOURCES/glibc-rh731042.patch
@@ -0,0 +1,51 @@
+2011-08-08  Andreas Schwab  <schwab@redhat.com>
+
+	* sysdeps/unix/sysv/linux/x86_64/cancellation.S: Maintain aligned
+	stack.
+	* sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S: Likewise.
+	* sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S: Likewise.
+
+Index: glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/cancellation.S
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nptl/sysdeps/unix/sysv/linux/x86_64/cancellation.S
++++ glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/cancellation.S
+@@ -71,7 +71,9 @@ ENTRY(__pthread_enable_asynccancel)
+ 
+ 1:	ret
+ 
+-3:	movq	$TCB_PTHREAD_CANCELED, %fs:RESULT
++3:	subq	$8, %rsp
++	cfi_adjust_cfa_offset(8)
++	movq	$TCB_PTHREAD_CANCELED, %fs:RESULT
+ 	lock
+ 	orl	$TCB_EXITING_BITMASK, %fs:CANCELHANDLING
+ 	movq	%fs:CLEANUP_JMP_BUF, %rdi
+Index: glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
++++ glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
+@@ -63,9 +63,9 @@ __pthread_cond_timedwait:
+ 	cfi_adjust_cfa_offset(8)
+ 	cfi_rel_offset(%r15, 0)
+ #ifdef __ASSUME_FUTEX_CLOCK_REALTIME
+-# define FRAME_SIZE 32
++# define FRAME_SIZE (32+8)
+ #else
+-# define FRAME_SIZE 48
++# define FRAME_SIZE (48+8)
+ #endif
+ 	subq	$FRAME_SIZE, %rsp
+ 	cfi_adjust_cfa_offset(FRAME_SIZE)
+Index: glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
++++ glibc-2.12-2-gc4ccff1/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
+@@ -45,7 +45,7 @@ __pthread_cond_wait:
+ 	cfi_lsda(DW_EH_PE_udata4, .LexceptSTART)
+ #endif
+ 
+-#define FRAME_SIZE 32
++#define FRAME_SIZE (32+8)
+ 	leaq	-FRAME_SIZE(%rsp), %rsp
+ 	cfi_adjust_cfa_offset(FRAME_SIZE)
+ 
diff --git a/SOURCES/glibc-rh736346.patch b/SOURCES/glibc-rh736346.patch
new file mode 100644
index 0000000..2dd3f8a
--- /dev/null
+++ b/SOURCES/glibc-rh736346.patch
@@ -0,0 +1,116 @@
+2011-01-14  Ulrich Drepper  <drepper@gmail.com>
+
+	[BZ #10563]
+	* sysdeps/unix/sysv/linux/i386/setgroups.c: Use INLINE_SETXID_SYSCALL
+	to make the syscall.
+	* sysdeps/unix/sysv/linux/setgroups.c: New file.
+
+2011-01-14  Ulrich Drepper  <drepper@gmail.com>
+
+	[BZ #10563]
+	* sysdeps/pthread/setxid.h (__SETXID_1): Add cast to assignment.
+	(__SETXID_2): Likewise.
+	(__SETXID_3): Likewise.
+
+Index: glibc-2.12-2-gc4ccff1/nptl/sysdeps/pthread/setxid.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nptl/sysdeps/pthread/setxid.h
++++ glibc-2.12-2-gc4ccff1/nptl/sysdeps/pthread/setxid.h
+@@ -20,11 +20,11 @@
+ #include <sysdep.h>
+ 
+ #define __SETXID_1(cmd, arg1) \
+-  cmd.id[0] = arg1
++  cmd.id[0] = (long int) arg1
+ #define __SETXID_2(cmd, arg1, arg2) \
+-  __SETXID_1 (cmd, arg1); cmd.id[1] = arg2
++  __SETXID_1 (cmd, arg1); cmd.id[1] = (long int) arg2
+ #define __SETXID_3(cmd, arg1, arg2, arg3) \
+-  __SETXID_2 (cmd, arg1, arg2); cmd.id[2] = arg3
++  __SETXID_2 (cmd, arg1, arg2); cmd.id[2] = (long int) arg3
+ 
+ #ifdef SINGLE_THREAD
+ # define INLINE_SETXID_SYSCALL(name, nr, args...) \
+Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/i386/setgroups.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/i386/setgroups.c
++++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/i386/setgroups.c
+@@ -25,6 +25,7 @@
+ #include <sys/syscall.h>
+ #include <bp-checks.h>
+ 
++#include <setxid.h>
+ #include <linux/posix_types.h>
+ #include <kernel-features.h>
+ 
+@@ -44,7 +45,7 @@ int
+ setgroups (size_t n, const gid_t *groups)
+ {
+ #if __ASSUME_32BITUIDS > 0
+-  return INLINE_SYSCALL (setgroups32, 2, n, CHECK_N (groups, n));
++  return INLINE_SETXID_SYSCALL (setgroups32, 2, n, CHECK_N (groups, n));
+ #else
+   if (n > (size_t) __sysconf (_SC_NGROUPS_MAX))
+     {
+@@ -62,7 +63,8 @@ setgroups (size_t n, const gid_t *groups
+ 	  int result;
+ 	  int saved_errno = errno;
+ 
+-	  result = INLINE_SYSCALL (setgroups32, 2, n, CHECK_N (groups, n));
++	  result = INLINE_SETXID_SYSCALL (setgroups32, 2, n,
++					  CHECK_N (groups, n));
+ 	  if (result == 0 || errno != ENOSYS)
+ 	    return result;
+ 
+@@ -80,7 +82,8 @@ setgroups (size_t n, const gid_t *groups
+ 	    }
+ 	}
+ 
+-      return INLINE_SYSCALL (setgroups, 2, n, CHECK_N (kernel_groups, n));
++      return INLINE_SETXID_SYSCALL (setgroups, 2, n,
++				    CHECK_N (kernel_groups, n));
+     }
+ #endif
+ }
+Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/setgroups.c
+===================================================================
+--- /dev/null
++++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/setgroups.c
+@@ -0,0 +1,37 @@
++/* Copyright (C) 1997,1998,2000,2002,2004,2006,2011
++   Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library 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
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++#include <errno.h>
++#include <grp.h>
++#include <setxid.h>
++#include <sysdep.h>
++
++
++/* Set the group set for the current user to GROUPS (N of them).  For
++   Linux we must convert the array of groups into the format that the
++   kernel expects.  */
++int
++setgroups (size_t n, const gid_t *groups)
++{
++#ifdef __NR_setgroups32
++# error "wrong setgroups.c file used"
++#endif
++  return INLINE_SETXID_SYSCALL (setgroups, 2, n, groups);
++}
++libc_hidden_def (setgroups)
diff --git a/SOURCES/glibc-rh737778.patch b/SOURCES/glibc-rh737778.patch
new file mode 100644
index 0000000..5d3c131
--- /dev/null
+++ b/SOURCES/glibc-rh737778.patch
@@ -0,0 +1,122 @@
+2011-08-14  Roland McGrath  <roland@hack.frob.com>
+
+	* locale/Makefile (locale-CPPFLAGS): Renamed CPPFLAGS-locale-programs.
+	(locale-CPPFLAGS): New variable; put LOCALEDIR, LOCALE_ALIAS_PATH and
+	-Iprograms here.
+	(cppflags-iterator.mk sequence): Use locale-programs in place of nonlib.
+	(localedef-modules): Add localedef.
+	(locale-modules): Add locale.
+
+2011-08-13  Ulrich Drepper  <drepper@gmail.com>
+
+	* intl/l10nflist.c (_nl_normalize_codeset): Make it compile outside
+	of libc.  Make tolower call locale-independent.  Optimize a bit by
+	using isdigit instead of isalnum.
+	* locale/Makefile (locale-CPPFLAGS): Add -DNOT_IN_libc.
+
+2011-08-11  Ulrich Drepper  <drepper@gmail.com>
+
+	* intl/l10nflist.c (_nl_make_l10nflist): Use locale-independent
+	classification.
+
+Index: glibc-2.12-2-gc4ccff1/intl/l10nflist.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/intl/l10nflist.c
++++ glibc-2.12-2-gc4ccff1/intl/l10nflist.c
+@@ -332,13 +332,18 @@ _nl_normalize_codeset (codeset, name_len
+   char *retval;
+   char *wp;
+   size_t cnt;
++#ifdef NOT_IN_libc
++  locale_t locale = newlocale (0, "C", NULL);
++#else
++# define locale _nl_C_locobj_ptr
++#endif
+ 
+   for (cnt = 0; cnt < name_len; ++cnt)
+-    if (isalnum ((unsigned char) codeset[cnt]))
++    if (__isalnum_l ((unsigned char) codeset[cnt], locale))
+       {
+ 	++len;
+ 
+-	if (isalpha ((unsigned char) codeset[cnt]))
++	if (! __isdigit_l ((unsigned char) codeset[cnt], locale))
+ 	  only_digit = 0;
+       }
+ 
+@@ -346,15 +351,14 @@ _nl_normalize_codeset (codeset, name_len
+ 
+   if (retval != NULL)
+     {
++      wp = retval;
+       if (only_digit)
+-	wp = stpcpy (retval, "iso");
+-      else
+-	wp = retval;
++	wp = stpcpy (wp, "iso");
+ 
+       for (cnt = 0; cnt < name_len; ++cnt)
+-	if (isalpha ((unsigned char) codeset[cnt]))
+-	  *wp++ = tolower ((unsigned char) codeset[cnt]);
+-	else if (isdigit ((unsigned char) codeset[cnt]))
++	if (__isalpha_l ((unsigned char) codeset[cnt], locale))
++	  *wp++ = __tolower_l ((unsigned char) codeset[cnt], locale);
++	else if (__isdigit_l ((unsigned char) codeset[cnt], locale))
+ 	  *wp++ = codeset[cnt];
+ 
+       *wp = '\0';
+Index: glibc-2.12-2-gc4ccff1/locale/Makefile
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/locale/Makefile
++++ glibc-2.12-2-gc4ccff1/locale/Makefile
+@@ -59,10 +59,11 @@ vpath %.c programs ../crypt
+ vpath %.h programs
+ vpath %.gperf programs
+ 
+-localedef-modules	:= $(categories:%=ld-%) charmap linereader locfile \
++localedef-modules	:= localedef $(categories:%=ld-%) \
++			   charmap linereader locfile \
+ 			   repertoire locarchive
+ localedef-aux		:= md5
+-locale-modules		:= locale-spec
++locale-modules		:= locale locale-spec
+ lib-modules		:= charmap-dir simple-hash xmalloc xstrdup
+ 
+ 
+@@ -90,22 +91,27 @@ endif
+ 
+ localepath = "$(localedir):$(i18ndir)"
+ 
+-locale-CPPFLAGS := -DLOCALE_PATH='$(localepath)' \
+-		   -DLOCALEDIR='"$(localedir)"' \
+-		   -DLOCALE_ALIAS_PATH='"$(msgcatdir)"' \
+-		   -DCHARMAP_PATH='"$(i18ndir)/charmaps"' \
+-		   -DREPERTOIREMAP_PATH='"$(i18ndir)/repertoiremaps"' \
+-		   -DLOCSRCDIR='"$(i18ndir)/locales"' -DHAVE_CONFIG_H \
+-		   -Iprograms
++# -Iprograms doesn't really belong here, but this gets it at the head
++# of the list instead of the tail, where CPPFLAGS-$(lib) gets added.
++# We need it before the standard -I's to see programs/config.h first.
++locale-CPPFLAGS = -DLOCALEDIR='"$(localedir)"' \
++		  -DLOCALE_ALIAS_PATH='"$(msgcatdir)"' \
++		  -Iprograms
++
++CPPFLAGS-locale-programs = -DLOCALE_PATH='$(localepath)' \
++			   -DCHARMAP_PATH='"$(i18ndir)/charmaps"' \
++			   -DREPERTOIREMAP_PATH='"$(i18ndir)/repertoiremaps"' \
++			   -DLOCSRCDIR='"$(i18ndir)/locales"' \
++			   -DHAVE_CONFIG_H -DNOT_IN_libc
+ 
+ CFLAGS-charmap.c = -Wno-write-strings -Wno-char-subscripts
+ CFLAGS-locfile.c = -Wno-write-strings -Wno-char-subscripts
+ CFLAGS-charmap-dir.c = -Wno-write-strings
+ 
+-# This makes sure -DNOT_IN_libc is passed for all these modules.
++# This makes sure -DNOT_IN_libc et al are passed for all these modules.
+ cpp-srcs-left := $(addsuffix .c,$(localedef-modules) $(localedef-aux) \
+ 				$(locale-modules) $(lib-modules))
+-lib := nonlib
++lib := locale-programs
+ include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left))
+ 
+ # Depend on libc.so so a DT_NEEDED is generated in the shared objects.
diff --git a/SOURCES/glibc-rh738665.patch b/SOURCES/glibc-rh738665.patch
new file mode 100644
index 0000000..1eea554
--- /dev/null
+++ b/SOURCES/glibc-rh738665.patch
@@ -0,0 +1,149 @@
+2011-09-15  Andreas Schwab  <schwab@redhat.com>
+
+	* sysdeps/pthread/list.h: Define only list_t if __need_list_t is
+	defined.
+	(list_add): Add atomic_write_barrier.
+	* descr.h: Define __need_list_t before including <list.h>.
+	* nptl-init.c: Include <list.h>
+	* allocatestack.c: Likewise.
+
+2011-09-15  Andreas Schwab  <schwab@redhat.com>
+
+	* thread_dbP.h: Include <list.h>
+
+Index: glibc-2.12-2-gc4ccff1/nptl/allocatestack.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nptl/allocatestack.c
++++ glibc-2.12-2-gc4ccff1/nptl/allocatestack.c
+@@ -27,6 +27,7 @@
+ #include <sys/param.h>
+ #include <dl-sysdep.h>
+ #include <tls.h>
++#include <list.h>
+ #include <lowlevellock.h>
+ #include <kernel-features.h>
+ 
+Index: glibc-2.12-2-gc4ccff1/nptl/descr.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nptl/descr.h
++++ glibc-2.12-2-gc4ccff1/nptl/descr.h
+@@ -26,6 +26,7 @@
+ #include <stdbool.h>
+ #include <sys/types.h>
+ #include <hp-timing.h>
++#define __need_list_t
+ #include <list.h>
+ #include <lowlevellock.h>
+ #include <pthreaddef.h>
+Index: glibc-2.12-2-gc4ccff1/nptl/nptl-init.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nptl/nptl-init.c
++++ glibc-2.12-2-gc4ccff1/nptl/nptl-init.c
+@@ -29,6 +29,7 @@
+ #include <atomic.h>
+ #include <ldsodefs.h>
+ #include <tls.h>
++#include <list.h>
+ #include <fork.h>
+ #include <version.h>
+ #include <shlib-compat.h>
+Index: glibc-2.12-2-gc4ccff1/nptl/sysdeps/pthread/list.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nptl/sysdeps/pthread/list.h
++++ glibc-2.12-2-gc4ccff1/nptl/sysdeps/pthread/list.h
+@@ -18,27 +18,39 @@
+    02111-1307 USA.  */
+ 
+ #ifndef _LIST_H
+-#define _LIST_H	1
++
++#ifndef __need_list_t
++# define _LIST_H	1
++#endif
+ 
+ /* The definitions of this file are adopted from those which can be
+    found in the Linux kernel headers to enable people familiar with
+    the latter find their way in these sources as well.  */
+ 
+ 
++#if defined __need_list_t || defined _LIST_H
++# ifndef __list_t_defined
++#  define __list_t_defined
+ /* Basic type for the double-link list.  */
+ typedef struct list_head
+ {
+   struct list_head *next;
+   struct list_head *prev;
+ } list_t;
++# endif
++# undef __need_list_t
++#endif
++
++#ifdef _LIST_H
+ 
++# include <atomic.h>
+ 
+ /* Define a variable with the head and tail of the list.  */
+-#define LIST_HEAD(name) \
++# define LIST_HEAD(name) \
+   list_t name = { &(name), &(name) }
+ 
+ /* Initialize a new list head.  */
+-#define INIT_LIST_HEAD(ptr) \
++# define INIT_LIST_HEAD(ptr) \
+   (ptr)->next = (ptr)->prev = (ptr)
+ 
+ 
+@@ -49,6 +61,7 @@ list_add (list_t *newp, list_t *head)
+   newp->next = head->next;
+   newp->prev = head;
+   head->next->prev = newp;
++  atomic_write_barrier ();
+   head->next = newp;
+ }
+ 
+@@ -78,26 +91,28 @@ list_splice (list_t *add, list_t *head)
+ 
+ 
+ /* Get typed element from list at a given position.  */
+-#define list_entry(ptr, type, member) \
++# define list_entry(ptr, type, member) \
+   ((type *) ((char *) (ptr) - (unsigned long) (&((type *) 0)->member)))
+ 
+ 
+ 
+ /* Iterate forward over the elements of the list.  */
+-#define list_for_each(pos, head) \
++# define list_for_each(pos, head) \
+   for (pos = (head)->next; pos != (head); pos = pos->next)
+ 
+ 
+ /* Iterate forward over the elements of the list.  */
+-#define list_for_each_prev(pos, head) \
++# define list_for_each_prev(pos, head) \
+   for (pos = (head)->prev; pos != (head); pos = pos->prev)
+ 
+ 
+ /* Iterate backwards over the elements list.  The list elements can be
+    removed from the list while doing this.  */
+-#define list_for_each_prev_safe(pos, p, head) \
++# define list_for_each_prev_safe(pos, p, head) \
+   for (pos = (head)->prev, p = pos->prev; \
+        pos != (head); \
+        pos = p, p = pos->prev)
+ 
++#endif /* _LIST_H */
++
+ #endif	/* list.h */
+Index: glibc-2.12-2-gc4ccff1/nptl_db/thread_dbP.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/nptl_db/thread_dbP.h
++++ glibc-2.12-2-gc4ccff1/nptl_db/thread_dbP.h
+@@ -29,6 +29,7 @@
+ #include "proc_service.h"
+ #include "thread_db.h"
+ #include "../nptl/pthreadP.h"  	/* This is for *_BITMASK only.  */
++#include <list.h>
+ 
+ /* Indeces for the symbol names.  */
+ enum
diff --git a/SOURCES/glibc-rh738763.patch b/SOURCES/glibc-rh738763.patch
new file mode 100644
index 0000000..728464d
--- /dev/null
+++ b/SOURCES/glibc-rh738763.patch
@@ -0,0 +1,17 @@
+2011-09-15  Ulrich Drepper  <drepper@gmail.com>
+
+	* sysdeps/unix/sysv/linux/bits/in.h (IP_MULTICAST_ALL): Define.
+	Patch mostly by Neil Horman <nhorman@tuxdriver.com>.
+
+Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/bits/in.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/bits/in.h
++++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/bits/in.h
+@@ -70,6 +70,7 @@
+ #define IP_XFRM_POLICY	17
+ #define IP_PASSSEC	18
+ #define IP_TRANSPARENT	19
++#define IP_MULTICAST_ALL 49	/* bool */
+ 
+ /* TProxy original addresses */
+ #define IP_ORIGDSTADDR       20
diff --git a/SOURCES/glibc-rh739184.patch b/SOURCES/glibc-rh739184.patch
new file mode 100644
index 0000000..cf12246
--- /dev/null
+++ b/SOURCES/glibc-rh739184.patch
@@ -0,0 +1,18 @@
+2010-06-10  Andreas Schwab  <schwab@redhat.com>
+
+	* sysdeps/unix/sysv/linux/getpagesize.c: Don't assume AT_PAGESIZE
+	is always available.
+
+Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/getpagesize.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/getpagesize.c
++++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/getpagesize.c
+@@ -28,7 +28,7 @@
+ int
+ __getpagesize ()
+ {
+-#ifdef __ASSUME_AT_PAGESIZE
++#if 0 && defined __ASSUME_AT_PAGESIZE
+   assert (GLRO(dl_pagesize) != 0);
+   return GLRO(dl_pagesize);
+ #else
diff --git a/SOURCES/glibc-rh739971.patch b/SOURCES/glibc-rh739971.patch
new file mode 100644
index 0000000..960c192
--- /dev/null
+++ b/SOURCES/glibc-rh739971.patch
@@ -0,0 +1,44 @@
+commit 32c76b63be605d12314e0c6ac2bd702c883d1423
+Author: Andreas Schwab <schwab@redhat.com>
+Date:   Mon Sep 26 17:49:14 2011 +0200
+
+    Correctly reparse group line after enlarging the buffer
+
+diff --git a/nss/nss_files/files-initgroups.c b/nss/nss_files/files-initgroups.c
+index 113abf2..c343b35 100644
+--- a/nss/nss_files/files-initgroups.c
++++ b/nss/nss_files/files-initgroups.c
+@@ -52,8 +52,10 @@ _nss_files_initgroups_dyn (const char *user, gid_t group, long int *start,
+   gid_t *groups = *groupsp;
+ 
+   /* We have to iterate over the entire file.  */
+-  while (!feof_unlocked (stream))
++  while (1)
+     {
++      fpos_t pos;
++      fgetpos (stream, &pos);
+       ssize_t n = getline (&line, &linelen, stream);
+       if (n < 0)
+ 	{
+@@ -64,9 +66,8 @@ _nss_files_initgroups_dyn (const char *user, gid_t group, long int *start,
+ 	}
+ 
+       struct group grp;
+-      int res;
+-      while ((res = _nss_files_parse_grent (line, &grp, buffer, buflen,
+-					    errnop)) == -1)
++      int res = _nss_files_parse_grent (line, &grp, buffer, buflen, errnop);
++      if (res == -1)
+ 	{
+ 	  size_t newbuflen = 2 * buflen;
+ 	  if (buffer_use_malloc || ! __libc_use_alloca (buflen + newbuflen))
+@@ -85,6 +86,9 @@ _nss_files_initgroups_dyn (const char *user, gid_t group, long int *start,
+ 	    }
+ 	  else
+ 	    buffer = extend_alloca (buffer, buflen, newbuflen);
++	  /* Reread current line, the parser has clobbered it.  */
++	  fsetpos (stream, &pos);
++	  continue;
+ 	}
+ 
+       if (res > 0 && grp.gr_gid != group)
diff --git a/SOURCES/glibc-rh740506-2.patch b/SOURCES/glibc-rh740506-2.patch
new file mode 100644
index 0000000..adefea0
--- /dev/null
+++ b/SOURCES/glibc-rh740506-2.patch
@@ -0,0 +1,35 @@
+	* malloc/arena.c (arena_get2): Avoid unnecessarily
+	retrieving #cpus from /proc.
+	* malloc/malloc.c (mALLOPt): Clamp arena_test based on
+	the value of arena_max.
+
+diff --git a/malloc/arena.c b/malloc/arena.c
+index cb8548b..00f1da5 100644
+--- a/malloc/arena.c
++++ b/malloc/arena.c
+@@ -828,7 +828,7 @@ arena_get2(mstate a_tsd, size_t size)
+ 	{
+ 	  if (mp_.arena_max != 0)
+ 	    narenas_limit = mp_.arena_max;
+-	  else
++	  else if (narenas > mp_.arena_test)
+ 	    {
+ 	      int n  = __get_nprocs ();
+ 
+diff --git a/malloc/malloc.c b/malloc/malloc.c
+index 8608083..f8d32da 100644
+--- a/malloc/malloc.c
++++ b/malloc/malloc.c
+@@ -6134,6 +6134,12 @@ int mALLOPt(param_number, value) int par
+     break;
+ #endif
+   }
++#ifdef PER_THREAD
++  /* Clamp ARENA_TEST from ARENA_MAX to avoid creating too many
++     arenas.  */
++  if (mp_.arena_max > 0 && mp_.arena_max <= mp_.arena_test)
++    mp_.arena_test = mp_.arena_max - 1;
++#endif
+   (void)mutex_unlock(&av->mutex);
+   return res;
+ }
diff --git a/SOURCES/glibc-rh740506.patch b/SOURCES/glibc-rh740506.patch
new file mode 100644
index 0000000..6c74ccf
--- /dev/null
+++ b/SOURCES/glibc-rh740506.patch
@@ -0,0 +1,132 @@
+2011-11-14  Andreas Schwab  <schwab@redhat.com>
+
+	* malloc/arena.c (arena_get2): Don't call reused_arena when
+	_int_new_arena failed.
+
+2011-11-10  Andreas Schwab  <schwab@redhat.com>
+
+	* malloc/arena.c (_int_new_arena): Don't increment narenas.
+	(reused_arena): Don't check arena limit.
+	(arena_get2): Atomically check arena limit.
+
+diff --git a/malloc/arena.c b/malloc/arena.c
+index 9114fd2..042cac8 100644
+--- a/malloc/arena.c
++++ b/malloc/arena.c
+@@ -747,8 +747,6 @@ _int_new_arena(size_t size)
+   main_arena.next = a;
+ 
+ #ifdef PER_THREAD
+-  ++narenas;
+-
+   (void)mutex_unlock(&list_lock);
+ #endif
+ 
+@@ -786,30 +784,6 @@ get_free_list (void)
+ static mstate
+ reused_arena (void)
+ {
+-  if (narenas <= mp_.arena_test)
+-    return NULL;
+-
+-  static int narenas_limit;
+-  if (narenas_limit == 0)
+-    {
+-      if (mp_.arena_max != 0)
+-	narenas_limit = mp_.arena_max;
+-      else
+-	{
+-	  int n  = __get_nprocs ();
+-
+-	  if (n >= 1)
+-	    narenas_limit = NARENAS_FROM_NCORES (n);
+-	  else
+-	    /* We have no information about the system.  Assume two
+-	       cores.  */
+-	    narenas_limit = NARENAS_FROM_NCORES (2);
+-	}
+-    }
+-
+-  if (narenas < narenas_limit)
+-    return NULL;
+-
+   mstate result;
+   static mstate next_to_use;
+   if (next_to_use == NULL)
+@@ -844,10 +818,41 @@ arena_get2(mstate a_tsd, size_t size)
+   mstate a;
+ 
+ #ifdef PER_THREAD
+-  if ((a = get_free_list ()) == NULL
+-      && (a = reused_arena ()) == NULL)
+-    /* Nothing immediately available, so generate a new arena.  */
+-    a = _int_new_arena(size);
++  static size_t narenas_limit;
++
++  a = get_free_list ();
++  if (a == NULL)
++    {
++      /* Nothing immediately available, so generate a new arena.  */
++      if (narenas_limit == 0)
++	{
++	  if (mp_.arena_max != 0)
++	    narenas_limit = mp_.arena_max;
++	  else
++	    {
++	      int n  = __get_nprocs ();
++
++	      if (n >= 1)
++		narenas_limit = NARENAS_FROM_NCORES (n);
++	      else
++		/* We have no information about the system.  Assume two
++		   cores.  */
++		narenas_limit = NARENAS_FROM_NCORES (2);
++	    }
++	}
++    repeat:;
++      size_t n = narenas;
++      if (__builtin_expect (n <= mp_.arena_test || n < narenas_limit, 0))
++	{
++	  if (catomic_compare_and_exchange_bool_acq(&narenas, n + 1, n))
++	    goto repeat;
++	  a = _int_new_arena (size);
++	  if (__builtin_expect (a != NULL, 1))
++	    return a;
++	  catomic_decrement(&narenas);
++	}
++      a = reused_arena ();
++    }
+ #else
+   if(!a_tsd)
+     a = a_tsd = &main_arena;
+
+commit a5fb313cb7b7e692fd4684916aaa98e03ec7e8b6
+Author: Andreas Schwab <schwab@redhat.com>
+Date:   Mon Nov 14 11:41:52 2011 +0100
+
+    Don't call reused_arena when _int_new_arena failed
+
+diff --git a/malloc/arena.c b/malloc/arena.c
+index 042cac8..cb8548b 100644
+--- a/malloc/arena.c
++++ b/malloc/arena.c
+@@ -844,14 +844,14 @@ arena_get2(mstate a_tsd, size_t size)
+       size_t n = narenas;
+       if (__builtin_expect (n <= mp_.arena_test || n < narenas_limit, 0))
+ 	{
+-	  if (catomic_compare_and_exchange_bool_acq(&narenas, n + 1, n))
++	  if (catomic_compare_and_exchange_bool_acq (&narenas, n + 1, n))
+ 	    goto repeat;
+ 	  a = _int_new_arena (size);
+-	  if (__builtin_expect (a != NULL, 1))
+-	    return a;
+-	  catomic_decrement(&narenas);
++	  if (__builtin_expect (a == NULL, 0))
++	    catomic_decrement (&narenas);
+ 	}
+-      a = reused_arena ();
++      else
++	a = reused_arena ();
+     }
+ #else
+   if(!a_tsd)
diff --git a/SOURCES/glibc-rh749188.patch b/SOURCES/glibc-rh749188.patch
new file mode 100644
index 0000000..43157cd
--- /dev/null
+++ b/SOURCES/glibc-rh749188.patch
@@ -0,0 +1,32 @@
+commit 0e8131bb32cf026c87baeacb7abf2a9bdbbc4953
+Author: Andreas Schwab <schwab@redhat.com>
+Date:   Sun May 8 21:48:03 2011 -0400
+
+    Remove .UTF-8 suffix from locale names when it is the only supported codeset
+
+diff --git a/localedata/SUPPORTED b/localedata/SUPPORTED
+index d665961..e952c17 100644
+--- a/localedata/SUPPORTED
++++ b/localedata/SUPPORTED
+@@ -46,8 +46,8 @@ ar_TN.UTF-8/UTF-8 \
+ ar_TN/ISO-8859-6 \
+ ar_YE.UTF-8/UTF-8 \
+ ar_YE/ISO-8859-6 \
+-az_AZ.UTF-8/UTF-8 \
+-as_IN.UTF-8/UTF-8 \
++az_AZ/UTF-8 \
++as_IN/UTF-8 \
+ ast_ES.UTF-8/UTF-8 \
+ ast_ES/ISO-8859-15 \
+ be_BY.UTF-8/UTF-8 \
+@@ -385,8 +385,8 @@ tr_CY/ISO-8859-9 \
+ tr_TR.UTF-8/UTF-8 \
+ tr_TR/ISO-8859-9 \
+ ts_ZA/UTF-8 \
+-tt_RU.UTF-8/UTF-8 \
+-tt_RU.UTF-8@iqtelif/UTF-8 \
++tt_RU/UTF-8 \
++tt_RU@iqtelif/UTF-8 \
+ ug_CN/UTF-8 \
+ uk_UA.UTF-8/UTF-8 \
+ uk_UA/KOI8-U \
diff --git a/SOURCES/glibc-rh750531.patch b/SOURCES/glibc-rh750531.patch
new file mode 100644
index 0000000..a53e770
--- /dev/null
+++ b/SOURCES/glibc-rh750531.patch
@@ -0,0 +1,122 @@
+commit 69da074d7adfab7b57004a0dea9403a928e310a5
+Author: Ulrich Drepper <drepper@gmail.com>
+Date:   Wed Nov 10 02:38:35 2010 -0500
+
+    Fix warnings in __bswap_16.
+
+diff --git a/sysdeps/i386/bits/byteswap.h b/sysdeps/i386/bits/byteswap.h
+index 1f3fc5e..c246ae8 100644
+--- a/sysdeps/i386/bits/byteswap.h
++++ b/sysdeps/i386/bits/byteswap.h
+@@ -1,5 +1,5 @@
+ /* Macros to swap the order of bytes in integer values.
+-   Copyright (C) 1997, 1998, 2000, 2002, 2003, 2006, 2007, 2008
++   Copyright (C) 1997, 1998, 2000, 2002, 2003, 2006, 2007, 2008, 2010
+    Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+ 
+@@ -27,26 +27,27 @@
+ 
+ /* Swap bytes in 16 bit value.  */
+ #define __bswap_constant_16(x) \
+-     ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8))
++     ((unsigned short int) ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8)))
+ 
+ #ifdef __GNUC__
+ # if __GNUC__ >= 2
+ #  define __bswap_16(x) \
+      (__extension__							      \
+-      ({ register unsigned short int __v, __x = (x);			      \
++      ({ register unsigned short int __v, __x = (unsigned short int) (x);     \
+ 	 if (__builtin_constant_p (__x))				      \
+ 	   __v = __bswap_constant_16 (__x);				      \
+ 	 else								      \
+ 	   __asm__ ("rorw $8, %w0"					      \
+ 		    : "=r" (__v)					      \
+- 		    : "0" (__x)						      \
+- 		    : "cc");						      \
++		    : "0" (__x)						      \
++		    : "cc");						      \
+ 	 __v; }))
+ # else
+ /* This is better than nothing.  */
+ #  define __bswap_16(x) \
+      (__extension__							      \
+-      ({ register unsigned short int __x = (x); __bswap_constant_16 (__x); }))
++      ({ register unsigned short int __x = (unsigned short int) (x);	      \
++	 __bswap_constant_16 (__x); }))
+ # endif
+ #else
+ static __inline unsigned short int
+@@ -122,7 +123,7 @@ __bswap_32 (unsigned int __bsx)
+      (__extension__							      \
+       ({ union { __extension__ unsigned long long int __ll;		      \
+ 		 unsigned long int __l[2]; } __w, __r;			      \
+-         if (__builtin_constant_p (x))					      \
++	 if (__builtin_constant_p (x))					      \
+ 	   __r.__ll = __bswap_constant_64 (x);				      \
+ 	 else								      \
+ 	   {								      \
+diff --git a/sysdeps/x86_64/bits/byteswap.h b/sysdeps/x86_64/bits/byteswap.h
+index 08b38e8..e350fb8 100644
+--- a/sysdeps/x86_64/bits/byteswap.h
++++ b/sysdeps/x86_64/bits/byteswap.h
+@@ -1,5 +1,5 @@
+ /* Macros to swap the order of bytes in integer values.
+-   Copyright (C) 1997, 1998, 2000, 2002, 2003, 2007, 2008
++   Copyright (C) 1997, 1998, 2000, 2002, 2003, 2007, 2008, 2010
+    Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+ 
+@@ -29,12 +29,12 @@
+ 
+ /* Swap bytes in 16 bit value.  */
+ #define __bswap_constant_16(x) \
+-     ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8))
++     ((unsigned short int) ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8)))
+ 
+ #if defined __GNUC__ && __GNUC__ >= 2
+ # define __bswap_16(x) \
+      (__extension__							      \
+-      ({ register unsigned short int __v, __x = (x);			      \
++      ({ register unsigned short int __v, __x = (unsigned short int) (x);     \
+ 	 if (__builtin_constant_p (__x))				      \
+ 	   __v = __bswap_constant_16 (__x);				      \
+ 	 else								      \
+@@ -47,7 +47,8 @@
+ /* This is better than nothing.  */
+ # define __bswap_16(x) \
+      (__extension__							      \
+-      ({ register unsigned short int __x = (x); __bswap_constant_16 (__x); }))
++      ({ register unsigned short int __x = (unsigned short int) (x);          \
++	 __bswap_constant_16 (__x); }))
+ #endif
+ 
+ 
+@@ -120,16 +121,16 @@
+ #  define __bswap_64(x) \
+      (__extension__                                                           \
+       ({ union { __extension__ unsigned long long int __ll;                   \
+-                 unsigned int __l[2]; } __w, __r;                             \
+-         if (__builtin_constant_p (x))                                        \
+-           __r.__ll = __bswap_constant_64 (x);                                \
+-         else                                                                 \
+-           {                                                                  \
+-             __w.__ll = (x);                                                  \
+-             __r.__l[0] = __bswap_32 (__w.__l[1]);                            \
+-             __r.__l[1] = __bswap_32 (__w.__l[0]);                            \
+-           }                                                                  \
+-         __r.__ll; }))
++		 unsigned int __l[2]; } __w, __r;                             \
++	 if (__builtin_constant_p (x))                                        \
++	   __r.__ll = __bswap_constant_64 (x);                                \
++	 else                                                                 \
++	   {                                                                  \
++	     __w.__ll = (x);                                                  \
++	     __r.__l[0] = __bswap_32 (__w.__l[1]);                            \
++	     __r.__l[1] = __bswap_32 (__w.__l[0]);                            \
++	   }                                                                  \
++	 __r.__ll; }))
+ # endif
+ #endif
+ 
diff --git a/SOURCES/glibc-rh751750.patch b/SOURCES/glibc-rh751750.patch
new file mode 100644
index 0000000..6f9dd12
--- /dev/null
+++ b/SOURCES/glibc-rh751750.patch
@@ -0,0 +1,28 @@
+commit 7583a88d1c7170caad26966bcea8bfc2c92093ba
+Author: Andreas Schwab <schwab@redhat.com>
+Date:   Mon Nov 7 15:07:31 2011 +0100
+
+    Fix locking in _IO_flush_all_lockp
+
+diff --git a/libio/genops.c b/libio/genops.c
+index 5d21c42..bb40c34 100644
+--- a/libio/genops.c
++++ b/libio/genops.c
+@@ -826,7 +826,7 @@ _IO_flush_all_lockp (int do_lock)
+   int last_stamp;
+ 
+ #ifdef _IO_MTSAFE_IO
+-  _IO_cleanup_region_start_noarg (flush_cleanup);
++  __libc_cleanup_region_start (do_lock, flush_cleanup, 0);
+   if (do_lock)
+     _IO_lock_lock (list_all_lock);
+ #endif
+@@ -866,7 +866,7 @@ _IO_flush_all_lockp (int do_lock)
+ #ifdef _IO_MTSAFE_IO
+   if (do_lock)
+     _IO_lock_unlock (list_all_lock);
+-  _IO_cleanup_region_end (0);
++  __libc_cleanup_region_end (0);
+ #endif
+ 
+   return result;
diff --git a/SOURCES/glibc-rh752122.patch b/SOURCES/glibc-rh752122.patch
new file mode 100644
index 0000000..0176dc9
--- /dev/null
+++ b/SOURCES/glibc-rh752122.patch
@@ -0,0 +1,260 @@
+2011-07-24  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* sysdeps/x86_64/dl-trampoline.S (_dl_runtime_profile): Simplify
+	AVX check.
+
+2011-08-20  Ulrich Drepper  <drepper@gmail.com>
+
+	* sysdeps/x86_64/dl-trampoline.h: If MORE_CODE is defined, restore
+	the CFI state in the end.
+	* sysdeps/x86_64/dl-trampoline.S: Define MORE_CODE before first
+	inclusion of dl-trampoline.h.
+	Based on a patch by Jiri Olsa <jolsa@redhat.com>.
+
+2011-07-23  Ulrich Drepper  <drepper@gmail.com>
+
+	* sysdeps/x86_64/dl-trampoline.S (_dl_runtime_profile): Fix one more
+	typo.
+	(_dl_x86_64_save_sse): Likewise.
+
+2011-07-22  Ulrich Drepper  <drepper@gmail.com>
+
+	* sysdeps/x86_64/dl-trampoline.S (_dl_runtime_profile): Fix test for
+	OSXSAVE.
+	(_dl_x86_64_save_sse): Likewise.
+
+2011-07-21  Andreas Schwab  <schwab@redhat.com>
+
+	* sysdeps/x86_64/dl-trampoline.S (_dl_runtime_profile): Fix last
+	change.
+	(_dl_x86_64_save_sse): Use correct AVX check.
+
+2011-07-20  Ulrich Drepper  <drepper@gmail.com>
+
+	[BZ #13007]
+	* sysdeps/x86_64/dl-trampoline.S (_dl_runtime_profile): More complete
+	check for AVX enablement so that we don't crash with old kernels and
+	new hardware.
+	* elf/tst-audit4.c: Add same checks here.
+	* elf/tst-audit6.c: Likewise.
+
+Index: glibc-2.12-2-gc4ccff1/elf/tst-audit4.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/elf/tst-audit4.c
++++ glibc-2.12-2-gc4ccff1/elf/tst-audit4.c
+@@ -6,16 +6,30 @@
+ #include <cpuid.h>
+ #include <immintrin.h>
+ 
++
++static int
++avx_enabled (void)
++{
++  unsigned int eax, ebx, ecx, edx;
++
++  if (__get_cpuid (1, &eax, &ebx, &ecx, &edx) == 0
++      || (ecx & (bit_AVX | bit_OSXSAVE)) != (bit_AVX | bit_OSXSAVE))
++    return 0;
++
++  /* Check the OS has AVX and SSE saving enabled.  */
++  asm ("xgetbv" : "=a" (eax), "=d" (edx) : "c" (0));
++
++  return (eax & 6) == 6;
++}
++
++
+ extern __m256i audit_test (__m256i, __m256i, __m256i, __m256i,
+ 			   __m256i, __m256i, __m256i, __m256i);
+ int
+ main (void)
+ {
+-  unsigned int eax, ebx, ecx, edx;
+-
+   /* Run AVX test only if AVX is supported.  */
+-  if (__get_cpuid (1, &eax, &ebx, &ecx, &edx)
+-      && (ecx & bit_AVX))
++  if (avx_enabled ())
+     {
+       __m256i ymm = _mm256_setzero_si256 ();
+       __m256i ret = audit_test (ymm, ymm, ymm, ymm, ymm, ymm, ymm, ymm);
+Index: glibc-2.12-2-gc4ccff1/elf/tst-audit6.c
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/elf/tst-audit6.c
++++ glibc-2.12-2-gc4ccff1/elf/tst-audit6.c
+@@ -8,14 +8,28 @@
+ extern __m128i audit_test (__m128i, __m128i, __m128i, __m128i,
+ 			   __m128i, __m128i, __m128i, __m128i);
+ 
+-int
+-main (void)
++
++static int
++avx_enabled (void)
+ {
+   unsigned int eax, ebx, ecx, edx;
+ 
++  if (__get_cpuid (1, &eax, &ebx, &ecx, &edx) == 0
++      || (ecx & (bit_AVX | bit_OSXSAVE)) != (bit_AVX | bit_OSXSAVE))
++    return 0;
++
++  /* Check the OS has AVX and SSE saving enabled.  */
++  asm ("xgetbv" : "=a" (eax), "=d" (edx) : "c" (0));
++
++  return (eax & 6) == 6;
++}
++
++
++int
++main (void)
++{
+   /* Run AVX test only if AVX is supported.  */
+-  if (__get_cpuid (1, &eax, &ebx, &ecx, &edx)
+-      && (ecx & bit_AVX))
++  if (avx_enabled ())
+     {
+       __m128i xmm = _mm_setzero_si128 ();
+       __m128i ret = audit_test (xmm, xmm, xmm, xmm, xmm, xmm, xmm, xmm);
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/dl-trampoline.S
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/dl-trampoline.S
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/dl-trampoline.S
+@@ -139,24 +139,31 @@ L(have_avx):
+ 	movl	$1, %eax
+ 	cpuid
+ 	movq	%r11,%rbx		# Restore rbx
+-	movl	$1, %eax
+-	testl	$(1 << 28), %ecx
++	xorl	%eax, %eax
++	// AVX and XSAVE supported?
++	andl	$((1 << 28) | (1 << 27)), %ecx
++	cmpl	$((1 << 28) | (1 << 27)), %ecx
+ 	jne	2f
+-	negl	%eax
+-2:	movl	%eax, L(have_avx)(%rip)
++	xorl	%ecx, %ecx
++	// Get XFEATURE_ENABLED_MASK
++	xgetbv
++	andl	$0x6, %eax
++2:	subl	$0x5, %eax
++	movl	%eax, L(have_avx)(%rip)
+ 	cmpl	$0, %eax
+ 
+ 1:	js	L(no_avx)
+ 
+ #  define RESTORE_AVX
++#  define MORE_CODE
+ #  include "dl-trampoline.h"
+ 
+ 	.align 16
+ L(no_avx):
+ # endif
+ 
+-#  undef RESTORE_AVX
+-#  include "dl-trampoline.h"
++# undef RESTORE_AVX
++# include "dl-trampoline.h"
+ 
+ 	cfi_endproc
+ 	.size _dl_runtime_profile, .-_dl_runtime_profile
+@@ -176,11 +183,20 @@ _dl_x86_64_save_sse:
+ 	movl	$1, %eax
+ 	cpuid
+ 	movq	%r11,%rbx		# Restore rbx
+-	movl	$1, %eax
+-	testl	$(1 << 28), %ecx
++	xorl	%eax, %eax
++	// AVX and XSAVE supported?
++	andl	$((1 << 28) | (1 << 27)), %ecx
++	cmpl	$((1 << 28) | (1 << 27)), %ecx
+ 	jne	2f
+-	negl	%eax
+-2:	movl	%eax, L(have_avx)(%rip)
++	xorl	%ecx, %ecx
++	// Get XFEATURE_ENABLED_MASK
++	xgetbv
++	andl	$0x6, %eax
++	cmpl	$0x6, %eax
++	// Nonzero if SSE and AVX state saving is enabled.
++	sete	%al
++2:	leal	-1(%eax,%eax), %eax
++	movl	%eax, L(have_avx)(%rip)
+ 	cmpl	$0, %eax
+ 
+ 1:	js	L(no_avx5)
+Index: glibc-2.12-2-gc4ccff1/sysdeps/x86_64/dl-trampoline.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/x86_64/dl-trampoline.h
++++ glibc-2.12-2-gc4ccff1/sysdeps/x86_64/dl-trampoline.h
+@@ -195,14 +195,14 @@
+ 	   _dl_call_pltexit.  The La_x86_64_regs is being pointed by rsp now,
+ 	   so we just need to allocate the sizeof(La_x86_64_retval) space on
+ 	   the stack, since the alignment has already been taken care of. */
+-# ifdef RESTORE_AVX
++#ifdef RESTORE_AVX
+ 	/* sizeof(La_x86_64_retval).  Need extra space for 2 SSE
+ 	   registers to detect if xmm0/xmm1 registers are changed
+ 	   by audit module.  */
+ 	subq $(LRV_SIZE + XMM_SIZE*2), %rsp
+-# else
++#else
+ 	subq $LRV_SIZE, %rsp	# sizeof(La_x86_64_retval)
+-# endif
++#endif
+ 	movq %rsp, %rcx		# La_x86_64_retval argument to %rcx.
+ 
+ 	/* Fill in the La_x86_64_retval structure.  */
+@@ -212,7 +212,7 @@
+ 	movaps %xmm0, LRV_XMM0_OFFSET(%rcx)
+ 	movaps %xmm1, LRV_XMM1_OFFSET(%rcx)
+ 
+-# ifdef RESTORE_AVX
++#ifdef RESTORE_AVX
+ 	/* This is to support AVX audit modules.  */
+ 	vmovdqu %ymm0, LRV_VECTOR0_OFFSET(%rcx)
+ 	vmovdqu %ymm1, LRV_VECTOR1_OFFSET(%rcx)
+@@ -221,14 +221,14 @@
+ 	   by audit module.  */
+ 	vmovdqa %xmm0,		  (LRV_SIZE)(%rcx)
+ 	vmovdqa %xmm1, (LRV_SIZE + XMM_SIZE)(%rcx)
+-# endif
++#endif
+ 
+ 	fstpt LRV_ST0_OFFSET(%rcx)
+ 	fstpt LRV_ST1_OFFSET(%rcx)
+ 
+ 	movq 24(%rbx), %rdx	# La_x86_64_regs argument to %rdx.
+ 	movq 40(%rbx), %rsi	# Copy args pushed by PLT in register.
+-        movq 32(%rbx), %rdi	# %rdi: link_map, %rsi: reloc_index
++	movq 32(%rbx), %rdi	# %rdi: link_map, %rsi: reloc_index
+ 	call _dl_call_pltexit
+ 
+ 	/* Restore return registers.  */
+@@ -238,7 +238,7 @@
+ 	movaps LRV_XMM0_OFFSET(%rsp), %xmm0
+ 	movaps LRV_XMM1_OFFSET(%rsp), %xmm1
+ 
+-# ifdef RESTORE_AVX
++#ifdef RESTORE_AVX
+ 	/* Check if xmm0/xmm1 registers are changed by audit module.  */
+ 	vpcmpeqq (LRV_SIZE)(%rsp), %xmm0, %xmm2
+ 	vpmovmskb %xmm2, %esi
+@@ -253,7 +253,7 @@
+ 	vmovdqu LRV_VECTOR1_OFFSET(%rsp), %ymm1
+ 
+ 1:
+-# endif
++#endif
+ 
+ 	fldt LRV_ST1_OFFSET(%rsp)
+ 	fldt LRV_ST0_OFFSET(%rsp)
+@@ -267,3 +267,10 @@
+ 				# (eats the reloc index and link_map)
+ 	cfi_adjust_cfa_offset(-48)
+ 	retq
++
++#ifdef MORE_CODE
++	cfi_adjust_cfa_offset(48)
++	cfi_rel_offset(%rbx, 0)
++	cfi_def_cfa_register(%rbx)
++# undef MORE_CODE
++#endif
diff --git a/SOURCES/glibc-rh757888.patch b/SOURCES/glibc-rh757888.patch
new file mode 100644
index 0000000..721d4a4
--- /dev/null
+++ b/SOURCES/glibc-rh757888.patch
@@ -0,0 +1,225 @@
+commit f3a6cc0a560a17f32a3e90d2f20501a53cab6058
+Author: Andreas Schwab <schwab@redhat.com>
+Date:   Tue Nov 29 10:52:22 2011 +0100
+
+    Fix access after end of search string in regex matcher
+
+diff --git a/locale/weight.h b/locale/weight.h
+index dc70a00..967e176 100644
+--- a/locale/weight.h
++++ b/locale/weight.h
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 1996,1997,1998,1999,2000,2003,2004 Free Software Foundation, Inc.
++/* Copyright (C) 1996,1997,1998,1999,2000,2003,2004,2011 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+    Written by Ulrich Drepper, <drepper@cygnus.com>.
+ 
+@@ -20,7 +20,7 @@
+ /* Find index of weight.  */
+ auto inline int32_t
+ __attribute ((always_inline))
+-findidx (const unsigned char **cpp)
++findidx (const unsigned char **cpp, size_t len)
+ {
+   int_fast32_t i = table[*(*cpp)++];
+   const unsigned char *cp;
+@@ -34,6 +34,7 @@ findidx (const unsigned char **cpp)
+      Search for the correct one.  */
+   cp = &extra[-i];
+   usrc = *cpp;
++  --len;
+   while (1)
+     {
+       size_t nhere;
+@@ -56,7 +57,7 @@ findidx (const unsigned char **cpp)
+ 	     already.  */
+ 	  size_t cnt;
+ 
+-	  for (cnt = 0; cnt < nhere; ++cnt)
++	  for (cnt = 0; cnt < nhere && cnt < len; ++cnt)
+ 	    if (cp[cnt] != usrc[cnt])
+ 	      break;
+ 
+@@ -79,13 +80,13 @@ findidx (const unsigned char **cpp)
+ 	  size_t cnt;
+ 	  size_t offset = 0;
+ 
+-	  for (cnt = 0; cnt < nhere; ++cnt)
++	  for (cnt = 0; cnt < nhere && cnt < len; ++cnt)
+ 	    if (cp[cnt] != usrc[cnt])
+ 	      break;
+ 
+ 	  if (cnt != nhere)
+ 	    {
+-	      if (cp[cnt] > usrc[cnt])
++	      if (cnt == len || cp[cnt] > usrc[cnt])
+ 		{
+ 		  /* Cannot be in this range.  */
+ 		  cp += 2 * nhere;
+diff --git a/locale/weightwc.h b/locale/weightwc.h
+index 9ea1126..7862091 100644
+--- a/locale/weightwc.h
++++ b/locale/weightwc.h
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 1996-2001,2003,2004,2005,2007 Free Software Foundation, Inc.
++/* Copyright (C) 1996-2001,2003,2004,2005,2007,2011 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+    Written by Ulrich Drepper, <drepper@cygnus.com>.
+ 
+@@ -20,7 +20,7 @@
+ /* Find index of weight.  */
+ auto inline int32_t
+ __attribute ((always_inline))
+-findidx (const wint_t **cpp)
++findidx (const wint_t **cpp, size_t len)
+ {
+   wint_t ch = *(*cpp)++;
+   int32_t i = __collidx_table_lookup ((const char *) table, ch);
+@@ -32,6 +32,7 @@ findidx (const wint_t **cpp)
+   /* Oh well, more than one sequence starting with this byte.
+      Search for the correct one.  */
+   const int32_t *cp = (const int32_t *) &extra[-i];
++  --len;
+   while (1)
+     {
+       size_t nhere;
+@@ -54,7 +55,7 @@ findidx (const wint_t **cpp)
+ 	     already.  */
+ 	  size_t cnt;
+ 
+-	  for (cnt = 0; cnt < nhere; ++cnt)
++	  for (cnt = 0; cnt < nhere && cnt < len; ++cnt)
+ 	    if (cp[cnt] != usrc[cnt])
+ 	      break;
+ 
+@@ -75,7 +76,7 @@ findidx (const wint_t **cpp)
+ 	  size_t cnt;
+ 	  size_t offset;
+ 
+-	  for (cnt = 0; cnt < nhere - 1; ++cnt)
++	  for (cnt = 0; cnt < nhere - 1 && cnt < len; ++cnt)
+ 	    if (cp[cnt] != usrc[cnt])
+ 	      break;
+ 
+diff --git a/posix/fnmatch_loop.c b/posix/fnmatch_loop.c
+index 18a6667..72bd3ee 100644
+--- a/posix/fnmatch_loop.c
++++ b/posix/fnmatch_loop.c
+@@ -412,7 +412,7 @@ FCT (pattern, string, string_end, no_leading_period, flags, ends, alloca_used)
+ 			  _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB);
+ # endif
+ 
+-			idx = findidx (&cp);
++			idx = findidx (&cp, 1);
+ 			if (idx != 0)
+ 			  {
+ 			    /* We found a table entry.  Now see whether the
+@@ -422,7 +422,7 @@ FCT (pattern, string, string_end, no_leading_period, flags, ends, alloca_used)
+ 			    int32_t idx2;
+ 			    const UCHAR *np = (const UCHAR *) n;
+ 
+-			    idx2 = findidx (&np);
++			    idx2 = findidx (&np, string_end - n);
+ 			    if (idx2 != 0
+ 				&& (idx >> 24) == (idx2 >> 24)
+ 				&& len == weights[idx2 & 0xffffff])
+diff --git a/posix/regcomp.c b/posix/regcomp.c
+index b238c08..34ee845 100644
+--- a/posix/regcomp.c
++++ b/posix/regcomp.c
+@@ -1,5 +1,5 @@
+ /* Extended regular expression matching and search library.
+-   Copyright (C) 2002-2007,2009,2010 Free Software Foundation, Inc.
++   Copyright (C) 2002-2007,2009,2010,2011 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+    Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>.
+ 
+@@ -3409,19 +3409,18 @@ build_equiv_class (bitset_t sbcset, const unsigned char *name)
+ 						   _NL_COLLATE_EXTRAMB);
+       indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE,
+ 						_NL_COLLATE_INDIRECTMB);
+-      idx1 = findidx (&cp);
+-      if (BE (idx1 == 0 || cp < name + strlen ((const char *) name), 0))
++      idx1 = findidx (&cp, -1);
++      if (BE (idx1 == 0 || *cp != '\0', 0))
+ 	/* This isn't a valid character.  */
+ 	return REG_ECOLLATE;
+ 
+       /* Build single byte matcing table for this equivalence class.  */
+-      char_buf[1] = (unsigned char) '\0';
+       len = weights[idx1 & 0xffffff];
+       for (ch = 0; ch < SBC_MAX; ++ch)
+ 	{
+ 	  char_buf[0] = ch;
+ 	  cp = char_buf;
+-	  idx2 = findidx (&cp);
++	  idx2 = findidx (&cp, 1);
+ /*
+ 	  idx2 = table[ch];
+ */
+
+--- a/posix/regex_internal.h	2011-11-30 12:47:02.706567482 -0700
++++ a/posix/regex_internal.h	2011-11-30 12:47:32.969558337 -0700
+@@ -756,7 +756,7 @@
+       indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE,
+ 						_NL_COLLATE_INDIRECTMB);
+       p = pstr->mbs + idx;
+-      tmp = findidx (&p);
++      tmp = findidx (&p, pstr->len - idx);
+       return p - pstr->mbs - idx;
+     }
+   else
+diff --git a/posix/regexec.c b/posix/regexec.c
+index 9e0c565..3ea810b 100644
+--- a/posix/regexec.c
++++ b/posix/regexec.c
+@@ -3924,7 +3924,7 @@ check_node_accept_bytes (const re_dfa_t *dfa, int node_idx,
+ 		_NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB);
+ 	      indirect = (const int32_t *)
+ 		_NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB);
+-	      int32_t idx = findidx (&cp);
++	      int32_t idx = findidx (&cp, elem_len);
+ 	      if (idx > 0)
+ 		for (i = 0; i < cset->nequiv_classes; ++i)
+ 		  {
+diff --git a/string/strcoll_l.c b/string/strcoll_l.c
+index d8d1139..fb77d08 100644
+--- a/string/strcoll_l.c
++++ b/string/strcoll_l.c
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 1995-1997,2002,2004,2007,2010 Free Software Foundation, Inc.
++/* Copyright (C) 1995-1997,2002,2004,2007,2010,2011 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+    Written by Ulrich Drepper <drepper@gnu.org>, 1995.
+ 
+@@ -205,7 +205,7 @@ STRCOLL (s1, s2, l)
+ 
+ 		while (*us1 != L('\0'))
+ 		  {
+-		    int32_t tmp = findidx (&us1);
++		    int32_t tmp = findidx (&us1, -1);
+ 		    rule1arr[idx1max] = tmp >> 24;
+ 		    idx1arr[idx1max] = tmp & 0xffffff;
+ 		    idx1cnt = idx1max++;
+@@ -267,7 +267,7 @@ STRCOLL (s1, s2, l)
+ 
+ 		while (*us2 != L('\0'))
+ 		  {
+-		    int32_t tmp = findidx (&us2);
++		    int32_t tmp = findidx (&us2, -1);
+ 		    rule2arr[idx2max] = tmp >> 24;
+ 		    idx2arr[idx2max] = tmp & 0xffffff;
+ 		    idx2cnt = idx2max++;
+diff --git a/string/strxfrm_l.c b/string/strxfrm_l.c
+index 220253c..b06556d 100644
+--- a/string/strxfrm_l.c
++++ b/string/strxfrm_l.c
+@@ -176,7 +176,7 @@ STRXFRM (STRING_TYPE *dest, const STRING_TYPE *src, size_t n, __locale_t l)
+   idxmax = 0;
+   do
+     {
+-      int32_t tmp = findidx (&usrc);
++      int32_t tmp = findidx (&usrc, -1);
+       rulearr[idxmax] = tmp >> 24;
+       idxarr[idxmax] = tmp & 0xffffff;
+ 
diff --git a/SOURCES/glibc-rh766513.patch b/SOURCES/glibc-rh766513.patch
new file mode 100644
index 0000000..3f629b4
--- /dev/null
+++ b/SOURCES/glibc-rh766513.patch
@@ -0,0 +1,14 @@
+diff -rup a/po/ja.po b/po/ja.po
+--- a/po/ja.po	2010-05-04 05:27:23.000000000 -0600
++++ b/po/ja.po	2012-02-07 12:21:03.023806370 -0700
+@@ -3549,8 +3549,8 @@ msgstr "%s: �����ʥ��ץ����Ǥ� -- %c\n
+ 
+ #: posix/getopt.c:945 posix/getopt.c:948
+ #, c-format
+-msgid "%s: invalid option -- %c\n"
+-msgstr "%s: ���ץ���󤬰㤤�ޤ� -- %c\n"
++msgid "%s: invalid option -- '%c'\n"
++msgstr "%s: ���ץ���󤬰㤤�ޤ� -- '%c'\n"
+ 
+ #: posix/getopt.c:1003 posix/getopt.c:1022 posix/getopt.c:1234
+ #: posix/getopt.c:1255
diff --git a/SOURCES/glibc-rh767146.patch b/SOURCES/glibc-rh767146.patch
new file mode 100644
index 0000000..8252062
--- /dev/null
+++ b/SOURCES/glibc-rh767146.patch
@@ -0,0 +1,21 @@
+diff -rup a/elf/dl-load.c b/elf/dl-load.c
+--- a/elf/dl-load.c	2012-02-03 10:59:58.917870716 -0700
++++ b/elf/dl-load.c	2012-02-03 11:01:01.796580644 -0700
+@@ -1130,6 +1130,16 @@ _dl_map_object_from_fd (const char *name
+ 		= N_("ELF load command address/offset not properly aligned");
+ 	      goto call_lose;
+ 	    }
++	  if (__builtin_expect ((ph->p_offset + ph->p_filesz > st.st_size), 0))
++	    {
++	      /* If the segment requires zeroing of part of its last
++		 page, we'll crash when accessing the unmapped page.
++		 There's still a possibility of a race, if the shared
++		 object is truncated between the fxstat above and the
++		 memset below.  */
++	      errstring = N_("ELF load command past end of file");
++	      goto call_lose;
++	    }
+ 
+ 	  c = &loadcmds[nloadcmds++];
+ 	  c->mapstart = ph->p_vaddr & ~(GLRO(dl_pagesize) - 1);
+Only in b/elf: dl-load.c.orig
diff --git a/SOURCES/glibc-rh767693-2.patch b/SOURCES/glibc-rh767693-2.patch
new file mode 100644
index 0000000..4418ac6
--- /dev/null
+++ b/SOURCES/glibc-rh767693-2.patch
@@ -0,0 +1,79 @@
+Index: glibc-2.5-20061008T1257/sunrpc/svc_tcp.c
+===================================================================
+--- glibc-2.5-20061008T1257.orig/sunrpc/svc_tcp.c
++++ glibc-2.5-20061008T1257/sunrpc/svc_tcp.c
+@@ -50,6 +50,7 @@ static char sccsid[] = "@(#)svc_tcp.c 1.
+ #include <sys/poll.h>
+ #include <errno.h>
+ #include <stdlib.h>
++#include <time.h>
+ 
+ #ifdef USE_IN_LIBIO
+ # include <wchar.h>
+@@ -249,6 +250,11 @@ again:
+     {
+       if (errno == EINTR)
+ 	goto again;
++      if (errno == EMFILE)
++        {
++          struct timespec ts = { .tv_sec = 0, .tv_nsec = 50000000 };
++          __nanosleep(&ts , NULL);
++        }
+       return FALSE;
+     }
+   /*
+Index: glibc-2.5-20061008T1257/sunrpc/svc_udp.c
+===================================================================
+--- glibc-2.5-20061008T1257.orig/sunrpc/svc_udp.c
++++ glibc-2.5-20061008T1257/sunrpc/svc_udp.c
+@@ -46,6 +46,7 @@ static char sccsid[] = "@(#)svc_udp.c 1.
+ #include <sys/socket.h>
+ #include <errno.h>
+ #include <libintl.h>
++#include <time.h>
+ 
+ #ifdef IP_PKTINFO
+ #include <sys/uio.h>
+@@ -277,8 +278,16 @@ again:
+ 		       (int) su->su_iosz, 0,
+ 		       (struct sockaddr *) &(xprt->xp_raddr), &len);
+   xprt->xp_addrlen = len;
+-  if (rlen == -1 && errno == EINTR)
+-    goto again;
++  if (rlen == -1)
++    {
++      if (errno == EINTR)
++        goto again;
++      if (errno == EMFILE)
++        {
++          struct timespec ts = { .tv_sec = 0, .tv_nsec = 50000000 };
++          __nanosleep(&ts , NULL);
++        }
++    }
+   if (rlen < 16)		/* < 4 32-bit ints? */
+     return FALSE;
+   xdrs->x_op = XDR_DECODE;
+Index: glibc-2.5-20061008T1257/sunrpc/svc_unix.c
+===================================================================
+--- glibc-2.5-20061008T1257.orig/sunrpc/svc_unix.c
++++ glibc-2.5-20061008T1257/sunrpc/svc_unix.c
+@@ -48,6 +48,7 @@
+ #include <errno.h>
+ #include <stdlib.h>
+ #include <libintl.h>
++#include <time.h>
+ 
+ #ifdef USE_IN_LIBIO
+ # include <wchar.h>
+@@ -247,6 +248,11 @@ again:
+     {
+       if (errno == EINTR)
+ 	goto again;
++      if (errno == EMFILE)
++        {
++          struct timespec ts = { .tv_sec = 0, .tv_nsec = 50000000 };
++          __nanosleep(&ts , NULL);
++        }
+       return FALSE;
+     }
+   /*
diff --git a/SOURCES/glibc-rh767693.patch b/SOURCES/glibc-rh767693.patch
new file mode 100644
index 0000000..8f76beb
--- /dev/null
+++ b/SOURCES/glibc-rh767693.patch
@@ -0,0 +1,89 @@
+commit 97ac2654b2d831acaa18a2b018b0736245903fd2
+Author: Ulrich Drepper <drepper@gmail.com>
+Date:   Sat Dec 17 20:18:42 2011 -0500
+
+    Check values from TZ file header
+
+
+	[BZ #13506]
+	* time/tzfile.c (__tzfile_read): Check values from file header.
+
+diff -ru a/time/tzfile.c b/time/tzfile.c
+--- a/time/tzfile.c	2010-05-04 11:27:23.000000000 +0000
++++ b/time/tzfile.c	2011-12-19 06:39:49.875358578 +0000
+@@ -19,6 +19,7 @@
+ 
+ #include <assert.h>
+ #include <limits.h>
++#include <stdint.h>
+ #include <stdio.h>
+ #include <stdio_ext.h>
+ #include <stdlib.h>
+@@ -234,23 +235,58 @@
+       goto read_again;
+     }
+ 
++  if (__builtin_expect (num_transitions
++			> ((SIZE_MAX - (__alignof__ (struct ttinfo) - 1))
++			   / (sizeof (time_t) + 1)), 0))
++    goto lose;
+   total_size = num_transitions * (sizeof (time_t) + 1);
+   total_size = ((total_size + __alignof__ (struct ttinfo) - 1)
+ 		& ~(__alignof__ (struct ttinfo) - 1));
+   types_idx = total_size;
+-  total_size += num_types * sizeof (struct ttinfo) + chars;
++  if (__builtin_expect (num_types
++			> (SIZE_MAX - total_size) / sizeof (struct ttinfo), 0))
++    goto lose;
++  total_size += num_types * sizeof (struct ttinfo);
++  if (__builtin_expect (chars > SIZE_MAX - total_size, 0))
++    goto lose;
++  total_size += chars;
++  if (__builtin_expect (__alignof__ (struct leap) - 1
++			> SIZE_MAX - total_size, 0))
++    goto lose;
+   total_size = ((total_size + __alignof__ (struct leap) - 1)
+ 		& ~(__alignof__ (struct leap) - 1));
+   leaps_idx = total_size;
++  if (__builtin_expect (num_leaps
++			> (SIZE_MAX - total_size) / sizeof (struct leap), 0))
++    goto lose;
+   total_size += num_leaps * sizeof (struct leap);
+-  tzspec_len = (sizeof (time_t) == 8 && trans_width == 8
+-		? st.st_size - (ftello (f)
+-				+ num_transitions * (8 + 1)
+-				+ num_types * 6
+-				+ chars
+-				+ num_leaps * 12
+-				+ num_isstd
+-				+ num_isgmt) - 1 : 0);
++  tzspec_len = 0;
++  if (sizeof (time_t) == 8 && trans_width == 8)
++    {
++      off_t rem = st.st_size - ftello (f);
++      if (__builtin_expect (rem < 0
++			    || (size_t) rem < (num_transitions * (8 + 1)
++					       + num_types * 6
++					       + chars), 0))
++	goto lose;
++      tzspec_len = (size_t) rem - (num_transitions * (8 + 1)
++				   + num_types * 6
++				   + chars);
++      if (__builtin_expect (num_leaps > SIZE_MAX / 12
++			    || tzspec_len < num_leaps * 12, 0))
++	goto lose;
++      tzspec_len -= num_leaps * 12;
++      if (__builtin_expect (tzspec_len < num_isstd, 0))
++	goto lose;
++      tzspec_len -= num_isstd;
++      if (__builtin_expect (tzspec_len == 0 || tzspec_len - 1 < num_isgmt, 0))
++	goto lose;
++      tzspec_len -= num_isgmt + 1;
++      if (__builtin_expect (SIZE_MAX - total_size < tzspec_len, 0))
++	goto lose;
++    }
++  if (__builtin_expect (SIZE_MAX - total_size - tzspec_len < extra, 0))
++    goto lose;
+ 
+   /* Allocate enough memory including the extra block requested by the
+      caller.  */
diff --git a/SOURCES/glibc-rh767746.patch b/SOURCES/glibc-rh767746.patch
new file mode 100644
index 0000000..58d96d8
--- /dev/null
+++ b/SOURCES/glibc-rh767746.patch
@@ -0,0 +1,14 @@
+--- a/nptl/pthread_create.c	2011-12-13 11:41:37.000000000 -0700
++++ b/nptl/pthread_create.c	2011-12-14 10:03:13.000000000 -0700
+@@ -440,8 +440,9 @@
+   int err = ALLOCATE_STACK (iattr, &pd);
+   if (__builtin_expect (err != 0, 0))
+     /* Something went wrong.  Maybe a parameter of the attributes is
+-       invalid or we could not allocate memory.  */
+-    return err;
++       invalid or we could not allocate memory.  Note we have to
++       translate error codes.  */
++    return err == ENOMEM ? EAGAIN : err;
+ 
+ 
+   /* Initialize the TCB.  All initializations with zero should be
diff --git a/SOURCES/glibc-rh771342.patch b/SOURCES/glibc-rh771342.patch
new file mode 100644
index 0000000..0a49b8c
--- /dev/null
+++ b/SOURCES/glibc-rh771342.patch
@@ -0,0 +1,155 @@
+2011-06-30  Ulrich Drepper  <drepper@gmail.com>
+
+	* nptl-init.c (__nptl_set_robust): New function.
+	(pthread_functions): Add reference.
+	* npthreadP.h: Declare __nptl_set_robust.
+	* sysdeps/pthread/pthread-functions.h (pthread_functions): Add
+	ptr_set_robust member.
+	* sysdeps/unix/sysv/linux/fork.c: Call set_robust_list syscall in
+	child if threads are used.
+
+diff -Nrup a/nptl/nptl-init.c b/nptl/nptl-init.c
+--- a/nptl/nptl-init.c	2011-12-20 00:29:54.645538691 -0700
++++ b/nptl/nptl-init.c	2012-01-03 10:18:38.977513783 -0700
+@@ -69,6 +69,13 @@ extern void __libc_setup_tls (size_t tcb
+ #endif
+ 
+ #ifdef SHARED
++static
++#else
++extern
++#endif
++void __nptl_set_robust (struct pthread *);
++
++#ifdef SHARED
+ static void nptl_freeres (void);
+ 
+ 
+@@ -131,13 +138,25 @@ static const struct pthread_functions pt
+     .ptr__nptl_deallocate_tsd = __nptl_deallocate_tsd,
+     .ptr__nptl_setxid = __nptl_setxid,
+     /* For now only the stack cache needs to be freed.  */
+-    .ptr_freeres = nptl_freeres
++    .ptr_freeres = nptl_freeres,
++    .ptr_set_robust = __nptl_set_robust
+   };
+ # define ptr_pthread_functions &pthread_functions
+ #else
+ # define ptr_pthread_functions NULL
+ #endif
+ 
++#ifdef SHARED
++static
++#endif
++void
++__nptl_set_robust (struct pthread *self)
++{
++  INTERNAL_SYSCALL_DECL (err);
++  INTERNAL_SYSCALL (set_robust_list, err, 2, &self->robust_head,
++                   sizeof (struct robust_list_head));
++}
++
+ 
+ #ifdef SHARED
+ /* This function is called indirectly from the freeres code in libc.  */
+diff -Nrup a/nptl/pthreadP.h b/nptl/pthreadP.h
+--- a/nptl/pthreadP.h	2010-05-04 05:27:23.000000000 -0600
++++ b/nptl/pthreadP.h	2012-01-03 10:12:35.599269269 -0700
+@@ -555,17 +555,20 @@ extern void __pthread_cleanup_pop_restor
+ 
+ /* Old cleanup interfaces, still used in libc.so.  */
+ extern void _pthread_cleanup_push (struct _pthread_cleanup_buffer *buffer,
+-                                   void (*routine) (void *), void *arg);
++				   void (*routine) (void *), void *arg);
+ extern void _pthread_cleanup_pop (struct _pthread_cleanup_buffer *buffer,
+-                                  int execute);
++				  int execute);
+ extern void _pthread_cleanup_push_defer (struct _pthread_cleanup_buffer *buffer,
+-                                         void (*routine) (void *), void *arg);
++					 void (*routine) (void *), void *arg);
+ extern void _pthread_cleanup_pop_restore (struct _pthread_cleanup_buffer *buffer,
+-                                          int execute);
++					  int execute);
+ 
+ extern void __nptl_deallocate_tsd (void) attribute_hidden;
+ 
+ extern int __nptl_setxid (struct xid_command *cmdp) attribute_hidden;
++#ifndef SHARED
++extern void __nptl_set_robust (struct pthread *self);
++#endif
+ 
+ extern void __free_stacks (size_t limit) attribute_hidden;
+ 
+diff -Nrup a/nptl/sysdeps/pthread/pthread-functions.h b/nptl/sysdeps/pthread/pthread-functions.h
+--- a/nptl/sysdeps/pthread/pthread-functions.h	2010-05-04 05:27:23.000000000 -0600
++++ b/nptl/sysdeps/pthread/pthread-functions.h	2012-01-03 10:12:35.639269301 -0700
+@@ -97,6 +97,7 @@ struct pthread_functions
+   void (*ptr__nptl_deallocate_tsd) (void);
+   int (*ptr__nptl_setxid) (struct xid_command *);
+   void (*ptr_freeres) (void);
++  void (*ptr_set_robust) (struct pthread *);
+ };
+ 
+ /* Variable in libc.so.  */
+diff -Nrup a/nptl/sysdeps/unix/sysv/linux/fork.c b/nptl/sysdeps/unix/sysv/linux/fork.c
+--- a/nptl/sysdeps/unix/sysv/linux/fork.c	2010-05-04 05:27:23.000000000 -0600
++++ b/nptl/sysdeps/unix/sysv/linux/fork.c	2012-01-03 10:12:35.649269309 -0700
+@@ -29,6 +29,7 @@
+ #include <ldsodefs.h>
+ #include <bits/stdio-lock.h>
+ #include <atomic.h>
++#include <pthreadP.h>
+ 
+ 
+ unsigned long int *__fork_generation_pointer;
+@@ -86,8 +87,8 @@ __libc_fork (void)
+ 	 just go away.  The unloading code works in the order of the
+ 	 list.
+ 
+-         While executing the registered handlers we are building a
+-         list of all the entries so that we can go backward later on.  */
++	 While executing the registered handlers we are building a
++	 list of all the entries so that we can go backward later on.  */
+       while (1)
+ 	{
+ 	  /* Execute the handler if there is one.  */
+@@ -154,6 +155,24 @@ __libc_fork (void)
+       GL(dl_cpuclock_offset) = now;
+ #endif
+ 
++#ifdef __NR_set_robust_list
++      /* Initialize the robust mutex list which has been reset during
++	 the fork.  We do not check for errors since if it fails here
++	 it failed at process start as well and noone could have used
++	 robust mutexes.  We also do not have to set
++	 self->robust_head.futex_offset since we inherit the correct
++	 value from the parent.  */
++# ifdef SHARED
++      if (__libc_pthread_functions.ptr_set_robust != NULL)
++	PTHFCT_CALL (ptr_set_robust, (self));
++# else
++      extern __typeof (__nptl_set_robust) __nptl_set_robust
++	__attribute__((weak));
++      if (__builtin_expect (__nptl_set_robust != NULL, 0))
++	__nptl_set_robust (self);
++# endif
++#endif
++
+       /* Reset the file list.  These are recursive mutexes.  */
+       fresetlockfiles ();
+ 
+@@ -170,10 +189,10 @@ __libc_fork (void)
+ 	    allp->handler->child_handler ();
+ 
+ 	  /* Note that we do not have to wake any possible waiter.
+- 	     This is the only thread in the new process.  The count
+- 	     may have been bumped up by other threads doing a fork.
+- 	     We reset it to 1, to avoid waiting for non-existing
+- 	     thread(s) to release the count.  */
++	     This is the only thread in the new process.  The count
++	     may have been bumped up by other threads doing a fork.
++	     We reset it to 1, to avoid waiting for non-existing
++	     thread(s) to release the count.  */
+ 	  allp->handler->refcntr = 1;
+ 
+ 	  /* XXX We could at this point look through the object pool
diff --git a/SOURCES/glibc-rh782585.patch b/SOURCES/glibc-rh782585.patch
new file mode 100644
index 0000000..a554d4b
--- /dev/null
+++ b/SOURCES/glibc-rh782585.patch
@@ -0,0 +1,329 @@
+diff -rup a/elf/dl-close.c b/elf/dl-close.c
+--- a/elf/dl-close.c	2012-01-19 12:59:42.759484350 -0700
++++ b/elf/dl-close.c	2012-01-19 14:10:20.439263806 -0700
+@@ -223,7 +223,7 @@ _dl_close_worker (struct link_map *map)
+     }
+ 
+   /* Sort the entries.  */
+-  _dl_sort_fini (ns->_ns_loaded, maps, nloaded, used, nsid);
++  _dl_sort_fini (maps, nloaded, used, nsid);
+ 
+   /* Call all termination functions at once.  */
+ #ifdef SHARED
+diff -rup a/elf/dl-deps.c b/elf/dl-deps.c
+--- a/elf/dl-deps.c	2012-01-19 12:59:42.716484301 -0700
++++ b/elf/dl-deps.c	2012-01-19 13:52:35.223720556 -0700
+@@ -614,51 +614,67 @@ Filters not supported with LD_TRACE_PREL
+ 	map->l_searchlist.r_list[i]->l_reserved = 0;
+     }
+ 
+-  /* Now determine the order in which the initialization has to happen.  */
++  /* Sort the initializer list to take dependencies into account.  The binary
++     itself will always be initialize last.  */
+   memcpy (l_initfini, map->l_searchlist.r_list,
+ 	  nlist * sizeof (struct link_map *));
+-  /* We can skip looking for the binary itself which is at the front
+-     of the search list.  Look through the list backward so that circular
+-     dependencies are not changing the order.  */
+-  for (i = 1; i < nlist; ++i)
++  if (__builtin_expect (nlist > 1, 1))
+     {
+-      struct link_map *l = map->l_searchlist.r_list[i];
+-      unsigned int j;
+-      unsigned int k;
+-
+-      /* Find the place in the initfini list where the map is currently
+-	 located.  */
+-      for (j = 1; l_initfini[j] != l; ++j)
+-	;
+-
+-      /* Find all object for which the current one is a dependency and
+-	 move the found object (if necessary) in front.  */
+-      for (k = j + 1; k < nlist; ++k)
++      /* We can skip looking for the binary itself which is at the front
++	 of the search list.  */
++      i = 1;
++      unsigned int seen[nlist];
++      memset (seen, 0, nlist * sizeof (seen[0]));
++      while (1)
+ 	{
+-	  struct link_map **runp;
+-
+-	  runp = l_initfini[k]->l_initfini;
+-	  if (runp != NULL)
++	  /* Keep track of which object we looked at this round.  */
++	  ++seen[i];
++	  struct link_map *thisp = l_initfini[i];
++
++	  /* Find the last object in the list for which the current one is
++	     a dependency and move the current object behind the object
++	     with the dependency.  */
++	  unsigned int k = nlist - 1;
++	  while (k > i)
+ 	    {
+-	      while (*runp != NULL)
+-		if (__builtin_expect (*runp++ == l, 0))
+-		  {
+-		    struct link_map *here = l_initfini[k];
+-
+-		    /* Move it now.  */
+-		    memmove (&l_initfini[j] + 1, &l_initfini[j],
+-			     (k - j) * sizeof (struct link_map *));
+-		    l_initfini[j] = here;
+-
+-		    /* Don't insert further matches before the last
+-		       entry moved to the front.  */
+-		    ++j;
++	      struct link_map **runp = l_initfini[k]->l_initfini;
++	      if (runp != NULL)
++		/* Look through the dependencies of the object.  */
++		while (*runp != NULL)
++		  if (__builtin_expect (*runp++ == thisp, 0))
++		    {
++		      /* Move the current object to the back past the last
++			 object with it as the dependency.  */
++		      memmove (&l_initfini[i], &l_initfini[i + 1],
++			       (k - i) * sizeof (l_initfini[0]));
++		      l_initfini[k] = thisp;
++
++		      if (seen[i + 1] > nlist - i - 2)
++			{
++			  ++i;
++			  goto next_clear;
++			}
++
++		      unsigned int this_seen = seen[i];
++		      memmove (&seen[i], &seen[i + 1],
++			       (k - i) * sizeof (seen[0]));
++		      seen[k] = this_seen;
++
++		      goto next;
++		    }
+ 
+-		    break;
+-		  }
++	      --k;
+ 	    }
++
++	  if (++i == nlist)
++	    break;
++	next_clear:
++	  memset (&seen[i], 0, (nlist - i) * sizeof (seen[0]));
++
++	next:;
+ 	}
+     }
++
+   /* Terminate the list of dependencies.  */
+   l_initfini[nlist] = NULL;
+   atomic_write_barrier ();
+diff -rup a/elf/dl-fini.c b/elf/dl-fini.c
+--- a/elf/dl-fini.c	2010-05-04 05:27:23.000000000 -0600
++++ b/elf/dl-fini.c	2012-01-19 13:56:38.653842046 -0700
+@@ -1,5 +1,6 @@
+ /* Call the termination functions of loaded shared objects.
+-   Copyright (C) 1995,96,1998-2002,2004-2005,2009 Free Software Foundation, Inc.
++   Copyright (C) 1995,96,1998-2002,2004-2005,2009,2011
++   Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+ 
+    The GNU C Library is free software; you can redistribute it and/or
+@@ -29,89 +30,100 @@ typedef void (*fini_t) (void);
+ 
+ void
+ internal_function
+-_dl_sort_fini (struct link_map *l, struct link_map **maps, size_t nmaps,
+-	       char *used, Lmid_t ns)
++_dl_sort_fini (struct link_map **maps, size_t nmaps, char *used, Lmid_t ns)
+ {
+-  if (ns == LM_ID_BASE)
+-    /* The main executable always comes first.  */
+-    l = l->l_next;
+-
+-  for (; l != NULL; l = l->l_next)
+-    /* Do not handle ld.so in secondary namespaces and object which
+-       are not removed.  */
+-    if (l == l->l_real && l->l_idx != -1)
+-      {
+-	/* Find the place in the 'maps' array.  */
+-	unsigned int j;
+-	for (j = ns == LM_ID_BASE ? 1 : 0; maps[j] != l; ++j)
+-	  assert (j < nmaps);
+-
+-	/* Find all object for which the current one is a dependency
+-	   and move the found object (if necessary) in front.  */
+-	for (unsigned int k = j + 1; k < nmaps; ++k)
+-	  {
+-	    struct link_map **runp = maps[k]->l_initfini;
+-	    if (runp != NULL)
+-	      {
+-		while (*runp != NULL)
+-		  if (*runp == l)
+-		    {
+-		      struct link_map *here = maps[k];
++  /* A list of one element need not be sorted.  */
++  if (nmaps == 1)
++    return;
++
++  /* We can skip looking for the binary itself which is at the front
++     of the search list for the main namespace.  */
++  unsigned int i = ns == LM_ID_BASE;
++  unsigned int seen[nmaps];
++  memset (seen, 0, nmaps * sizeof (seen[0]));
++  while (1)
++    {
++      /* Keep track of which object we looked at this round.  */
++      ++seen[i];
++      struct link_map *thisp = maps[i];
++
++      /* Do not handle ld.so in secondary namespaces and object which
++	 are not removed.  */
++      if (thisp != thisp->l_real || thisp->l_idx == -1)
++	goto skip;
++
++      /* Find the last object in the list for which the current one is
++	 a dependency and move the current object behind the object
++	 with the dependency.  */
++      unsigned int k = nmaps - 1;
++      while (k > i)
++	{
++	  struct link_map **runp = maps[k]->l_initfini;
++	  if (runp != NULL)
++	    /* Look through the dependencies of the object.  */
++	    while (*runp != NULL)
++	      if (__builtin_expect (*runp++ == thisp, 0))
++		{
++		move:
++		  /* Move the current object to the back past the last
++		     object with it as the dependency.  */
++		  memmove (&maps[i], &maps[i + 1],
++			   (k - i) * sizeof (maps[0]));
++		  maps[k] = thisp;
+ 
+-		      /* Move it now.  */
+-		      memmove (&maps[j] + 1,
+-			       &maps[j], (k - j) * sizeof (struct link_map *));
+-		      maps[j] = here;
++		  if (used != NULL)
++		    {
++		      char here_used = used[i];
++		      memmove (&used[i], &used[i + 1],
++			       (k - i) * sizeof (used[0]));
++		      used[k] = here_used;
++		    }
+ 
+-		      if (used != NULL)
+-			{
+-			  char here_used = used[k];
++		  if (seen[i + 1] > nmaps - i - 2)
++		    {
++		      ++i;
++		      goto next_clear;
++		    }
+ 
+-			  memmove (&used[j] + 1,
+-				   &used[j], (k - j) * sizeof (char));
+-			  used[j] = here_used;
+-			}
++		  unsigned int this_seen = seen[i];
++		  memmove (&seen[i], &seen[i + 1], (k - i) * sizeof (seen[0]));
++		  seen[k] = this_seen;
+ 
+-		      ++j;
++		  goto next;
++		}
+ 
+-		      break;
+-		    }
+-		  else
+-		    ++runp;
+-	      }
+-
+-	    if (__builtin_expect (maps[k]->l_reldeps != NULL, 0))
+-	      {
+-		unsigned int m = maps[k]->l_reldeps->act;
+-		struct link_map **relmaps = &maps[k]->l_reldeps->list[0];
++	  if (__builtin_expect (maps[k]->l_reldeps != NULL, 0))
++	    {
++	      unsigned int m = maps[k]->l_reldeps->act;
++	      struct link_map **relmaps = &maps[k]->l_reldeps->list[0];
+ 
+-		while (m-- > 0)
++	      /* Look through the relocation dependencies of the object.  */
++	      while (m-- > 0)
++		if (__builtin_expect (relmaps[m] == thisp, 0))
+ 		  {
+-		    if (relmaps[m] == l)
+-		      {
+-			struct link_map *here = maps[k];
+-
+-			/* Move it now.  */
+-			memmove (&maps[j] + 1,
+-				 &maps[j],
+-				 (k - j) * sizeof (struct link_map *));
+-			maps[j] = here;
+-
+-			if (used != NULL)
+-			  {
+-			    char here_used = used[k];
+-
+-			    memmove (&used[j] + 1,
+-				     &used[j], (k - j) * sizeof (char));
+-			    used[j] = here_used;
+-			  }
+-
+-			break;
+-		      }
++		    /* If a cycle exists with a link time dependency,
++		       preserve the latter.  */
++		    struct link_map **runp = thisp->l_initfini;
++		    if (runp != NULL)
++		      while (*runp != NULL)
++			if (__builtin_expect (*runp++ == maps[k], 0))
++			  goto ignore;
++		    goto move;
+ 		  }
+-	      }
+-	  }
+-      }
++	    ignore:;
++	    }
++
++	  --k;
++	}
++
++    skip:
++      if (++i == nmaps)
++	break;
++    next_clear:
++      memset (&seen[i], 0, (nmaps - i) * sizeof (seen[0]));
++
++    next:;
++    }
+ }
+ 
+ 
+@@ -196,9 +208,8 @@ _dl_fini (void)
+       assert (ns == LM_ID_BASE || i == nloaded || i == nloaded - 1);
+       nmaps = i;
+ 
+-      if (nmaps != 0)
+-	/* Now we have to do the sorting.  */
+-	_dl_sort_fini (GL(dl_ns)[ns]._ns_loaded, maps, nmaps, NULL, ns);
++      /* Now we have to do the sorting.  */
++      _dl_sort_fini (maps, nmaps, NULL, ns);
+ 
+       /* We do not rely on the linked list of loaded object anymore from
+ 	 this point on.  We have our own list here (maps).  The various
+diff -rup a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h
+--- a/sysdeps/generic/ldsodefs.h	2012-01-19 12:59:42.446483997 -0700
++++ b/sysdeps/generic/ldsodefs.h	2012-01-19 14:16:36.242453532 -0700
+@@ -947,7 +947,7 @@ extern void _dl_init (struct link_map *m
+ extern void _dl_fini (void) internal_function;
+ 
+ /* Sort array MAPS according to dependencies of the contained objects.  */
+-extern void _dl_sort_fini (struct link_map *l, struct link_map **maps,
++extern void _dl_sort_fini (struct link_map **maps,
+ 			   size_t nmaps, char *used, Lmid_t ns)
+      internal_function;
+ 
diff --git a/SOURCES/glibc-rh783979.patch b/SOURCES/glibc-rh783979.patch
new file mode 100644
index 0000000..7540525
--- /dev/null
+++ b/SOURCES/glibc-rh783979.patch
@@ -0,0 +1,12 @@
+diff -rup a/sysdeps/powerpc/powerpc64/Makefile b/sysdeps/powerpc/powerpc64/Makefile
+--- a/sysdeps/powerpc/powerpc64/Makefile	2012-02-01 09:34:07.018768021 -0700
++++ b/sysdeps/powerpc/powerpc64/Makefile	2012-02-01 09:35:28.813356195 -0700
+@@ -31,7 +31,7 @@ elide-routines.os += hp-timing
+ ifneq ($(elf),no)
+ # The initfini generation code doesn't work in the presence of -fPIC, so
+ # we use -fpic instead which is much better.
+-CFLAGS-initfini.s += -fpic -O1
++CFLAGS-initfini.s += -fpic -O1 -fno-inline
+ endif
+ CFLAGS-libc-start.c += -fno-asynchronous-unwind-tables
+ endif
diff --git a/SOURCES/glibc-rh784402.patch b/SOURCES/glibc-rh784402.patch
new file mode 100644
index 0000000..d75773e
--- /dev/null
+++ b/SOURCES/glibc-rh784402.patch
@@ -0,0 +1,166 @@
+commit 3e1aa84e7f9f38815f5db9cd7654b1a9497cf6e4
+Author: Ulrich Drepper <drepper@gmail.com>
+Date:   Fri Jan 20 22:39:54 2012 -0500
+
+    Do not cache negative results in nscd if these are transient
+
+diff -rup a/nscd/aicache.c b/nscd/aicache.c
+--- a/nscd/aicache.c	2012-01-24 20:32:58.906826425 -0700
++++ b/nscd/aicache.c	2012-01-24 20:42:17.663968882 -0700
+@@ -511,9 +511,17 @@ next_nip:
+       if (fd != -1)
+ 	TEMP_FAILURE_RETRY (send (fd, &notfound, total, MSG_NOSIGNAL));
+ 
+-      dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len, 1);
+-      /* If we cannot permanently store the result, so be it.  */
+-      if (dataset != NULL)
++      /* If we have a transient error or cannot permanently store the
++	 result, so be it.  */
++      if (rc4 == EAGAIN || __builtin_expect (db->negtimeout == 0, 0))
++	{
++	  /* Mark the old entry as obsolete.  */
++	  if (dh != NULL)
++	    dh->usable = false;
++	  dataset = NULL;
++	}
++      else if ((dataset = mempool_alloc (db, (sizeof (struct dataset)
++					      + req->key_len), 1)) != NULL)
+ 	{
+ 	  dataset->head.allocsize = sizeof (struct dataset) + req->key_len;
+ 	  dataset->head.recsize = total;
+diff -rup a/nscd/grpcache.c b/nscd/grpcache.c
+--- a/nscd/grpcache.c	2012-01-24 20:32:58.910826427 -0700
++++ b/nscd/grpcache.c	2012-01-24 20:42:17.666968883 -0700
+@@ -114,13 +114,21 @@ cache_addgr (struct database_dyn *db, in
+ 	     case.  */
+ 	  total = sizeof (notfound);
+ 
+-	  written = TEMP_FAILURE_RETRY (send (fd, &notfound, total,
+-					      MSG_NOSIGNAL));
++	  if (fd != -1)
++	    written = TEMP_FAILURE_RETRY (send (fd, &notfound, total,
++						MSG_NOSIGNAL));
++	  else
++	    written = total;
+ 
+-	  dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len,
+-				   1);
+-	  /* If we cannot permanently store the result, so be it.  */
+-	  if (dataset != NULL)
++	  /* If we have a transient error or cannot permanently store
++	     the result, so be it.  */
++	  if (errno == EAGAIN || __builtin_expect (db->negtimeout == 0, 0))
++	    {
++	      /* Mark the old entry as obsolete.  */
++	      if (dh != NULL)
++		dh->usable = false;
++	    }
++	  else if ((dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len, 1)) != NULL)
+ 	    {
+ 	      dataset->head.allocsize = sizeof (struct dataset) + req->key_len;
+ 	      dataset->head.recsize = total;
+diff -rup a/nscd/hstcache.c b/nscd/hstcache.c
+--- a/nscd/hstcache.c	2012-01-24 20:32:58.911826427 -0700
++++ b/nscd/hstcache.c	2012-01-24 20:42:17.668968883 -0700
+@@ -141,10 +141,16 @@ cache_addhst (struct database_dyn *db, i
+ 					MSG_NOSIGNAL)) != total)
+ 	    all_written = false;
+ 
+-	  dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len,
+-				   1);
+-	  /* If we cannot permanently store the result, so be it.  */
+-	  if (dataset != NULL)
++	  /* If we have a transient error or cannot permanently store
++	     the result, so be it.  */
++	  if (errval == EAGAIN || __builtin_expect (db->negtimeout == 0, 0))
++	    {
++	      /* Mark the old entry as obsolete.  */
++	      if (dh != NULL)
++		dh->usable = false;
++	    }
++	  else if ((dataset = mempool_alloc (db, (sizeof (struct dataset)
++						  + req->key_len), 1)) != NULL)
+ 	    {
+ 	      dataset->head.allocsize = sizeof (struct dataset) + req->key_len;
+ 	      dataset->head.recsize = total;
+diff -rup a/nscd/initgrcache.c b/nscd/initgrcache.c
+--- a/nscd/initgrcache.c	2012-01-24 20:32:58.912826427 -0700
++++ b/nscd/initgrcache.c	2012-01-24 20:42:17.671968883 -0700
+@@ -202,10 +202,16 @@ addinitgroupsX (struct database_dyn *db,
+ 	    written = TEMP_FAILURE_RETRY (send (fd, &notfound, total,
+ 						MSG_NOSIGNAL));
+ 
+-	  dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len,
+-				   1);
+-	  /* If we cannot permanently store the result, so be it.  */
+-	  if (dataset != NULL)
++	  /* If we have a transient error or cannot permanently store
++	     the result, so be it.  */
++	  if (all_tryagain || __builtin_expect (db->negtimeout == 0, 0))
++	    {
++	      /* Mark the old entry as obsolete.  */
++	      if (dh != NULL)
++		dh->usable = false;
++	    }
++	  else if ((dataset = mempool_alloc (db, (sizeof (struct dataset)
++						  + req->key_len), 1)) != NULL)
+ 	    {
+ 	      dataset->head.allocsize = sizeof (struct dataset) + req->key_len;
+ 	      dataset->head.recsize = total;
+diff -rup a/nscd/pwdcache.c b/nscd/pwdcache.c
+--- a/nscd/pwdcache.c	2012-01-24 20:32:58.914826427 -0700
++++ b/nscd/pwdcache.c	2012-01-24 20:42:17.671968883 -0700
+@@ -124,10 +124,16 @@ cache_addpw (struct database_dyn *db, in
+ 	    written = TEMP_FAILURE_RETRY (send (fd, &notfound, total,
+ 						MSG_NOSIGNAL));
+ 
+-	  dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len,
+-				   1);
+-	  /* If we cannot permanently store the result, so be it.  */
+-	  if (dataset != NULL)
++	  /* If we have a transient error or cannot permanently store
++	     the result, so be it.  */
++	  if (errno == EAGAIN || __builtin_expect (db->negtimeout == 0, 0))
++	    {
++	      /* Mark the old entry as obsolete.  */
++	      if (dh != NULL)
++		dh->usable = false;
++	    }
++	  else if ((dataset = mempool_alloc (db, (sizeof (struct dataset)
++						  + req->key_len), 1)) != NULL)
+ 	    {
+ 	      dataset->head.allocsize = sizeof (struct dataset) + req->key_len;
+ 	      dataset->head.recsize = total;
+diff -rup a/nscd/servicescache.c b/nscd/servicescache.c
+--- a/nscd/servicescache.c	2012-01-24 20:32:58.915826427 -0700
++++ b/nscd/servicescache.c	2012-01-24 20:42:17.672968884 -0700
+@@ -102,15 +102,22 @@ cache_addserv (struct database_dyn *db,
+ 	{
+ 	  /* We have no data.  This means we send the standard reply for this
+ 	     case.  */
+-	  total = sizeof (notfound);
++	  written = total = sizeof (notfound);
+ 
+-	  written = TEMP_FAILURE_RETRY (send (fd, &notfound, total,
+-					      MSG_NOSIGNAL));
++	  if (fd != -1)
++	    written = TEMP_FAILURE_RETRY (send (fd, &notfound, total,
++						MSG_NOSIGNAL));
+ 
+-	  dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len,
+-				   1);
+-	  /* If we cannot permanently store the result, so be it.  */
+-	  if (dataset != NULL)
++	  /* If we have a transient error or cannot permanently store
++	     the result, so be it.  */
++	  if (errval == EAGAIN || __builtin_expect (db->negtimeout == 0, 0))
++	    {
++	      /* Mark the old entry as obsolete.  */
++	      if (dh != NULL)
++		dh->usable = false;
++	    }
++	  else if ((dataset = mempool_alloc (db, (sizeof (struct dataset)
++						  + req->key_len), 1)) != NULL)
+ 	    {
+ 	      dataset->head.allocsize = sizeof (struct dataset) + req->key_len;
+ 	      dataset->head.recsize = total;
diff --git a/SOURCES/glibc-rh785984.patch b/SOURCES/glibc-rh785984.patch
new file mode 100644
index 0000000..80ba5e8
--- /dev/null
+++ b/SOURCES/glibc-rh785984.patch
@@ -0,0 +1,20 @@
+diff -rup a/localedata/locales/zh_CN b/localedata/locales/zh_CN
+--- a/localedata/locales/zh_CN	2006-07-30 16:19:43.000000000 -0600
++++ b/localedata/locales/zh_CN	2012-01-30 21:24:46.905115483 -0700
+@@ -108,11 +108,11 @@ day 	"<U661F><U671F><U65E5>";/
+ 	"<U661F><U671F><U4E94>";/
+ 	"<U661F><U671F><U516D>"
+ 
+-abmon	"<U0020><U0031><U6708>";"<U0020><U0032><U6708>";/
+-	"<U0020><U0033><U6708>";"<U0020><U0034><U6708>";/
+-	"<U0020><U0035><U6708>";"<U0020><U0036><U6708>";/
+-	"<U0020><U0037><U6708>";"<U0020><U0038><U6708>";/
+-	"<U0020><U0039><U6708>";"<U0031><U0030><U6708>";/
++abmon	"<U0031><U6708>";"<U0032><U6708>";/
++	"<U0033><U6708>";"<U0034><U6708>";/
++	"<U0035><U6708>";"<U0036><U6708>";/
++	"<U0037><U6708>";"<U0038><U6708>";/
++	"<U0039><U6708>";"<U0031><U0030><U6708>";/
+ 	"<U0031><U0031><U6708>";"<U0031><U0032><U6708>"
+ 
+ mon	"<U4E00><U6708>";"<U4E8C><U6708>";"<U4E09><U6708>";/
diff --git a/SOURCES/glibc-rh788959-2.patch b/SOURCES/glibc-rh788959-2.patch
new file mode 100644
index 0000000..1064640
--- /dev/null
+++ b/SOURCES/glibc-rh788959-2.patch
@@ -0,0 +1,153 @@
+diff -rcp a/nscd/grpcache.c b/nscd/grpcache.c
+*** a/nscd/grpcache.c	Wed Apr 11 12:50:07 2012
+--- b/nscd/grpcache.c	Wed Apr 11 21:45:58 2012
+*************** cache_addgr (struct database_dyn *db, in
+*** 178,184 ****
+        char *cp;
+        const size_t key_len = strlen (key);
+        const size_t buf_len = 3 * sizeof (grp->gr_gid) + key_len + 1;
+!       char *buf = alloca (buf_len);
+        ssize_t n;
+        size_t cnt;
+  
+--- 178,185 ----
+        char *cp;
+        const size_t key_len = strlen (key);
+        const size_t buf_len = 3 * sizeof (grp->gr_gid) + key_len + 1;
+!       size_t alloca_used = 0;
+!       char *buf = alloca_account (buf_len, alloca_used);
+        ssize_t n;
+        size_t cnt;
+  
+*************** cache_addgr (struct database_dyn *db, in
+*** 190,196 ****
+        /* Determine the length of all members.  */
+        while (grp->gr_mem[gr_mem_cnt])
+  	++gr_mem_cnt;
+!       gr_mem_len = (uint32_t *) alloca (gr_mem_cnt * sizeof (uint32_t));
+        for (gr_mem_cnt = 0; grp->gr_mem[gr_mem_cnt]; ++gr_mem_cnt)
+  	{
+  	  gr_mem_len[gr_mem_cnt] = strlen (grp->gr_mem[gr_mem_cnt]) + 1;
+--- 191,198 ----
+        /* Determine the length of all members.  */
+        while (grp->gr_mem[gr_mem_cnt])
+  	++gr_mem_cnt;
+!       gr_mem_len = (uint32_t *) alloca_account (gr_mem_cnt * sizeof (uint32_t),
+! 						alloca_used);
+        for (gr_mem_cnt = 0; grp->gr_mem[gr_mem_cnt]; ++gr_mem_cnt)
+  	{
+  	  gr_mem_len[gr_mem_cnt] = strlen (grp->gr_mem[gr_mem_cnt]) + 1;
+*************** cache_addgr (struct database_dyn *db, in
+*** 205,214 ****
+  	 change.  Allocate memory on the cache since it is likely
+  	 discarded anyway.  If it turns out to be necessary to have a
+  	 new record we can still allocate real memory.  */
+!       bool alloca_used = false;
+        dataset = NULL;
+  
+!       if (he == NULL)
+  	dataset = (struct dataset *) mempool_alloc (db, total + n, 1);
+  
+        if (dataset == NULL)
+--- 207,216 ----
+  	 change.  Allocate memory on the cache since it is likely
+  	 discarded anyway.  If it turns out to be necessary to have a
+  	 new record we can still allocate real memory.  */
+!       bool dataset_in_stack_or_freed = false;
+        dataset = NULL;
+  
+!       if (he == NULL || ! __libc_use_alloca (alloca_used + total + n))
+  	dataset = (struct dataset *) mempool_alloc (db, total + n, 1);
+  
+        if (dataset == NULL)
+*************** cache_addgr (struct database_dyn *db, in
+*** 216,225 ****
+  	  /* We cannot permanently add the result in the moment.  But
+  	     we can provide the result as is.  Store the data in some
+  	     temporary memory.  */
+! 	  dataset = (struct dataset *) alloca (total + n);
+  
+  	  /* We cannot add this record to the permanent database.  */
+! 	  alloca_used = true;
+  	}
+  
+        dataset->head.allocsize = total + n;
+--- 218,227 ----
+  	  /* We cannot permanently add the result in the moment.  But
+  	     we can provide the result as is.  Store the data in some
+  	     temporary memory.  */
+! 	  dataset = (struct dataset *) alloca_account (total + n, alloca_used);
+  
+  	  /* We cannot add this record to the permanent database.  */
+! 	  dataset_in_stack_or_freed = true;
+  	}
+  
+        dataset->head.allocsize = total + n;
+*************** cache_addgr (struct database_dyn *db, in
+*** 273,278 ****
+--- 275,288 ----
+  		 allocated on the stack and need not be freed.  */
+  	      dh->timeout = dataset->head.timeout;
+  	      ++dh->nreloads;
++ 
++ 	      /* If the new record was not allocated on the stack, then it must
++ 		 be freed.  Note that it can no longer be used.  */
++ 	      if (! dataset_in_stack_or_freed)
++ 		{
++ 		  free (dataset);
++ 		  dataset_in_stack_or_freed = true;
++ 		}
+  	    }
+  	  else
+  	    {
+*************** cache_addgr (struct database_dyn *db, in
+*** 288,294 ****
+  		  key_copy = (char *) newp + (key_copy - (char *) dataset);
+  
+  		  dataset = memcpy (newp, dataset, total + n);
+! 		  alloca_used = false;
+  		}
+  
+  	      /* Mark the old record as obsolete.  */
+--- 298,304 ----
+  		  key_copy = (char *) newp + (key_copy - (char *) dataset);
+  
+  		  dataset = memcpy (newp, dataset, total + n);
+! 		  dataset_in_stack_or_freed = false;
+  		}
+  
+  	      /* Mark the old record as obsolete.  */
+*************** cache_addgr (struct database_dyn *db, in
+*** 303,309 ****
+  	  assert (fd != -1);
+  
+  #ifdef HAVE_SENDFILE
+! 	  if (__builtin_expect (db->mmap_used, 1) && !alloca_used)
+  	    {
+  	      assert (db->wr_fd != -1);
+  	      assert ((char *) &dataset->resp > (char *) db->data);
+--- 313,319 ----
+  	  assert (fd != -1);
+  
+  #ifdef HAVE_SENDFILE
+! 	  if (__builtin_expect (db->mmap_used, 1) && !dataset_in_stack_or_freed)
+  	    {
+  	      assert (db->wr_fd != -1);
+  	      assert ((char *) &dataset->resp > (char *) db->data);
+*************** cache_addgr (struct database_dyn *db, in
+*** 330,336 ****
+  
+        /* Add the record to the database.  But only if it has not been
+  	 stored on the stack.  */
+!       if (! alloca_used)
+  	{
+  	  /* If necessary, we also propagate the data to disk.  */
+  	  if (db->persistent)
+--- 340,346 ----
+  
+        /* Add the record to the database.  But only if it has not been
+  	 stored on the stack.  */
+!       if (! dataset_in_stack_or_freed)
+  	{
+  	  /* If necessary, we also propagate the data to disk.  */
+  	  if (db->persistent)
diff --git a/SOURCES/glibc-rh788959.patch b/SOURCES/glibc-rh788959.patch
new file mode 100644
index 0000000..adc6c99
--- /dev/null
+++ b/SOURCES/glibc-rh788959.patch
@@ -0,0 +1,130 @@
+diff -pruN glibc-2.12-2-gc4ccff1/nis/nss_compat/compat-initgroups.c glibc-2.12-2-gc4ccff1.patched/nis/nss_compat/compat-initgroups.c
+--- glibc-2.12-2-gc4ccff1/nis/nss_compat/compat-initgroups.c	2010-05-04 16:57:23.000000000 +0530
++++ glibc-2.12-2-gc4ccff1.patched/nis/nss_compat/compat-initgroups.c	2012-02-21 11:11:19.877008465 +0530
+@@ -297,6 +297,8 @@ getgrent_next_nss (ent_t *ent, char *buf
+       if (nss_initgroups_dyn (user, group, &mystart, &mysize, &mygroups,
+ 			      limit, errnop) == NSS_STATUS_SUCCESS)
+ 	{
++	  status = NSS_STATUS_NOTFOUND;
++
+ 	  /* If there is no blacklist we can trust the underlying
+ 	     initgroups implementation.  */
+ 	  if (ent->blacklist.current <= 1)
+@@ -309,6 +311,7 @@ getgrent_next_nss (ent_t *ent, char *buf
+ 		 overwrite the pointer with one to a bigger buffer.  */
+ 	      char *tmpbuf = buffer;
+ 	      size_t tmplen = buflen;
++	      bool use_malloc = false;
+ 
+ 	      for (int i = 0; i < mystart; i++)
+ 		{
+@@ -316,21 +319,36 @@ getgrent_next_nss (ent_t *ent, char *buf
+ 						   tmpbuf, tmplen, errnop))
+ 			 == NSS_STATUS_TRYAGAIN
+ 			 && *errnop == ERANGE)
+-		    if (tmpbuf == buffer)
+-		      {
+-			tmplen *= 2;
+-			tmpbuf = __alloca (tmplen);
+-		      }
+-		    else
+-		      tmpbuf = extend_alloca (tmpbuf, tmplen, 2 * tmplen);
++                    {
++                      if (__libc_use_alloca (tmplen * 2))
++                        {
++                          if (tmpbuf == buffer)
++                            {
++                              tmplen *= 2;
++                              tmpbuf = __alloca (tmplen);
++                            }
++                          else
++                            tmpbuf = extend_alloca (tmpbuf, tmplen, tmplen * 2);
++                        }
++                      else
++                        {
++                          tmplen *= 2;
++                          char *newbuf = realloc (use_malloc ? tmpbuf : NULL, tmplen);
++                    
++                          if (newbuf == NULL)
++                            {
++                              status = NSS_STATUS_TRYAGAIN;
++			      goto done;
++                            }
++                          use_malloc = true;
++                          tmpbuf = newbuf;
++                        }
++                    }
+ 
+ 		  if (__builtin_expect  (status != NSS_STATUS_NOTFOUND, 1))
+ 		    {
+ 		      if (__builtin_expect  (status != NSS_STATUS_SUCCESS, 0))
+-			{
+-			  free (mygroups);
+-			  return status;
+-			}
++		        goto done;
+ 
+ 		      if (!in_blacklist (grpbuf.gr_name,
+ 					 strlen (grpbuf.gr_name), ent)
+@@ -348,11 +366,17 @@ getgrent_next_nss (ent_t *ent, char *buf
+ 			}
+ 		    }
+ 		}
++
++		status = NSS_STATUS_NOTFOUND;
++
++ done:
++		if (use_malloc)
++		  free (tmpbuf);
+ 	    }
+ 
+ 	  free (mygroups);
+ 
+-	  return NSS_STATUS_NOTFOUND;
++	  return status;
+ 	}
+ 
+       free (mygroups);
+@@ -506,6 +530,7 @@ _nss_compat_initgroups_dyn (const char *
+   char *tmpbuf;
+   enum nss_status status;
+   ent_t intern = { true, false, false, NULL, {NULL, 0, 0} };
++  bool use_malloc = false;
+ 
+   status = internal_setgrent (&intern);
+   if (status != NSS_STATUS_SUCCESS)
+@@ -519,13 +544,32 @@ _nss_compat_initgroups_dyn (const char *
+ 					    user, group, start, size,
+ 					    groupsp, limit, errnop))
+ 	     == NSS_STATUS_TRYAGAIN && *errnop == ERANGE)
+-	tmpbuf = extend_alloca (tmpbuf, buflen, 2 * buflen);
++        if (__libc_use_alloca (buflen * 2))
++          tmpbuf = extend_alloca (tmpbuf, buflen, 2 * buflen);
++        else
++          {
++            buflen *= 2;
++            char *newbuf = realloc (use_malloc ? tmpbuf : NULL, buflen);
++            if (newbuf == NULL)
++              {
++                status = NSS_STATUS_TRYAGAIN;
++                goto done;
++              }
++            use_malloc = true;
++            tmpbuf = newbuf;
++          }
+     }
+   while (status == NSS_STATUS_SUCCESS);
+ 
++  status = NSS_STATUS_SUCCESS;
++
++ done:
++  if (use_malloc)
++    free (tmpbuf);
++
+   internal_endgrent (&intern);
+ 
+-  return NSS_STATUS_SUCCESS;
++  return status;
+ }
+ 
+ 
diff --git a/SOURCES/glibc-rh789189.patch b/SOURCES/glibc-rh789189.patch
new file mode 100644
index 0000000..fc0e2e0
--- /dev/null
+++ b/SOURCES/glibc-rh789189.patch
@@ -0,0 +1,12 @@
+diff -rup a/resolv/res_init.c b/resolv/res_init.c
+--- a/resolv/res_init.c	2010-05-04 05:27:23.000000000 -0600
++++ b/resolv/res_init.c	2012-02-10 10:20:24.923578396 -0700
+@@ -325,7 +325,7 @@ __res_vinit(res_state statp, int preinit
+                         struct in6_addr a6;
+                         char *el;
+ 
+-                        if ((el = strchr(cp, '\n')) != NULL)
++                        if ((el = strpbrk(cp, " \t\n")) != NULL)
+                             *el = '\0';
+ 			if ((el = strchr(cp, SCOPE_DELIMITER)) != NULL)
+ 			    *el = '\0';
diff --git a/SOURCES/glibc-rh789209.patch b/SOURCES/glibc-rh789209.patch
new file mode 100644
index 0000000..3aea97e
--- /dev/null
+++ b/SOURCES/glibc-rh789209.patch
@@ -0,0 +1,12 @@
+diff -rup a/localedata/locales/uk_UA b/localedata/locales/uk_UA
+--- a/localedata/locales/uk_UA	2010-05-04 05:27:23.000000000 -0600
++++ b/localedata/locales/uk_UA	2012-02-10 09:59:16.934189715 -0700
+@@ -700,7 +700,7 @@ LC_MONETARY
+ % 200 hrv. - 200 hryven (money)
+ 
+ % the local currency symbol
+-currency_symbol           "<U0433><U0440>" % hr (hryvnya)
++currency_symbol           "<U0433><U0440><U043D><U002E>"  % hr (hryvnya)
+ 
+ % This must be a 4-character string containing the international currency
+ % symbol as defined by the ISO 4217 standard (three characters) followed
diff --git a/SOURCES/glibc-rh789238-2.patch b/SOURCES/glibc-rh789238-2.patch
new file mode 100644
index 0000000..62b5492
--- /dev/null
+++ b/SOURCES/glibc-rh789238-2.patch
@@ -0,0 +1,114 @@
+diff -rup a/malloc/arena.c b/malloc/arena.c
+--- a/malloc/arena.c	2012-03-02 10:22:47.025002715 -0700
++++ b/malloc/arena.c	2012-03-02 10:27:47.442361529 -0700
+@@ -123,14 +123,14 @@ int __malloc_initialized = -1;
+   if(ptr) \
+     (void)mutex_lock(&ptr->mutex); \
+   else \
+-    ptr = arena_get2(ptr, (size)); \
++    ptr = arena_get2(ptr, (size), false); \
+ } while(0)
+ #else
+ #define arena_lock(ptr, size) do { \
+   if(ptr && !mutex_trylock(&ptr->mutex)) { \
+     THREAD_STAT(++(ptr->stat_lock_direct)); \
+   } else \
+-    ptr = arena_get2(ptr, (size)); \
++    ptr = arena_get2(ptr, (size), false); \
+ } while(0)
+ #endif
+ 
+@@ -982,7 +982,7 @@ get_free_list (void)
+ 
+ 
+ static mstate
+-reused_arena (void)
++reused_arena (bool retrying)
+ {
+   mstate result;
+   static mstate next_to_use;
+@@ -999,6 +999,15 @@ reused_arena (void)
+     }
+   while (result != next_to_use);
+ 
++  /* If we are retrying due to a failure to allocate in the main
++     arena, don't wait for the main arena to become available, select
++     another.
++
++     To really fix this right we would have to try the allocation
++     in every other arena, but that seems like severe overkill.  */
++  if (retrying && result == &main_arena)
++    result = result->next;
++
+   /* No arena available.  Wait for the next in line.  */
+   (void)mutex_lock(&result->mutex);
+ 
+@@ -1014,9 +1023,9 @@ reused_arena (void)
+ static mstate
+ internal_function
+ #if __STD_C
+-arena_get2(mstate a_tsd, size_t size)
++arena_get2(mstate a_tsd, size_t size, bool retrying)
+ #else
+-arena_get2(a_tsd, size) mstate a_tsd; size_t size;
++arena_get2(a_tsd, size, retrying) mstate a_tsd; size_t size; bool retrying
+ #endif
+ {
+   mstate a;
+@@ -1055,7 +1064,7 @@ arena_get2(a_tsd, size) mstate a_tsd; si
+ 	    catomic_decrement (&narenas);
+ 	}
+       else
+-	a = reused_arena ();
++	a = reused_arena (retrying);
+     }
+ #else
+   if(!a_tsd)
+diff -rup a/malloc/malloc.c b/malloc/malloc.c
+--- a/malloc/malloc.c	2012-03-02 10:22:47.061002519 -0700
++++ b/malloc/malloc.c	2012-03-02 10:23:53.151643863 -0700
+@@ -3671,7 +3671,7 @@ public_mALLOc(size_t bytes)
+       /* ... or sbrk() has failed and there is still a chance to mmap() */
+       mstate prev = ar_ptr->next ? ar_ptr : 0;
+       (void)mutex_unlock(&ar_ptr->mutex);
+-      ar_ptr = arena_get2(prev, bytes);
++      ar_ptr = arena_get2(prev, bytes, true);
+       if(ar_ptr) {
+ 	victim = _int_malloc(ar_ptr, bytes);
+ 	(void)mutex_unlock(&ar_ptr->mutex);
+@@ -3892,7 +3892,7 @@ public_mEMALIGn(size_t alignment, size_t
+       /* ... or sbrk() has failed and there is still a chance to mmap() */
+       mstate prev = ar_ptr->next ? ar_ptr : 0;
+       (void)mutex_unlock(&ar_ptr->mutex);
+-      ar_ptr = arena_get2(prev, bytes);
++      ar_ptr = arena_get2(prev, bytes, true);
+       if(ar_ptr) {
+ 	p = _int_memalign(ar_ptr, alignment, bytes);
+ 	(void)mutex_unlock(&ar_ptr->mutex);
+@@ -3943,7 +3943,7 @@ public_vALLOc(size_t bytes)
+       /* ... or sbrk() has failed and there is still a chance to mmap() */
+       mstate prev = ar_ptr->next ? ar_ptr : 0;
+       (void)mutex_unlock(&ar_ptr->mutex);
+-      ar_ptr = arena_get2(prev, bytes);
++      ar_ptr = arena_get2(prev, bytes, true);
+       if(ar_ptr) {
+ 	p = _int_memalign(ar_ptr, pagesz, bytes);
+ 	(void)mutex_unlock(&ar_ptr->mutex);
+@@ -3992,7 +3992,7 @@ public_pVALLOc(size_t bytes)
+       /* ... or sbrk() has failed and there is still a chance to mmap() */
+       mstate prev = ar_ptr->next ? ar_ptr : 0;
+       (void)mutex_unlock(&ar_ptr->mutex);
+-      ar_ptr = arena_get2(prev, bytes + 2*pagesz + MINSIZE);
++      ar_ptr = arena_get2(prev, bytes + 2*pagesz + MINSIZE, true);
+       if(ar_ptr) {
+ 	p = _int_memalign(ar_ptr, pagesz, rounded_bytes);
+ 	(void)mutex_unlock(&ar_ptr->mutex);
+@@ -4086,7 +4086,7 @@ public_cALLOc(size_t n, size_t elem_size
+       /* ... or sbrk() has failed and there is still a chance to mmap() */
+       mstate prev = av->next ? av : 0;
+       (void)mutex_unlock(&av->mutex);
+-      av = arena_get2(prev, sz);
++      av = arena_get2(prev, sz, true);
+       if(av) {
+ 	mem = _int_malloc(av, sz);
+ 	(void)mutex_unlock(&av->mutex);
diff --git a/SOURCES/glibc-rh789238.patch b/SOURCES/glibc-rh789238.patch
new file mode 100644
index 0000000..f2c90e2
--- /dev/null
+++ b/SOURCES/glibc-rh789238.patch
@@ -0,0 +1,119 @@
+diff -rup a/malloc/malloc.c b/malloc/malloc.c
+--- a/malloc/malloc.c	2012-02-13 21:46:11.678847531 -0700
++++ b/malloc/malloc.c	2012-02-13 22:43:14.788431976 -0700
+@@ -3669,8 +3669,9 @@ public_mALLOc(size_t bytes)
+     } else {
+ #if USE_ARENAS
+       /* ... or sbrk() has failed and there is still a chance to mmap() */
+-      ar_ptr = arena_get2(ar_ptr->next ? ar_ptr : 0, bytes);
+-      (void)mutex_unlock(&main_arena.mutex);
++      mstate prev = ar_ptr->next ? ar_ptr : 0;
++      (void)mutex_unlock(&ar_ptr->mutex);
++      ar_ptr = arena_get2(prev, bytes);
+       if(ar_ptr) {
+ 	victim = _int_malloc(ar_ptr, bytes);
+ 	(void)mutex_unlock(&ar_ptr->mutex);
+@@ -3929,10 +3930,10 @@ public_vALLOc(size_t bytes)
+   if(!ar_ptr)
+     return 0;
+   p = _int_valloc(ar_ptr, bytes);
+-  (void)mutex_unlock(&ar_ptr->mutex);
+   if(!p) {
+     /* Maybe the failure is due to running out of mmapped areas. */
+     if(ar_ptr != &main_arena) {
++      (void)mutex_unlock(&ar_ptr->mutex);
+       ar_ptr = &main_arena;
+       (void)mutex_lock(&ar_ptr->mutex);
+       p = _int_memalign(ar_ptr, pagesz, bytes);
+@@ -3940,14 +3941,17 @@ public_vALLOc(size_t bytes)
+     } else {
+ #if USE_ARENAS
+       /* ... or sbrk() has failed and there is still a chance to mmap() */
+-      ar_ptr = arena_get2(ar_ptr->next ? ar_ptr : 0, bytes);
++      mstate prev = ar_ptr->next ? ar_ptr : 0;
++      (void)mutex_unlock(&ar_ptr->mutex);
++      ar_ptr = arena_get2(prev, bytes);
+       if(ar_ptr) {
+ 	p = _int_memalign(ar_ptr, pagesz, bytes);
+ 	(void)mutex_unlock(&ar_ptr->mutex);
+       }
+ #endif
+     }
+-  }
++  } else
++    (void)mutex_unlock(&ar_ptr->mutex);
+   assert(!p || chunk_is_mmapped(mem2chunk(p)) ||
+ 	 ar_ptr == arena_for_chunk(mem2chunk(p)));
+ 
+@@ -3975,10 +3979,10 @@ public_pVALLOc(size_t bytes)
+ 
+   arena_get(ar_ptr, bytes + 2*pagesz + MINSIZE);
+   p = _int_pvalloc(ar_ptr, bytes);
+-  (void)mutex_unlock(&ar_ptr->mutex);
+   if(!p) {
+     /* Maybe the failure is due to running out of mmapped areas. */
+     if(ar_ptr != &main_arena) {
++      (void)mutex_unlock(&ar_ptr->mutex);
+       ar_ptr = &main_arena;
+       (void)mutex_lock(&ar_ptr->mutex);
+       p = _int_memalign(ar_ptr, pagesz, rounded_bytes);
+@@ -3986,15 +3990,17 @@ public_pVALLOc(size_t bytes)
+     } else {
+ #if USE_ARENAS
+       /* ... or sbrk() has failed and there is still a chance to mmap() */
+-      ar_ptr = arena_get2(ar_ptr->next ? ar_ptr : 0,
+-			  bytes + 2*pagesz + MINSIZE);
++      mstate prev = ar_ptr->next ? ar_ptr : 0;
++      (void)mutex_unlock(&ar_ptr->mutex);
++      ar_ptr = arena_get2(prev, bytes + 2*pagesz + MINSIZE);
+       if(ar_ptr) {
+ 	p = _int_memalign(ar_ptr, pagesz, rounded_bytes);
+ 	(void)mutex_unlock(&ar_ptr->mutex);
+       }
+ #endif
+     }
+-  }
++  } else
++    (void)mutex_unlock(&ar_ptr->mutex);
+   assert(!p || chunk_is_mmapped(mem2chunk(p)) ||
+ 	 ar_ptr == arena_for_chunk(mem2chunk(p)));
+ 
+@@ -4064,8 +4070,6 @@ public_cALLOc(size_t n, size_t elem_size
+ #endif
+   mem = _int_malloc(av, sz);
+ 
+-  /* Only clearing follows, so we can unlock early. */
+-  (void)mutex_unlock(&av->mutex);
+ 
+   assert(!mem || chunk_is_mmapped(mem2chunk(mem)) ||
+ 	 av == arena_for_chunk(mem2chunk(mem)));
+@@ -4073,15 +4077,16 @@ public_cALLOc(size_t n, size_t elem_size
+   if (mem == 0) {
+     /* Maybe the failure is due to running out of mmapped areas. */
+     if(av != &main_arena) {
++      (void)mutex_unlock(&av->mutex);
+       (void)mutex_lock(&main_arena.mutex);
+       mem = _int_malloc(&main_arena, sz);
+       (void)mutex_unlock(&main_arena.mutex);
+     } else {
+ #if USE_ARENAS
+       /* ... or sbrk() has failed and there is still a chance to mmap() */
+-      (void)mutex_lock(&main_arena.mutex);
+-      av = arena_get2(av->next ? av : 0, sz);
+-      (void)mutex_unlock(&main_arena.mutex);
++      mstate prev = av->next ? av : 0;
++      (void)mutex_unlock(&av->mutex);
++      av = arena_get2(prev, sz);
+       if(av) {
+ 	mem = _int_malloc(av, sz);
+ 	(void)mutex_unlock(&av->mutex);
+@@ -4089,7 +4094,8 @@ public_cALLOc(size_t n, size_t elem_size
+ #endif
+     }
+     if (mem == 0) return 0;
+-  }
++  } else
++    (void)mutex_unlock(&av->mutex);
+   p = mem2chunk(mem);
+ 
+   /* Two optional cases in which clearing not necessary */
diff --git a/SOURCES/glibc-rh794817-2.patch b/SOURCES/glibc-rh794817-2.patch
new file mode 100644
index 0000000..15774b4
--- /dev/null
+++ b/SOURCES/glibc-rh794817-2.patch
@@ -0,0 +1,85 @@
+diff -rup a/stdio-common/vfprintf.c b/stdio-common/vfprintf.c
+--- a/stdio-common/vfprintf.c	2012-03-05 09:43:14.705536167 -0700
++++ b/stdio-common/vfprintf.c	2012-03-05 09:48:11.602890982 -0700
+@@ -822,7 +822,7 @@ vfprintf (FILE *s, const CHAR_T *format,
+ 									      \
+ 	if (function_done < 0)						      \
+ 	  {								      \
+-	    /* Error in print handler.  */				      \
++	    /* Error in print handler; up to handler to set errno.  */	      \
+ 	    done = -1;							      \
+ 	    goto all_done;						      \
+ 	  }								      \
+@@ -876,7 +876,7 @@ vfprintf (FILE *s, const CHAR_T *format,
+ 									      \
+ 	if (function_done < 0)						      \
+ 	  {								      \
+-	    /* Error in print handler.  */				      \
++	    /* Error in print handler; up to handler to set errno.  */	      \
+ 	    done = -1;							      \
+ 	    goto all_done;						      \
+ 	  }								      \
+@@ -1117,7 +1117,7 @@ vfprintf (FILE *s, const CHAR_T *format,
+ 			 &mbstate);					      \
+ 	if (len == (size_t) -1)						      \
+ 	  {								      \
+-	    /* Something went wron gduring the conversion.  Bail out.  */     \
++	    /* Something went wrong during the conversion.  Bail out.  */     \
+ 	    done = -1;							      \
+ 	    goto all_done;						      \
+ 	  }								      \
+@@ -1188,6 +1188,7 @@ vfprintf (FILE *s, const CHAR_T *format,
+ 		      if (__mbsnrtowcs (ignore, &str2, strend - str2,	      \
+ 					ignore_size, &ps) == (size_t) -1)     \
+ 			{						      \
++			  /* Conversion function has set errno.  */	      \
+ 			  done = -1;					      \
+ 			  goto all_done;				      \
+ 			}						      \
+@@ -1599,6 +1600,7 @@ vfprintf (FILE *s, const CHAR_T *format,
+ 	  if (spec == L_('\0'))
+ 	    {
+ 	      /* The format string ended before the specifier is complete.  */
++	      __set_errno (EINVAL);
+ 	      done = -1;
+ 	      goto all_done;
+ 	    }
+@@ -1696,17 +1698,20 @@ do_positional:
+ 
+     /* Determine the number of arguments the format string consumes.  */
+     nargs = MAX (nargs, max_ref_arg);
++    /* Calculate total size needed to represent a single argument across
++       all three argument-related arrays.  */
+     bytes_per_arg = sizeof (*args_value) + sizeof (*args_size)
+                     + sizeof (*args_type);
+ 
+     /* Check for potential integer overflow.  */
+-    if (nargs > SIZE_MAX / bytes_per_arg)
++    if (__builtin_expect (nargs > SIZE_MAX / bytes_per_arg, 0))
+       {
++         __set_errno (ERANGE);
+          done = -1;
+          goto all_done;
+       }
+ 
+-    /* Allocate memory for the argument descriptions.  */
++    /* Allocate memory for all three argument arrays.  */
+     if (__libc_use_alloca (nargs * bytes_per_arg))
+         args_value = alloca (nargs * bytes_per_arg);
+     else
+@@ -1937,6 +1942,7 @@ do_positional:
+ 		       about # of chars.  */
+ 		    if (function_done < 0)
+ 		      {
++			/* Function has set errno.  */
+ 			done = -1;
+ 			goto all_done;
+ 		      }
+@@ -1971,6 +1977,7 @@ do_positional:
+ 		 of chars.  */
+ 	      if (function_done < 0)
+ 		{
++		  /* Function has set errno.  */
+ 		  done = -1;
+ 		  goto all_done;
+ 		}
diff --git a/SOURCES/glibc-rh794817.patch b/SOURCES/glibc-rh794817.patch
new file mode 100644
index 0000000..e21caaa
--- /dev/null
+++ b/SOURCES/glibc-rh794817.patch
@@ -0,0 +1,239 @@
+From libc-alpha-return-25252-listarch-libc-alpha=sources dot redhat dot com at sourceware dot org Thu Feb 16 16:21:17 2012
+Return-Path: <libc-alpha-return-25252-listarch-libc-alpha=sources dot redhat dot com at sourceware dot org>
+Delivered-To: listarch-libc-alpha at sources dot redhat dot com
+Received: (qmail 5187 invoked by alias); 16 Feb 2012 16:21:14 -0000
+Delivered-To: moderator for libc-alpha at sourceware dot org
+Received: (qmail 2174 invoked by uid 22791); 16 Feb 2012 16:17:18 -0000
+X-SWARE-Spam-Status: No, hits=-2.0 required=5.0
+	tests=AWL,BAYES_00,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,TW_TV,TW_VB,TW_VF,T_RP_MATCHES_RCVD
+X-Spam-Check-By: sourceware.org
+Date: Thu, 16 Feb 2012 08:16:13 -0800
+From: Kees Cook <kees at outflux dot net>
+To: "Ryan S dot  Arnold" <ryan dot arnold at gmail dot com>
+Cc: libc-alpha at sourceware dot org, Paul Eggert <eggert at cs dot ucla dot edu>,
+        Roland McGrath <roland at hack dot frob dot com>,
+        Andreas Schwab <schwab at linux-m68k dot org>
+Subject: Re: [PATCH] vfprintf: validate nargs and maybe allocate from heap
+Message-ID: <20120216161613.GZ20420@outflux.net>
+References: <20120206062537.GM4979@outflux.net>
+ <20120207000509 dot GP4989 at outflux dot net>
+ <20120210192457 dot GF20420 at outflux dot net>
+ <CAAKybw8AgkGsKAx=kvX4Tsi74f+HtuVnatTCB0VfsHi7vVFi1Q at mail dot gmail dot com>
+ <20120214223048 dot GM20420 at outflux dot net>
+ <CAAKybw_HS+cav+YcDw3ns7UXu6_xA7EHPrkiB87P+OGwEB0PVQ at mail dot gmail dot com>
+ <20120214224543 dot GN20420 at outflux dot net>
+MIME-Version: 1.0
+Content-Type: text/plain; charset=us-ascii
+Content-Disposition: inline
+In-Reply-To: <20120214224543 dot GN20420 at outflux dot net>
+X-MIMEDefang-Filter: outflux$Revision: 1.316 $
+X-HELO: www.outflux.net
+Mailing-List: contact libc-alpha-help at sourceware dot org; run by ezmlm
+Precedence: bulk
+List-Id: <libc-alpha.sourceware.org>
+List-Subscribe: <mailto:libc-alpha-subscribe at sourceware dot org>
+List-Archive: <http://sourceware.org/ml/libc-alpha/>
+List-Post: <mailto:libc-alpha at sourceware dot org>
+List-Help: <mailto:libc-alpha-help at sourceware dot org>, <http://sourceware dot org/ml/#faqs>
+Sender: libc-alpha-owner at sourceware dot org
+Delivered-To: mailing list libc-alpha at sourceware dot org
+
+The nargs value can overflow when doing allocations, allowing arbitrary
+memory writes via format strings, bypassing _FORTIFY_SOURCE:
+http://www.phrack.org/issues.html?issue=67&id=9
+
+This checks for nargs overflow and possibly allocates from heap instead of
+stack, and adds a regression test for the situation.
+
+I have FSF assignment via Google. (Sent from @outflux since that's how I'm
+subscribed here, but CL shows @chromium.org as part of my Google work.)
+
+This version disables the useless test on non-32-bit platforms.
+
+2012-02-16  Kees Cook  <keescook@chromium.org>
+
+ 	[BZ #13656]
+ 	* stdio-common/vfprintf.c (vfprintf): Check for nargs overflow and
+ 	possibly allocate from heap instead of stack.
+ 	* stdio-common/bug-vfprintf-nargs.c: New file.
+ 	* stdio-common/Makefile (tests): Add nargs overflow test.
+
+ 
+diff -rup a/stdio-common/Makefile b/stdio-common/Makefile
+--- a/stdio-common/Makefile	2010-05-04 05:27:23.000000000 -0600
++++ b/stdio-common/Makefile	2012-02-20 21:57:52.983040992 -0700
+@@ -60,7 +60,7 @@ tests := tstscanf test_rdwr test-popen t
+ 	 tst-popen tst-unlockedio tst-fmemopen2 tst-put-error tst-fgets \
+ 	 tst-fwrite bug16 bug17 tst-swscanf tst-sprintf2 bug18 bug18a \
+ 	 bug19 bug19a tst-popen2 scanf13 scanf14 scanf15 bug20 bug21 bug22 \
+-	 scanf16 scanf17 tst-setvbuf1
++	 scanf16 scanf17 tst-setvbuf1 bug-vfprintf-nargs
+ 
+ test-srcs = tst-unbputc tst-printf
+ 
+diff --git a/stdio-common/bug-vfprintf-nargs.c b/stdio-common/bug-vfprintf-nargs.c
+new file mode 100644
+index 0000000..13c66c0
+--- /dev/null
++++ b/stdio-common/bug-vfprintf-nargs.c
+@@ -0,0 +1,78 @@
++/* Test for vfprintf nargs allocation overflow (BZ #13656).
++   Copyright (C) 2012 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++   Contributed by Kees Cook <keescook@chromium.org>, 2012.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library 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
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, write to the Free
++   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
++   02111-1307 USA.  */
++
++#include <stdio.h>
++#include <stdlib.h>
++#include <stdint.h>
++#include <unistd.h>
++#include <inttypes.h>
++#include <string.h>
++#include <signal.h>
++
++static int
++format_failed (const char *fmt, const char *expected)
++{
++  char output[80];
++
++  printf ("%s : ", fmt);
++
++  memset (output, 0, sizeof output);
++  /* Having sprintf itself detect a failure is good.  */
++  if (sprintf (output, fmt, 1, 2, 3, "test") > 0
++      && strcmp (output, expected) != 0)
++    {
++      printf ("FAIL (output '%s' != expected '%s')\n", output, expected);
++      return 1;
++    }
++  puts ("ok");
++  return 0;
++}
++
++static int
++do_test (void)
++{
++  int rc = 0;
++  char buf[64];
++
++  /* Regular positionals work.  */
++  if (format_failed ("%1$d", "1") != 0)
++    rc = 1;
++
++  /* Regular width positionals work.  */
++  if (format_failed ("%1$*2$d", " 1") != 0)
++    rc = 1;
++
++  /* Positional arguments are constructed via read_int, so nargs can only
++     overflow on 32-bit systems.  On 64-bit systems, it will attempt to
++     allocate a giant amount of memory and possibly crash, which is the
++     expected situation.  Since the 64-bit behavior is arch-specific, only
++     test this on 32-bit systems.  */
++  if (sizeof (long int) == 4)
++    {
++      sprintf (buf, "%%1$d %%%" PRIdPTR "$d", UINT32_MAX / sizeof (int));
++      if (format_failed (buf, "1 %$d") != 0)
++        rc = 1;
++    }
++
++  return rc;
++}
++
++#define TEST_FUNCTION do_test ()
++#include "../test-skeleton.c"
+diff --git a/stdio-common/vfprintf.c b/stdio-common/vfprintf.c
+index 863cd5d..022e72b 100644
+--- a/stdio-common/vfprintf.c
++++ b/stdio-common/vfprintf.c
+@@ -235,6 +235,9 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
+      0 if unknown.  */
+   int readonly_format = 0;
+ 
++  /* For the argument descriptions, which may be allocated on the heap.  */
++  void *args_malloced = NULL;
++
+   /* This table maps a character into a number representing a
+      class.  In each step there is a destination label for each
+      class.  */
+@@ -1647,9 +1650,10 @@ do_positional:
+        determine the size of the array needed to store the argument
+        attributes.  */
+     size_t nargs = 0;
+-    int *args_type;
+-    union printf_arg *args_value = NULL;
++    size_t bytes_per_arg;
++    union printf_arg *args_value;
+     int *args_size;
++    int *args_type;
+ 
+     /* Positional parameters refer to arguments directly.  This could
+        also determine the maximum number of arguments.  Track the
+@@ -1698,13 +1702,33 @@ do_positional:
+ 
+     /* Determine the number of arguments the format string consumes.  */
+     nargs = MAX (nargs, max_ref_arg);
++    bytes_per_arg = sizeof (*args_value) + sizeof (*args_size)
++                    + sizeof (*args_type);
++
++    /* Check for potential integer overflow.  */
++    if (nargs > SIZE_MAX / bytes_per_arg)
++      {
++         done = -1;
++         goto all_done;
++      }
+ 
+     /* Allocate memory for the argument descriptions.  */
+-    args_type = alloca (nargs * sizeof (int));
++    if (__libc_use_alloca (nargs * bytes_per_arg))
++        args_value = alloca (nargs * bytes_per_arg);
++    else
++      {
++        args_value = args_malloced = malloc (nargs * bytes_per_arg);
++        if (args_value == NULL)
++          {
++            done = -1;
++            goto all_done;
++          }
++      }
++
++    args_size = &args_value[nargs].pa_int;
++    args_type = &args_size[nargs];
+     memset (args_type, s->_flags2 & _IO_FLAGS2_FORTIFY ? '\xff' : '\0',
+-	    nargs * sizeof (int));
+-    args_value = alloca (nargs * sizeof (union printf_arg));
+-    args_size = alloca (nargs * sizeof (int));
++	    nargs * sizeof (*args_type));
+ 
+     /* XXX Could do sanity check here: If any element in ARGS_TYPE is
+        still zero after this loop, format is invalid.  For now we
+@@ -1973,8 +1997,8 @@ do_positional:
+   }
+ 
+ all_done:
+-  if (__builtin_expect (workstart != NULL, 0))
+-    free (workstart);
++  free (args_malloced);
++  free (workstart);
+   /* Unlock the stream.  */
+   _IO_funlockfile (s);
+   _IO_cleanup_region_end (0);
+-- 
+1.7.5.4
+
+-- 
+Kees Cook                                            @outflux.net
+
diff --git a/SOURCES/glibc-rh795498.patch b/SOURCES/glibc-rh795498.patch
new file mode 100644
index 0000000..729c5a4
--- /dev/null
+++ b/SOURCES/glibc-rh795498.patch
@@ -0,0 +1,13 @@
+diff --git a/resolv/nss_dns/dns-host.c b/resolv/nss_dns/dns-host.c
+index 01369f6..44ad04d 100644
+--- a/resolv/nss_dns/dns-host.c
++++ b/resolv/nss_dns/dns-host.c
+@@ -1219,7 +1219,7 @@ gaih_getanswer (const querybuf *answer1, int anslen1, const querybuf *answer2,
+ 				  &first);
+   if ((status == NSS_STATUS_SUCCESS || status == NSS_STATUS_NOTFOUND
+        || (status == NSS_STATUS_TRYAGAIN
+-	   && (errno != ERANGE || *h_errnop != NO_RECOVERY)))
++	   && (*errnop != ERANGE || *h_errnop == NO_RECOVERY)))
+       && answer2 != NULL && anslen2 > 0)
+     {
+       enum nss_status status2 = gaih_getanswer_slice(answer2, anslen2, qname,
diff --git a/SOURCES/glibc-rh797094-1.patch b/SOURCES/glibc-rh797094-1.patch
new file mode 100644
index 0000000..e98b9c0
--- /dev/null
+++ b/SOURCES/glibc-rh797094-1.patch
@@ -0,0 +1,657 @@
+diff -rup a/include/alloca.h b/include/alloca.h
+--- a/include/alloca.h	2012-02-29 13:11:19.439693476 -0700
++++ b/include/alloca.h	2012-02-29 13:11:49.832530623 -0700
+@@ -49,15 +49,24 @@ libc_hidden_proto (__libc_alloca_cutoff)
+ 
+ #if defined stackinfo_get_sp && defined stackinfo_sub_sp
+ # define alloca_account(size, avar) \
+-  ({ void *old__ = stackinfo_get_sp ();			\
+-     void *m__ = __alloca (size);			\
+-     avar += stackinfo_sub_sp (old__);			\
++  ({ void *old__ = stackinfo_get_sp ();					      \
++     void *m__ = __alloca (size);					      \
++     avar += stackinfo_sub_sp (old__);					      \
++     m__; })
++# define extend_alloca_account(buf, len, newlen, avar) \
++  ({ void *old__ = stackinfo_get_sp ();					      \
++     void *m__ = extend_alloca (buf, len, newlen);			      \
++     avar += stackinfo_sub_sp (old__);					      \
+      m__; })
+ #else
+ # define alloca_account(size, avar) \
+-  ({ size_t s__ = (size);		    \
+-     avar += s__;			    \
++  ({ size_t s__ = (size);						      \
++     avar += s__;							      \
+      __alloca (s__); })
++# define extend_alloca_account(buf, len, newlen, avar) \
++  ({ size_t s__ = (newlen);						      \
++     avar += s__;							      \
++     extend_alloca (buf, len, s__); })
+ #endif
+ 
+ #endif
+diff -rup a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c
+--- a/sysdeps/posix/getaddrinfo.c	2012-02-29 13:11:19.588692676 -0700
++++ b/sysdeps/posix/getaddrinfo.c	2012-02-29 13:12:42.972245862 -0700
+@@ -278,6 +278,7 @@ gaih_inet (const char *name, const struc
+   bool got_ipv6 = false;
+   const char *canon = NULL;
+   const char *orig_name = name;
++  size_t alloca_used = 0;
+ 
+   if (req->ai_protocol || req->ai_socktype)
+     {
+@@ -310,7 +311,7 @@ gaih_inet (const char *name, const struc
+ 	  if (tp->name[0])
+ 	    {
+ 	      st = (struct gaih_servtuple *)
+-		__alloca (sizeof (struct gaih_servtuple));
++		alloca_account (sizeof (struct gaih_servtuple), alloca_used);
+ 
+ 	      if ((rc = gaih_inet_serv (service->name, tp, req, st)))
+ 		return rc;
+@@ -334,7 +335,8 @@ gaih_inet (const char *name, const struc
+ 		    continue;
+ 
+ 		  newp = (struct gaih_servtuple *)
+-		    __alloca (sizeof (struct gaih_servtuple));
++		    alloca_account (sizeof (struct gaih_servtuple),
++				    alloca_used);
+ 
+ 		  if ((rc = gaih_inet_serv (service->name, tp, req, newp)))
+ 		    {
+@@ -362,7 +364,7 @@ gaih_inet (const char *name, const struc
+ 
+       if (req->ai_socktype || req->ai_protocol)
+ 	{
+-	  st = __alloca (sizeof (struct gaih_servtuple));
++	  st = alloca_account (sizeof (struct gaih_servtuple), alloca_used);
+ 	  st->next = NULL;
+ 	  st->socktype = tp->socktype;
+ 	  st->protocol = ((tp->protoflag & GAI_PROTO_PROTOANY)
+@@ -379,7 +381,8 @@ gaih_inet (const char *name, const struc
+ 	      {
+ 		struct gaih_servtuple *newp;
+ 
+-		newp = __alloca (sizeof (struct gaih_servtuple));
++		newp = alloca_account (sizeof (struct gaih_servtuple),
++				       alloca_used);
+ 		newp->next = NULL;
+ 		newp->socktype = tp->socktype;
+ 		newp->protocol = tp->protocol;
+@@ -391,10 +394,17 @@ gaih_inet (const char *name, const struc
+ 	}
+     }
+ 
++  bool malloc_name = false;
++  bool malloc_addrmem = false;
++  struct gaih_addrtuple *addrmem = NULL;
++  bool malloc_canonbuf = false;
++  char *canonbuf = NULL;
++  bool malloc_tmpbuf = false;
++  char *tmpbuf = NULL;
++  int result = 0;
+   if (name != NULL)
+     {
+-      at = __alloca (sizeof (struct gaih_addrtuple));
+-
++      at = alloca_account (sizeof (struct gaih_addrtuple), alloca_used);
+       at->family = AF_UNSPEC;
+       at->scopeid = 0;
+       at->next = NULL;
+@@ -412,6 +422,7 @@ gaih_inet (const char *name, const struc
+ 	  rc = __idna_to_ascii_lz (name, &p, idn_flags);
+ 	  if (rc != IDNA_SUCCESS)
+ 	    {
++	      /* No need to jump to free_and_return here.  */
+ 	      if (rc == IDNA_MALLOC_ERROR)
+ 		return -EAI_MEMORY;
+ 	      if (rc == IDNA_DLOPEN_ERROR)
+@@ -421,10 +432,7 @@ gaih_inet (const char *name, const struc
+ 	  /* In case the output string is the same as the input string
+ 	     no new string has been allocated.  */
+ 	  if (p != name)
+-	    {
+-	      name = strdupa (p);
+-	      free (p);
+-	    }
++	    malloc_name = true;
+ 	}
+ #endif
+ 
+@@ -441,23 +449,59 @@ gaih_inet (const char *name, const struc
+ 	      at->family = AF_INET6;
+ 	    }
+ 	  else
+-	    return -EAI_ADDRFAMILY;
++	    {
++	      result = -EAI_ADDRFAMILY;
++	      goto free_and_return;
++	    }
+ 
+ 	  if (req->ai_flags & AI_CANONNAME)
+ 	    canon = name;
+ 	}
+       else if (at->family == AF_UNSPEC)
+ 	{
+-	  char *namebuf = (char *) name;
+ 	  char *scope_delim = strchr (name, SCOPE_DELIMITER);
++	  int e;
+ 
+-	  if (__builtin_expect (scope_delim != NULL, 0))
+-	    {
+-	      namebuf = alloca (scope_delim - name + 1);
+-	      *((char *) __mempcpy (namebuf, name, scope_delim - name)) = '\0';
+-	    }
++	  {
++	    bool malloc_namebuf = false;
++	    char *namebuf = (char *) name;
++
++	    if (__builtin_expect (scope_delim != NULL, 0))
++	      {
++		if (malloc_name)
++		  *scope_delim = '\0';
++		else
++		  {
++		    if (__libc_use_alloca (alloca_used
++					   + scope_delim - name + 1))
++		      {
++			namebuf = alloca_account (scope_delim - name + 1,
++						  alloca_used);
++			*((char *) __mempcpy (namebuf, name,
++					      scope_delim - name)) = '\0';
++		      }
++		    else
++		      {
++			namebuf = strndup (name, scope_delim - name);
++			if (namebuf == NULL)
++			  {
++			    assert (!malloc_name);
++			    return -EAI_MEMORY;
++			  }
++			malloc_namebuf = true;
++		      }
++		  }
++	      }
+ 
+-	  if (inet_pton (AF_INET6, namebuf, at->addr) > 0)
++	    e = inet_pton (AF_INET6, namebuf, at->addr);
++
++	    if (malloc_namebuf)
++	      free (namebuf);
++	    else if (scope_delim != NULL && malloc_name)
++	      /* Undo what we did above.  */
++	      *scope_delim = SCOPE_DELIMITER;
++	  }
++	  if (e > 0)
+ 	    {
+ 	      if (req->ai_family == AF_UNSPEC || req->ai_family == AF_INET6)
+ 		at->family = AF_INET6;
+@@ -468,7 +512,10 @@ gaih_inet (const char *name, const struc
+ 		  at->family = AF_INET;
+ 		}
+ 	      else
+-		return -EAI_ADDRFAMILY;
++		{
++		  result = -EAI_ADDRFAMILY;
++		  goto free_and_return;
++		}
+ 
+ 	      if (scope_delim != NULL)
+ 		{
+@@ -490,7 +537,10 @@ gaih_inet (const char *name, const struc
+ 		      at->scopeid = (uint32_t) strtoul (scope_delim + 1, &end,
+ 							10);
+ 		      if (*end != '\0')
+-			return GAIH_OKIFUNSPEC | -EAI_NONAME;
++			{
++			  result = GAIH_OKIFUNSPEC | -EAI_NONAME;
++			  goto free_and_return;
++			}
+ 		    }
+ 		}
+ 
+@@ -520,59 +570,80 @@ gaih_inet (const char *name, const struc
+ 	    {
+ 	      int family = req->ai_family;
+ 	      size_t tmpbuflen = 512;
+-	      char *tmpbuf = alloca (tmpbuflen);
++	      assert (tmpbuf == NULL);
++	      tmpbuf = alloca_account (tmpbuflen, alloca_used);
+ 	      int rc;
+ 	      struct hostent th;
+ 	      struct hostent *h;
+ 	      int herrno;
+ 
+-	    simple_again:
+ 	      while (1)
+ 		{
+-		  rc = __gethostbyname2_r (name, family, &th, tmpbuf,
++		  rc = __gethostbyname2_r (name, AF_INET, &th, tmpbuf,
+ 					   tmpbuflen, &h, &herrno);
+ 		  if (rc != ERANGE || herrno != NETDB_INTERNAL)
+ 		    break;
+-		  tmpbuf = extend_alloca (tmpbuf, tmpbuflen, 2 * tmpbuflen);
++
++		  if (!malloc_tmpbuf
++		      && __libc_use_alloca (alloca_used + 2 * tmpbuflen))
++		    tmpbuf = extend_alloca_account (tmpbuf, tmpbuflen,
++						    2 * tmpbuflen,
++						    alloca_used);
++		  else
++		    {
++		      char *newp = realloc (malloc_tmpbuf ? tmpbuf : NULL,
++					    2 * tmpbuflen);
++		      if (newp == NULL)
++			{
++			  result = -EAI_MEMORY;
++			  goto free_and_return;
++			}
++		      tmpbuf = newp;
++		      malloc_tmpbuf = true;
++		      tmpbuflen = 2 * tmpbuflen;
++		    }
+ 		}
+ 
+ 	      if (rc == 0)
+ 		{
+-		  if (h == NULL)
++		  if (h != NULL)
+ 		    {
+-		      if (req->ai_family == AF_INET6
+-			  && (req->ai_flags & AI_V4MAPPED)
+-			  && family == AF_INET6)
++		      int i;
++		      /* We found data, count the number of addresses.  */
++		      for (i = 0; h->h_addr_list[i]; ++i)
++			;
++		      if (i > 0 && *pat != NULL)
++			--i;
++
++		      if (__libc_use_alloca (alloca_used
++					     + i * sizeof (struct gaih_addrtuple)))
++			addrmem = alloca_account (i * sizeof (struct gaih_addrtuple),
++						  alloca_used);
++		      else
+ 			{
+-			  /* Try again, this time looking for IPv4
+-			     addresses.  */
+-			  family = AF_INET;
+-			  goto simple_again;
++			  addrmem = malloc (i
++					    * sizeof (struct gaih_addrtuple));
++			  if (addrmem == NULL)
++			{
++			      result = -EAI_MEMORY;
++			      goto free_and_return;
+ 			}
++			  malloc_addrmem = true;
+ 		    }
+-		  else
+-		    {
+-		      /* We found data, now convert it into the list.  */
+-		      for (int i = 0; h->h_addr_list[i]; ++i)
++
++		      /* Now convert it into the list.  */
++		      struct gaih_addrtuple *addrfree = addrmem;
++		      for (i = 0; h->h_addr_list[i]; ++i)
+ 			{
+ 			  if (*pat == NULL)
+ 			    {
+-			      *pat = __alloca (sizeof (struct gaih_addrtuple));
++			      *pat = addrfree++;
+ 			      (*pat)->scopeid = 0;
+ 			    }
+ 			  (*pat)->next = NULL;
+-			  (*pat)->family = req->ai_family;
+-			  if (family == req->ai_family)
++			  (*pat)->family = AF_INET;
+ 			    memcpy ((*pat)->addr, h->h_addr_list[i],
+ 				    h->h_length);
+-			  else
+-			    {
+-			      uint32_t *addr = (uint32_t *) (*pat)->addr;
+-			      addr[3] = *(uint32_t *) h->h_addr_list[i];
+-			      addr[2] = htonl (0xffff);
+-			      addr[1] = 0;
+-			      addr[0] = 0;
+-			    }
+ 			  pat = &((*pat)->next);
+ 			}
+ 		    }
+@@ -582,15 +653,16 @@ gaih_inet (const char *name, const struc
+ 		  if (herrno == NETDB_INTERNAL)
+ 		    {
+ 		      __set_h_errno (herrno);
+-		      return -EAI_SYSTEM;
+-		    }
+-		  if (herrno == TRY_AGAIN)
+-		    {
+-		      return -EAI_AGAIN;
++		      result = -EAI_SYSTEM;
+ 		    }
++		  else if (herrno == TRY_AGAIN)
++		    result = -EAI_AGAIN;
++		  else
+ 		  /* We made requests but they turned out no data.
+ 		     The name is known, though.  */
+-		  return GAIH_OKIFUNSPEC | -EAI_NODATA;
++		    result = GAIH_OKIFUNSPEC | -EAI_NODATA;
++
++		  goto free_and_return;
+ 		}
+ 
+ 	      goto process_list;
+@@ -613,21 +685,56 @@ gaih_inet (const char *name, const struc
+ 		  bool added_canon = (req->ai_flags & AI_CANONNAME) == 0;
+ 		  char *addrs = air->addrs;
+ 
++		  if (__libc_use_alloca (alloca_used
++					 + air->naddrs * sizeof (struct gaih_addrtuple)))
++		    addrmem = alloca_account (air->naddrs
++					      * sizeof (struct gaih_addrtuple),
++					      alloca_used);
++		  else
++		    {
++		      addrmem = malloc (air->naddrs
++					* sizeof (struct gaih_addrtuple));
++		      if (addrmem == NULL)
++			{
++			  result = -EAI_MEMORY;
++			  goto free_and_return;
++			}
++		      malloc_addrmem = true;
++		    }
++
++		  struct gaih_addrtuple *addrfree = addrmem;
+ 		  for (int i = 0; i < air->naddrs; ++i)
+ 		    {
+ 		      socklen_t size = (air->family[i] == AF_INET
+ 					? INADDRSZ : IN6ADDRSZ);
+ 		      if (*pat == NULL)
+ 			{
+-			  *pat = __alloca (sizeof (struct gaih_addrtuple));
++			  *pat = addrfree++;
+ 			  (*pat)->scopeid = 0;
+ 			}
+ 		      uint32_t *pataddr = (*pat)->addr;
+ 		      (*pat)->next = NULL;
+ 		      if (added_canon || air->canon == NULL)
+ 			(*pat)->name = NULL;
+-		      else
+-			canon = (*pat)->name = strdupa (air->canon);
++		      else if (canonbuf == NULL)
++			{
++			  size_t canonlen = strlen (air->canon) + 1;
++			  if ((req->ai_flags & AI_CANONIDN) != 0
++			      && __libc_use_alloca (alloca_used + canonlen))
++			    canonbuf = alloca_account (canonlen, alloca_used);
++			  else
++			    {
++			      canonbuf = malloc (canonlen);
++			      if (canonbuf == NULL)
++				{
++				  result = -EAI_MEMORY;
++				  goto free_and_return;
++				}
++			      malloc_canonbuf = true;
++			    }
++			  canon = (*pat)->name = memcpy (canonbuf, air->canon,
++							 canonlen);
++			}
+ 
+ 		      if (air->family[i] == AF_INET
+ 			  && req->ai_family == AF_INET6
+@@ -657,20 +764,26 @@ gaih_inet (const char *name, const struc
+ 		  free (air);
+ 
+ 		  if (at->family == AF_UNSPEC)
+-		    return GAIH_OKIFUNSPEC | -EAI_NONAME;
++		    {
++		      result = GAIH_OKIFUNSPEC | -EAI_NONAME;
++		      goto free_and_return;
++		    }
+ 
+ 		  goto process_list;
+ 		}
+ 	      else if (err == 0)
+ 		/* The database contains a negative entry.  */
+-		return 0;
++		goto free_and_return;
+ 	      else if (__nss_not_use_nscd_hosts == 0)
+ 		{
+ 		  if (herrno == NETDB_INTERNAL && errno == ENOMEM)
+-		    return -EAI_MEMORY;
+-		  if (herrno == TRY_AGAIN)
+-		    return -EAI_AGAIN;
+-		  return -EAI_SYSTEM;
++		    result = -EAI_MEMORY;
++		  else if (herrno == TRY_AGAIN)
++		    result = -EAI_AGAIN;
++		  else
++		    result = -EAI_SYSTEM;
++
++		  goto free_and_return;
+ 		}
+ 	    }
+ #endif
+@@ -699,7 +812,19 @@ gaih_inet (const char *name, const struc
+ 	  _res.options &= ~RES_USE_INET6;
+ 
+ 	  size_t tmpbuflen = 1024;
+-	  char *tmpbuf = alloca (tmpbuflen);
++	  malloc_tmpbuf = !__libc_use_alloca (alloca_used + tmpbuflen);
++	  assert (tmpbuf == NULL);
++	  if (!malloc_tmpbuf)
++	    tmpbuf = alloca_account (tmpbuflen, alloca_used);
++	  else
++	    {
++	      tmpbuf = malloc (tmpbuflen);
++	      if (tmpbuf == NULL)
++		{
++		  result = -EAI_MEMORY;
++		  goto free_and_return;
++		}
++	    }
+ 
+ 	  while (!no_more)
+ 	    {
+@@ -728,8 +853,25 @@ gaih_inet (const char *name, const struc
+ 			    no_data = herrno == NO_DATA;
+ 			  break;
+ 			}
+-		      tmpbuf = extend_alloca (tmpbuf,
+-					      tmpbuflen, 2 * tmpbuflen);
++
++		      if (!malloc_tmpbuf
++			  && __libc_use_alloca (alloca_used + 2 * tmpbuflen))
++			tmpbuf = extend_alloca_account (tmpbuf, tmpbuflen,
++							2 * tmpbuflen,
++							alloca_used);
++		      else
++			{
++			  char *newp = realloc (malloc_tmpbuf ? tmpbuf : NULL,
++						2 * tmpbuflen);
++			  if (newp == NULL)
++			    {
++			      result = -EAI_MEMORY;
++			      goto free_and_return;
++			    }
++			  tmpbuf = newp;
++			  malloc_tmpbuf = true;
++			  tmpbuflen = 2 * tmpbuflen;
++			}
+ 		    }
+ 
+ 		  if (status == NSS_STATUS_SUCCESS)
+@@ -832,18 +974,40 @@ gaih_inet (const char *name, const struc
+ 			      if (cfct != NULL)
+ 				{
+ 				  const size_t max_fqdn_len = 256;
+-				  char *buf = alloca (max_fqdn_len);
++				  if ((req->ai_flags & AI_CANONIDN) != 0
++				      && __libc_use_alloca (alloca_used
++							    + max_fqdn_len))
++				    canonbuf = alloca_account (max_fqdn_len,
++							       alloca_used);
++				  else
++				    {
++				      canonbuf = malloc (max_fqdn_len);
++				      if (canonbuf == NULL)
++					{
++					  result = -EAI_MEMORY;
++					  goto free_and_return;
++					}
++				      malloc_canonbuf = true;
++				    }
+ 				  char *s;
+ 
+ 				  if (DL_CALL_FCT (cfct, (at->name ?: name,
+-							  buf, max_fqdn_len,
++							  canonbuf,
++							  max_fqdn_len,
+ 							  &s, &rc, &herrno))
+ 				      == NSS_STATUS_SUCCESS)
+ 				    canon = s;
+ 				  else
+-				    /* Set to name now to avoid using
+-				       gethostbyaddr.  */
+-				    canon = name;
++				    {
++				      /* Set to name now to avoid using
++					 gethostbyaddr.  */
++				      if (malloc_canonbuf)
++					{
++					  free (canonbuf);
++					  malloc_canonbuf = false;
++					}
++				      canon = name;
++				    }
+ 				}
+ 			    }
+ 			  status = NSS_STATUS_SUCCESS;
+@@ -878,22 +1042,27 @@ gaih_inet (const char *name, const struc
+ 	    {
+ 	      /* If both requests timed out report this.  */
+ 	      if (no_data == EAI_AGAIN && no_inet6_data == EAI_AGAIN)
+-		return -EAI_AGAIN;
++		result = -EAI_AGAIN;
++	      else
++		/* We made requests but they turned out no data.  The name
++		   is known, though.  */
++		result = GAIH_OKIFUNSPEC | -EAI_NODATA;
+ 
+-	      /* We made requests but they turned out no data.  The name
+-		 is known, though.  */
+-	      return GAIH_OKIFUNSPEC | -EAI_NODATA;
++	      goto free_and_return;
+ 	    }
+ 	}
+ 
+     process_list:
+       if (at->family == AF_UNSPEC)
+-	return GAIH_OKIFUNSPEC | -EAI_NONAME;
++	{
++	  result = GAIH_OKIFUNSPEC | -EAI_NONAME;
++	  goto free_and_return;
++	}
+     }
+   else
+     {
+       struct gaih_addrtuple *atr;
+-      atr = at = __alloca (sizeof (struct gaih_addrtuple));
++      atr = at = alloca_account (sizeof (struct gaih_addrtuple), alloca_used);
+       memset (at, '\0', sizeof (struct gaih_addrtuple));
+ 
+       if (req->ai_family == AF_UNSPEC)
+@@ -932,6 +1101,9 @@ gaih_inet (const char *name, const struc
+ 	/* Only the first entry gets the canonical name.  */
+ 	if (at2 == at && (req->ai_flags & AI_CANONNAME) != 0)
+ 	  {
++	    char *tmpbuf2 = NULL;
++	    bool malloc_tmpbuf2 = false;
++
+ 	    if (canon == NULL)
+ 	      {
+ 		/* If the canonical name cannot be determined, use
+@@ -952,11 +1124,16 @@ gaih_inet (const char *name, const struc
+ 		int rc = __idna_to_unicode_lzlz (canon, &out, idn_flags);
+ 		if (rc != IDNA_SUCCESS)
+ 		  {
++		    if (malloc_tmpbuf2)
++		      free (tmpbuf2);
++
+ 		    if (rc == IDNA_MALLOC_ERROR)
+-		      return -EAI_MEMORY;
+-		    if (rc == IDNA_DLOPEN_ERROR)
+-		      return -EAI_SYSTEM;
+-		    return -EAI_IDN_ENCODE;
++		      result = -EAI_MEMORY;
++		    else if (rc == IDNA_DLOPEN_ERROR)
++		      result = -EAI_SYSTEM;
++		    else
++		      result = -EAI_IDN_ENCODE;
++		    goto free_and_return;
+ 		  }
+ 		/* In case the output string is the same as the input
+ 		   string no new string has been allocated and we
+@@ -970,10 +1147,25 @@ gaih_inet (const char *name, const struc
+ #ifdef HAVE_LIBIDN
+ 	      make_copy:
+ #endif
+-		canon = strdup (canon);
+-		if (canon == NULL)
+-		  return -EAI_MEMORY;
++		if (malloc_canonbuf)
++		  /* We already allocated the string using malloc.  */
++		  malloc_canonbuf = false;
++		else
++		  {
++		    canon = strdup (canon);
++		    if (canon == NULL)
++		      {
++			if (malloc_tmpbuf2)
++			  free (tmpbuf2);
++
++			result = -EAI_MEMORY;
++			goto free_and_return;
++		      }
++		  }
+ 	      }
++
++	    if (malloc_tmpbuf2)
++	      free (tmpbuf2);
+ 	  }
+ 
+ 	family = at2->family;
+@@ -999,7 +1191,8 @@ gaih_inet (const char *name, const struc
+ 	    if (ai == NULL)
+ 	      {
+ 		free ((char *) canon);
+-		return -EAI_MEMORY;
++		result = -EAI_MEMORY;
++		goto free_and_return;
+ 	      }
+ 
+ 	    ai->ai_flags = req->ai_flags;
+@@ -1052,7 +1245,18 @@ gaih_inet (const char *name, const struc
+ 	at2 = at2->next;
+       }
+   }
+-  return 0;
++
++ free_and_return:
++  if (malloc_name)
++    free ((char *) name);
++  if (malloc_addrmem)
++    free (addrmem);
++  if (malloc_canonbuf)
++    free (canonbuf);
++  if (malloc_tmpbuf)
++    free (tmpbuf);
++
++  return result;
+ }
+ 
+ 
diff --git a/SOURCES/glibc-rh797094-2.patch b/SOURCES/glibc-rh797094-2.patch
new file mode 100644
index 0000000..5aa9084
--- /dev/null
+++ b/SOURCES/glibc-rh797094-2.patch
@@ -0,0 +1,862 @@
+From: Ulrich Drepper <drepper@gmail.com>
+Date: Mon, 23 May 2011 03:04:16 +0000 (-0400)
+Subject: Add a few more alloca size checks
+X-Git-Tag: glibc-2.14~41
+X-Git-Url: http://sourceware.org/git/?p=glibc.git;a=commitdiff_plain;h=f2962a71959fd254a7a223437ca4b63b9e81130c
+
+Add a few more alloca size checks
+---
+
+ 2011-05-22  Ulrich Drepper  <drepper@gmail.com>
+ 
+	[BZ #12671]
+	* nis/nss_nis/nis-alias.c (_nss_nis_getaliasbyname_r): Use malloc in
+	some situations.
+	* nscd/nscd_getserv_r.c (nscd_getserv_r): Likewise.
+	* posix/glob.c (glob_in_dir): Take additional parameter alloca_used.
+	add in in __libc_use_alloca calls.  Adjust callers.
+	(glob): Use malloc in some situations.
+diff --git a/nis/nss_nis/nis-alias.c b/nis/nss_nis/nis-alias.c
+index 9286e36..cfe4097 100644
+--- a/nis/nss_nis/nis-alias.c
++++ b/nis/nss_nis/nis-alias.c
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 1996-2002, 2003, 2006 Free Software Foundation, Inc.
++/* Copyright (C) 1996-2002, 2003, 2006, 2011 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+    Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
+ 
+@@ -142,10 +142,10 @@ internal_nis_getaliasent_r (struct aliasent *alias, char *buffer,
+       int yperr;
+ 
+       if (new_start)
+-        yperr = yp_first (domain, "mail.aliases", &outkey, &keylen, &result,
++	yperr = yp_first (domain, "mail.aliases", &outkey, &keylen, &result,
+ 			  &len);
+       else
+-        yperr = yp_next (domain, "mail.aliases", oldkey, oldkeylen, &outkey,
++	yperr = yp_next (domain, "mail.aliases", oldkey, oldkeylen, &outkey,
+ 			 &keylen, &result, &len);
+ 
+       if (__builtin_expect (yperr != YPERR_SUCCESS, 0))
+@@ -153,20 +153,20 @@ internal_nis_getaliasent_r (struct aliasent *alias, char *buffer,
+ 	  enum nss_status retval = yperr2nss (yperr);
+ 
+ 	  if (retval == NSS_STATUS_TRYAGAIN)
+-            *errnop = errno;
+-          return retval;
+-        }
++	    *errnop = errno;
++	  return retval;
++	}
+ 
+       if (__builtin_expect ((size_t) (len + 1) > buflen, 0))
+-        {
++	{
+ 	  free (result);
+-          *errnop = ERANGE;
+-          return NSS_STATUS_TRYAGAIN;
+-        }
++	  *errnop = ERANGE;
++	  return NSS_STATUS_TRYAGAIN;
++	}
+       char *p = strncpy (buffer, result, len);
+       buffer[len] = '\0';
+       while (isspace (*p))
+-        ++p;
++	++p;
+       free (result);
+ 
+       parse_res = _nss_nis_parse_aliasent (outkey, p, alias, buffer,
+@@ -213,13 +213,25 @@ _nss_nis_getaliasbyname_r (const char *name, struct aliasent *alias,
+       return NSS_STATUS_UNAVAIL;
+     }
+ 
+-  size_t namlen = strlen (name);
+-  char name2[namlen + 1];
+-
+   char *domain;
+   if (__builtin_expect (yp_get_default_domain (&domain), 0))
+     return NSS_STATUS_UNAVAIL;
+ 
++  size_t namlen = strlen (name);
++  char *name2;
++  int use_alloca = __libc_use_alloca (namlen + 1);
++  if (use_alloca)
++    name2 = __alloca (namlen + 1);
++  else
++    {
++      name2 = malloc (namlen + 1);
++      if (name2 == NULL)
++	{
++	  *errnop = ENOMEM;
++	  return NSS_STATUS_TRYAGAIN;
++	}
++    }
++
+   /* Convert name to lowercase.  */
+   size_t i;
+   for (i = 0; i < namlen; ++i)
+@@ -230,6 +242,9 @@ _nss_nis_getaliasbyname_r (const char *name, struct aliasent *alias,
+   int len;
+   int yperr = yp_match (domain, "mail.aliases", name2, namlen, &result, &len);
+ 
++  if (!use_alloca)
++    free (name2);
++
+   if (__builtin_expect (yperr != YPERR_SUCCESS, 0))
+     {
+       enum nss_status retval = yperr2nss (yperr);
+diff --git a/nscd/nscd_getserv_r.c b/nscd/nscd_getserv_r.c
+index dce4165..de96a57 100644
+--- a/nscd/nscd_getserv_r.c
++++ b/nscd/nscd_getserv_r.c
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 2007, 2009 Free Software Foundation, Inc.
++/* Copyright (C) 2007, 2009, 2011 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+    Contributed by Ulrich Drepper <drepper@redhat.com>, 2007.
+ 
+@@ -17,6 +17,7 @@
+    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA.  */
+ 
++#include <assert.h>
+ #include <errno.h>
+ #include <string.h>
+ #include <not-cancel.h>
+@@ -80,6 +81,7 @@ nscd_getserv_r (const char *crit, size_t critlen, const char *proto,
+ {
+   int gc_cycle;
+   int nretries = 0;
++  size_t alloca_used = 0;
+ 
+   /* If the mapping is available, try to search there instead of
+      communicating with the nscd.  */
+@@ -88,13 +90,23 @@ nscd_getserv_r (const char *crit, size_t critlen, const char *proto,
+ 			       &gc_cycle);
+   size_t protolen = proto == NULL ? 0 : strlen (proto);
+   size_t keylen = critlen + 1 + protolen + 1;
+-  char *key = alloca (keylen);
++  int alloca_key = __libc_use_alloca (keylen);
++  char *key;
++  if (alloca_key)
++    key = alloca_account (keylen, alloca_used);
++  else
++    {
++      key = malloc (keylen);
++      if (key == NULL)
++	return -1;
++    }
+   memcpy (__mempcpy (__mempcpy (key, crit, critlen),
+ 		     "/", 1), proto ?: "", protolen + 1);
+ 
+  retry:;
+   const char *s_name = NULL;
+   const char *s_proto = NULL;
++  int alloca_aliases_len = 0;
+   const uint32_t *aliases_len = NULL;
+   const char *aliases_list = NULL;
+   int retval = -1;
+@@ -136,8 +148,22 @@ nscd_getserv_r (const char *crit, size_t critlen, const char *proto,
+ 	  if (((uintptr_t) aliases_len & (__alignof__ (*aliases_len) - 1))
+ 	      != 0)
+ 	    {
+-	      uint32_t *tmp = alloca (serv_resp.s_aliases_cnt
+-				      * sizeof (uint32_t));
++	      uint32_t *tmp;
++	      alloca_aliases_len
++		= __libc_use_alloca (alloca_used
++				     + (serv_resp.s_aliases_cnt
++					* sizeof (uint32_t)));
++	      if (alloca_aliases_len)
++		tmp = __alloca (serv_resp.s_aliases_cnt * sizeof (uint32_t));
++	      else
++		{
++		  tmp = malloc (serv_resp.s_aliases_cnt * sizeof (uint32_t));
++		  if (tmp == NULL)
++		    {
++		      retval = ENOMEM;
++		      goto out;
++		    }
++		}
+ 	      aliases_len = memcpy (tmp, aliases_len,
+ 				    serv_resp.s_aliases_cnt
+ 				    * sizeof (uint32_t));
+@@ -217,8 +243,24 @@ nscd_getserv_r (const char *crit, size_t critlen, const char *proto,
+ 
+ 	  if (serv_resp.s_aliases_cnt > 0)
+ 	    {
+-	      aliases_len = alloca (serv_resp.s_aliases_cnt
+-				    * sizeof (uint32_t));
++	      assert (alloca_aliases_len == 0);
++	      alloca_aliases_len
++		= __libc_use_alloca (alloca_used
++				     + (serv_resp.s_aliases_cnt
++					* sizeof (uint32_t)));
++	      if (alloca_aliases_len)
++		aliases_len = alloca (serv_resp.s_aliases_cnt
++				      * sizeof (uint32_t));
++	      else
++		{
++		  aliases_len = malloc (serv_resp.s_aliases_cnt
++					* sizeof (uint32_t));
++		  if (aliases_len == NULL)
++		    {
++		      retval = ENOMEM;
++		      goto out_close;
++		    }
++		}
+ 	      vec[n].iov_base = (void *) aliases_len;
+ 	      vec[n].iov_len = serv_resp.s_aliases_cnt * sizeof (uint32_t);
+ 
+@@ -329,5 +371,10 @@ nscd_getserv_r (const char *crit, size_t critlen, const char *proto,
+ 	goto retry;
+     }
+ 
++  if (!alloca_aliases_len)
++    free ((void *) aliases_len);
++  if (!alloca_key)
++    free (key);
++
+   return retval;
+ }
+diff --git a/posix/glob.c b/posix/glob.c
+index 6df083a..79b6e50 100644
+--- a/posix/glob.c
++++ b/posix/glob.c
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 1991-2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010
++/* Copyright (C) 1991-2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010, 2011
+    Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+ 
+@@ -199,7 +199,7 @@ static const char *next_brace_sub (const char *begin, int flags) __THROW;
+ 
+ static int glob_in_dir (const char *pattern, const char *directory,
+ 			int flags, int (*errfunc) (const char *, int),
+-			glob_t *pglob);
++			glob_t *pglob, size_t alloca_used);
+ extern int __glob_pattern_type (const char *pattern, int quote)
+     attribute_hidden;
+ 
+@@ -253,13 +253,18 @@ glob (pattern, flags, errfunc, pglob)
+      glob_t *pglob;
+ {
+   const char *filename;
+-  const char *dirname;
++  char *dirname = NULL;
+   size_t dirlen;
+   int status;
+   size_t oldcount;
+   int meta;
+   int dirname_modified;
++  int malloc_dirname = 0;
+   glob_t dirs;
++  int retval = 0;
++#ifdef _LIBC
++  size_t alloca_used = 0;
++#endif
+ 
+   if (pattern == NULL || pglob == NULL || (flags & ~__GLOB_FLAGS) != 0)
+     {
+@@ -308,20 +313,26 @@ glob (pattern, flags, errfunc, pglob)
+ 	  const char *next;
+ 	  const char *rest;
+ 	  size_t rest_len;
+-#ifdef __GNUC__
+-	  char onealt[strlen (pattern) - 1];
+-#else
+-	  char *onealt = (char *) malloc (strlen (pattern) - 1);
+-	  if (onealt == NULL)
++	  char *onealt;
++	  size_t pattern_len = strlen (pattern) - 1;
++#ifdef _LIBC
++	  int alloca_onealt = __libc_use_alloca (alloca_used + pattern_len);
++	  if (alloca_onealt)
++	    onealt = alloca_account (pattern_len, alloca_used);
++	  else
++#endif
+ 	    {
+-	      if (!(flags & GLOB_APPEND))
++	      onealt = (char *) malloc (pattern_len);
++	      if (onealt == NULL)
+ 		{
+-		  pglob->gl_pathc = 0;
+-		  pglob->gl_pathv = NULL;
++		  if (!(flags & GLOB_APPEND))
++		    {
++		      pglob->gl_pathc = 0;
++		      pglob->gl_pathv = NULL;
++		    }
++		  return GLOB_NOSPACE;
+ 		}
+-	      return GLOB_NOSPACE;
+ 	    }
+-#endif
+ 
+ 	  /* We know the prefix for all sub-patterns.  */
+ 	  alt_start = mempcpy (onealt, pattern, begin - pattern);
+@@ -332,9 +343,11 @@ glob (pattern, flags, errfunc, pglob)
+ 	  if (next == NULL)
+ 	    {
+ 	      /* It is an illegal expression.  */
+-#ifndef __GNUC__
+-	      free (onealt);
++	    illegal_brace:
++#ifdef _LIBC
++	      if (__builtin_expect (!alloca_onealt, 0))
+ #endif
++		free (onealt);
+ 	      return glob (pattern, flags & ~GLOB_BRACE, errfunc, pglob);
+ 	    }
+ 
+@@ -344,13 +357,8 @@ glob (pattern, flags, errfunc, pglob)
+ 	    {
+ 	      rest = next_brace_sub (rest + 1, flags);
+ 	      if (rest == NULL)
+-		{
+-		  /* It is an illegal expression.  */
+-#ifndef __GNUC__
+-		  free (onealt);
+-#endif
+-		  return glob (pattern, flags & ~GLOB_BRACE, errfunc, pglob);
+-		}
++		/* It is an illegal expression.  */
++		goto illegal_brace;
+ 	    }
+ 	  /* Please note that we now can be sure the brace expression
+ 	     is well-formed.  */
+@@ -386,9 +394,10 @@ glob (pattern, flags, errfunc, pglob)
+ 	      /* If we got an error, return it.  */
+ 	      if (result && result != GLOB_NOMATCH)
+ 		{
+-#ifndef __GNUC__
+-		  free (onealt);
++#ifdef _LIBC
++		  if (__builtin_expect (!alloca_onealt, 0))
+ #endif
++		    free (onealt);
+ 		  if (!(flags & GLOB_APPEND))
+ 		    {
+ 		      globfree (pglob);
+@@ -406,9 +415,10 @@ glob (pattern, flags, errfunc, pglob)
+ 	      assert (next != NULL);
+ 	    }
+ 
+-#ifndef __GNUC__
+-	  free (onealt);
++#ifdef _LIBC
++	  if (__builtin_expect (!alloca_onealt, 0))
+ #endif
++	    free (onealt);
+ 
+ 	  if (pglob->gl_pathc != firstc)
+ 	    /* We found some entries.  */
+@@ -455,7 +465,7 @@ glob (pattern, flags, errfunc, pglob)
+ 	 case is nothing but a notation for a directory.  */
+       if ((flags & (GLOB_TILDE|GLOB_TILDE_CHECK)) && pattern[0] == '~')
+ 	{
+-	  dirname = pattern;
++	  dirname = (char *) pattern;
+ 	  dirlen = strlen (pattern);
+ 
+ 	  /* Set FILENAME to NULL as a special flag.  This is ugly but
+@@ -473,9 +483,9 @@ glob (pattern, flags, errfunc, pglob)
+ 
+ 	  filename = pattern;
+ #ifdef _AMIGA
+-	  dirname = "";
++	  dirname = (char *) "";
+ #else
+-	  dirname = ".";
++	  dirname = (char *) ".";
+ #endif
+ 	  dirlen = 0;
+ 	}
+@@ -485,7 +495,7 @@ glob (pattern, flags, errfunc, pglob)
+ 	       && (flags & GLOB_NOESCAPE) == 0))
+     {
+       /* "/pattern" or "\\/pattern".  */
+-      dirname = "/";
++      dirname = (char *) "/";
+       dirlen = 1;
+       ++filename;
+     }
+@@ -511,7 +521,17 @@ glob (pattern, flags, errfunc, pglob)
+ 	     from "d:/", since "d:" and "d:/" are not the same.*/
+ 	}
+ #endif
+-      newp = (char *) __alloca (dirlen + 1);
++#ifdef _LIBC
++      if (__libc_use_alloca (alloca_used + dirlen + 1))
++	newp = alloca_account (dirlen + 1, alloca_used);
++      else
++#endif
++	{
++	  newp = malloc (dirlen + 1);
++	  if (newp == NULL)
++	    return GLOB_NOSPACE;
++	  malloc_dirname = 1;
++	}
+       *((char *) mempcpy (newp, pattern, dirlen)) = '\0';
+       dirname = newp;
+       ++filename;
+@@ -551,7 +571,8 @@ glob (pattern, flags, errfunc, pglob)
+ 	      oldcount = pglob->gl_pathc + pglob->gl_offs;
+ 	      goto no_matches;
+ 	    }
+-	  return val;
++	  retval = val;
++	  goto out;
+ 	}
+     }
+ 
+@@ -563,7 +584,8 @@ glob (pattern, flags, errfunc, pglob)
+ 	      && (dirname[2] == '\0' || dirname[2] == '/')))
+ 	{
+ 	  /* Look up home directory.  */
+-	  const char *home_dir = getenv ("HOME");
++	  char *home_dir = getenv ("HOME");
++	  int malloc_home_dir = 0;
+ # ifdef _AMIGA
+ 	  if (home_dir == NULL || home_dir[0] == '\0')
+ 	    home_dir = "SYS:";
+@@ -582,7 +604,7 @@ glob (pattern, flags, errfunc, pglob)
+ 		/* `sysconf' does not support _SC_LOGIN_NAME_MAX.  Try
+ 		   a moderate value.  */
+ 		buflen = 20;
+-	      name = (char *) __alloca (buflen);
++	      name = alloca_account (buflen, alloca_used);
+ 
+ 	      success = getlogin_r (name, buflen) == 0;
+ 	      if (success)
+@@ -592,6 +614,7 @@ glob (pattern, flags, errfunc, pglob)
+ 		  long int pwbuflen = GETPW_R_SIZE_MAX ();
+ 		  char *pwtmpbuf;
+ 		  struct passwd pwbuf;
++		  int malloc_pwtmpbuf = 0;
+ 		  int save = errno;
+ 
+ #    ifndef _LIBC
+@@ -600,7 +623,18 @@ glob (pattern, flags, errfunc, pglob)
+ 		       Try a moderate value.  */
+ 		    pwbuflen = 1024;
+ #    endif
+-		  pwtmpbuf = (char *) __alloca (pwbuflen);
++		  if (__libc_use_alloca (alloca_used + pwbuflen))
++		    pwtmpbuf = alloca_account (pwbuflen, alloca_used);
++		  else
++		    {
++		      pwtmpbuf = malloc (pwbuflen);
++		      if (pwtmpbuf == NULL)
++			{
++			  retval = GLOB_NOSPACE;
++			  goto out;
++			}
++		      malloc_pwtmpbuf = 1;
++		    }
+ 
+ 		  while (getpwnam_r (name, &pwbuf, pwtmpbuf, pwbuflen, &p)
+ 			 != 0)
+@@ -610,46 +644,115 @@ glob (pattern, flags, errfunc, pglob)
+ 			  p = NULL;
+ 			  break;
+ 			}
+-#    ifdef _LIBC
+-		      pwtmpbuf = extend_alloca (pwtmpbuf, pwbuflen,
++
++		      if (!malloc_pwtmpbuf
++			  && __libc_use_alloca (alloca_used
++						+ 2 * pwbuflen))
++			pwtmpbuf = extend_alloca_account (pwtmpbuf, pwbuflen,
++							  2 * pwbuflen,
++							  alloca_used);
++		      else
++			{
++			  char *newp = realloc (malloc_pwtmpbuf
++						? pwtmpbuf : NULL,
+ 						2 * pwbuflen);
+-#    else
+-		      pwbuflen *= 2;
+-		      pwtmpbuf = (char *) __alloca (pwbuflen);
+-#    endif
++			  if (newp == NULL)
++			    {
++			      if (__builtin_expect (malloc_pwtmpbuf, 0))
++				free (pwtmpbuf);
++			      retval = GLOB_NOSPACE;
++			      goto out;
++			    }
++			  pwtmpbuf = newp;
++			  pwbuflen = 2 * pwbuflen;
++			  malloc_pwtmpbuf = 1;
++			}
+ 		      __set_errno (save);
+ 		    }
+ #   else
+ 		  p = getpwnam (name);
+ #   endif
+ 		  if (p != NULL)
+-		    home_dir = p->pw_dir;
++		    {
++		      if (!malloc_pwtmpbuf)
++			home_dir = p->pw_dir;
++		      else
++			{
++			  size_t home_dir_len = strlen (p->pw_dir) + 1;
++			  if (__libc_use_alloca (alloca_used + home_dir_len))
++			    home_dir = alloca_account (home_dir_len,
++						       alloca_used);
++			  else
++			    {
++			      home_dir = malloc (home_dir_len);
++			      if (home_dir == NULL)
++				{
++				  free (pwtmpbuf);
++				  retval = GLOB_NOSPACE;
++				  goto out;
++				}
++			      malloc_home_dir = 1;
++			    }
++			  memcpy (home_dir, p->pw_dir, home_dir_len);
++
++			  free (pwtmpbuf);
++			}
++		    }
+ 		}
+ 	    }
+ 	  if (home_dir == NULL || home_dir[0] == '\0')
+ 	    {
+ 	      if (flags & GLOB_TILDE_CHECK)
+-		return GLOB_NOMATCH;
++		{
++		  if (__builtin_expect (malloc_home_dir, 0))
++		    free (home_dir);
++		  retval = GLOB_NOMATCH;
++		  goto out;
++		}
+ 	      else
+-		home_dir = "~"; /* No luck.  */
++		home_dir = (char *) "~"; /* No luck.  */
+ 	    }
+ #  endif /* WINDOWS32 */
+ # endif
+ 	  /* Now construct the full directory.  */
+ 	  if (dirname[1] == '\0')
+ 	    {
++	      if (__builtin_expect (malloc_dirname, 0))
++		free (dirname);
++
+ 	      dirname = home_dir;
+ 	      dirlen = strlen (dirname);
++	      malloc_dirname = malloc_home_dir;
+ 	    }
+ 	  else
+ 	    {
+ 	      char *newp;
+ 	      size_t home_len = strlen (home_dir);
+-	      newp = (char *) __alloca (home_len + dirlen);
++	      int use_alloca = __libc_use_alloca (alloca_used
++						  + home_len + dirlen);
++	      if (use_alloca)
++		newp = alloca_account (home_len + dirlen, alloca_used);
++	      else
++		{
++		  newp = malloc (home_len + dirlen);
++		  if (newp == NULL)
++		    {
++		      if (__builtin_expect (malloc_home_dir, 0))
++			free (home_dir);
++		      retval = GLOB_NOSPACE;
++		      goto out;
++		    }
++		}
++
+ 	      mempcpy (mempcpy (newp, home_dir, home_len),
+ 		       &dirname[1], dirlen);
++
++	      if (__builtin_expect (malloc_dirname, 0))
++		free (dirname);
++
+ 	      dirname = newp;
+ 	      dirlen += home_len - 1;
++	      malloc_dirname = !use_alloca;
+ 	    }
+ 	  dirname_modified = 1;
+ 	}
+@@ -657,7 +760,8 @@ glob (pattern, flags, errfunc, pglob)
+       else
+ 	{
+ 	  char *end_name = strchr (dirname, '/');
+-	  const char *user_name;
++	  char *user_name;
++	  int malloc_user_name = 0;
+ 	  const char *home_dir;
+ 	  char *unescape = NULL;
+ 
+@@ -677,7 +781,18 @@ glob (pattern, flags, errfunc, pglob)
+ 	  else
+ 	    {
+ 	      char *newp;
+-	      newp = (char *) __alloca (end_name - dirname);
++	      if (__libc_use_alloca (alloca_used + (end_name - dirname)))
++		newp = alloca_account (end_name - dirname, alloca_used);
++	      else
++		{
++		  newp = malloc (end_name - dirname);
++		  if (newp == NULL)
++		    {
++		      retval = GLOB_NOSPACE;
++		      goto out;
++		    }
++		  malloc_user_name = 1;
++		}
+ 	      if (unescape != NULL)
+ 		{
+ 		  char *p = mempcpy (newp, dirname + 1,
+@@ -714,6 +829,7 @@ glob (pattern, flags, errfunc, pglob)
+ #  if defined HAVE_GETPWNAM_R || defined _LIBC
+ 	    long int buflen = GETPW_R_SIZE_MAX ();
+ 	    char *pwtmpbuf;
++	    int malloc_pwtmpbuf = 0;
+ 	    struct passwd pwbuf;
+ 	    int save = errno;
+ 
+@@ -723,7 +839,21 @@ glob (pattern, flags, errfunc, pglob)
+ 		 moderate value.  */
+ 	      buflen = 1024;
+ #   endif
+-	    pwtmpbuf = (char *) __alloca (buflen);
++	    if (__libc_use_alloca (alloca_used + buflen))
++	      pwtmpbuf = alloca_account (buflen, alloca_used);
++	    else
++	      {
++		pwtmpbuf = malloc (buflen);
++		if (pwtmpbuf == NULL)
++		  {
++		  nomem_getpw:
++		    if (__builtin_expect (malloc_user_name, 0))
++		      free (user_name);
++		    retval = GLOB_NOSPACE;
++		    goto out;
++		  }
++		malloc_pwtmpbuf = 1;
++	      }
+ 
+ 	    while (getpwnam_r (user_name, &pwbuf, pwtmpbuf, buflen, &p) != 0)
+ 	      {
+@@ -732,40 +862,77 @@ glob (pattern, flags, errfunc, pglob)
+ 		    p = NULL;
+ 		    break;
+ 		  }
+-#   ifdef _LIBC
+-		pwtmpbuf = extend_alloca (pwtmpbuf, buflen, 2 * buflen);
+-#   else
+-		buflen *= 2;
+-		pwtmpbuf = __alloca (buflen);
+-#   endif
++		if (!malloc_pwtmpbuf
++		    && __libc_use_alloca (alloca_used + 2 * buflen))
++		  pwtmpbuf = extend_alloca_account (pwtmpbuf, buflen,
++						    2 * buflen, alloca_used);
++		else
++		  {
++		    char *newp = realloc (malloc_pwtmpbuf ? pwtmpbuf : NULL,
++					  2 * buflen);
++		    if (newp == NULL)
++		      {
++			if (__builtin_expect (malloc_pwtmpbuf, 0))
++			  free (pwtmpbuf);
++			goto nomem_getpw;
++		      }
++		    pwtmpbuf = newp;
++		    malloc_pwtmpbuf = 1;
++		  }
+ 		__set_errno (save);
+ 	      }
+ #  else
+ 	    p = getpwnam (user_name);
+ #  endif
++
++	    if (__builtin_expect (malloc_user_name, 0))
++	      free (user_name);
++
++	    /* If we found a home directory use this.  */
+ 	    if (p != NULL)
+-	      home_dir = p->pw_dir;
++	      {
++		size_t home_len = strlen (p->pw_dir);
++		size_t rest_len = end_name == NULL ? 0 : strlen (end_name);
++
++		if (__builtin_expect (malloc_dirname, 0))
++		  free (dirname);
++		malloc_dirname = 0;
++
++		if (__libc_use_alloca (alloca_used + home_len + rest_len + 1))
++		  dirname = alloca_account (home_len + rest_len + 1,
++					    alloca_used);
++		else
++		  {
++		    dirname = malloc (home_len + rest_len + 1);
++		    if (dirname == NULL)
++		      {
++			if (__builtin_expect (malloc_pwtmpbuf, 0))
++			  free (pwtmpbuf);
++			retval = GLOB_NOSPACE;
++			goto out;
++		      }
++		    malloc_dirname = 1;
++		  }
++		*((char *) mempcpy (mempcpy (dirname, p->pw_dir, home_len),
++				    end_name, rest_len)) = '\0';
++
++		dirlen = home_len + rest_len;
++		dirname_modified = 1;
++
++		if (__builtin_expect (malloc_pwtmpbuf, 0))
++		  free (pwtmpbuf);
++	      }
+ 	    else
+-	      home_dir = NULL;
++	      {
++		if (__builtin_expect (malloc_pwtmpbuf, 0))
++		  free (pwtmpbuf);
++
++		if (flags & GLOB_TILDE_CHECK)
++		  /* We have to regard it as an error if we cannot find the
++		     home directory.  */
++		  return GLOB_NOMATCH;
++	      }
+ 	  }
+-	  /* If we found a home directory use this.  */
+-	  if (home_dir != NULL)
+-	    {
+-	      char *newp;
+-	      size_t home_len = strlen (home_dir);
+-	      size_t rest_len = end_name == NULL ? 0 : strlen (end_name);
+-	      newp = (char *) __alloca (home_len + rest_len + 1);
+-	      *((char *) mempcpy (mempcpy (newp, home_dir, home_len),
+-				  end_name, rest_len)) = '\0';
+-	      dirname = newp;
+-	      dirlen = home_len + rest_len;
+-	      dirname_modified = 1;
+-	    }
+-	  else
+-	    if (flags & GLOB_TILDE_CHECK)
+-	      /* We have to regard it as an error if we cannot find the
+-		 home directory.  */
+-	      return GLOB_NOMATCH;
+ 	}
+ # endif	/* Not Amiga && not WINDOWS32.  */
+     }
+@@ -899,7 +1066,7 @@ glob (pattern, flags, errfunc, pglob)
+ 	  status = glob_in_dir (filename, dirs.gl_pathv[i],
+ 				((flags | GLOB_APPEND)
+ 				 & ~(GLOB_NOCHECK | GLOB_NOMAGIC)),
+-				errfunc, pglob);
++				errfunc, pglob, alloca_used);
+ 	  if (status == GLOB_NOMATCH)
+ 	    /* No matches in this directory.  Try the next.  */
+ 	    continue;
+@@ -1000,7 +1167,8 @@ glob (pattern, flags, errfunc, pglob)
+ 	}
+       if (dirname_modified)
+ 	flags &= ~(GLOB_NOCHECK | GLOB_NOMAGIC);
+-      status = glob_in_dir (filename, dirname, flags, errfunc, pglob);
++      status = glob_in_dir (filename, dirname, flags, errfunc, pglob,
++			    alloca_used);
+       if (status != 0)
+ 	{
+ 	  if (status == GLOB_NOMATCH && flags != orig_flags
+@@ -1063,7 +1231,11 @@ glob (pattern, flags, errfunc, pglob)
+ 	     sizeof (char *), collated_compare);
+     }
+ 
+-  return 0;
++ out:
++  if (__builtin_expect (malloc_dirname, 0))
++    free (dirname);
++
++  return retval;
+ }
+ #if defined _LIBC && !defined glob
+ libc_hidden_def (glob)
+@@ -1273,7 +1445,7 @@ link_exists2_p (const char *dir, size_t dirlen, const char *fname,
+ static int
+ glob_in_dir (const char *pattern, const char *directory, int flags,
+ 	     int (*errfunc) (const char *, int),
+-	     glob_t *pglob)
++	     glob_t *pglob, size_t alloca_used)
+ {
+   size_t dirlen = strlen (directory);
+   void *stream = NULL;
+@@ -1288,11 +1460,12 @@ glob_in_dir (const char *pattern, const char *directory, int flags,
+   struct globnames *names = &init_names;
+   struct globnames *names_alloca = &init_names;
+   size_t nfound = 0;
+-  size_t allocasize = sizeof (init_names);
+   size_t cur = 0;
+   int meta;
+   int save;
+ 
++  alloca_used += sizeof (init_names);
++
+   init_names.next = NULL;
+   init_names.count = INITIAL_COUNT;
+ 
+@@ -1308,20 +1481,36 @@ glob_in_dir (const char *pattern, const char *directory, int flags,
+     {
+       /* Since we use the normal file functions we can also use stat()
+ 	 to verify the file is there.  */
+-      struct stat st;
+-      struct_stat64 st64;
++      union
++      {
++	struct stat st;
++	struct_stat64 st64;
++      } ust;
+       size_t patlen = strlen (pattern);
+-      char *fullname = (char *) __alloca (dirlen + 1 + patlen + 1);
++      int alloca_fullname = __libc_use_alloca (alloca_used
++					       + dirlen + 1 + patlen + 1);
++      char *fullname;
++      if (alloca_fullname)
++	fullname = alloca_account (dirlen + 1 + patlen + 1, alloca_used);
++      else
++	{
++	  fullname = malloc (dirlen + 1 + patlen + 1);
++	  if (fullname == NULL)
++	    return GLOB_NOSPACE;
++	}
+ 
+       mempcpy (mempcpy (mempcpy (fullname, directory, dirlen),
+ 			"/", 1),
+ 	       pattern, patlen + 1);
+       if ((__builtin_expect (flags & GLOB_ALTDIRFUNC, 0)
+-	   ? (*pglob->gl_stat) (fullname, &st)
+-	   : __stat64 (fullname, &st64)) == 0)
++	   ? (*pglob->gl_stat) (fullname, &ust.st)
++	   : __stat64 (fullname, &ust.st64)) == 0)
+ 	/* We found this file to be existing.  Now tell the rest
+ 	   of the function to copy this name into the result.  */
+ 	flags |= GLOB_NOCHECK;
++
++      if (__builtin_expect (!alloca_fullname, 0))
++	free (fullname);
+     }
+   else
+     {
+@@ -1409,9 +1598,9 @@ glob_in_dir (const char *pattern, const char *directory, int flags,
+ 			  size_t size = (sizeof (struct globnames)
+ 					 + ((count - INITIAL_COUNT)
+ 					    * sizeof (char *)));
+-			  allocasize += size;
+-			  if (__libc_use_alloca (allocasize))
+-			    newnames = names_alloca = __alloca (size);
++			  if (__libc_use_alloca (alloca_used + size))
++			    newnames = names_alloca
++			      = alloca_account (size, alloca_used);
+ 			  else if ((newnames = malloc (size))
+ 				   == NULL)
+ 			    goto memory_error;
diff --git a/SOURCES/glibc-rh804630.patch b/SOURCES/glibc-rh804630.patch
new file mode 100644
index 0000000..75dbe94
--- /dev/null
+++ b/SOURCES/glibc-rh804630.patch
@@ -0,0 +1,23 @@
+diff -rup c/resolv/res_send.c d/resolv/res_send.c
+--- c/resolv/res_send.c	2012-01-01 05:16:32.000000000 -0700
++++ d/resolv/res_send.c	2012-03-30 12:39:30.862467628 -0600
+@@ -409,6 +409,7 @@ __libc_res_nsend(res_state statp, const
+ 	 */
+ 	if (EXT(statp).nsinit == 0) {
+ 		unsigned char map[MAXNS];
++		unsigned int ext_total_nscount;
+ 
+ 		memset (map, MAXNS, sizeof (map));
+ 		for (n = 0; n < MAXNS; n++) {
+@@ -422,8 +423,9 @@ __libc_res_nsend(res_state statp, const
+ 			}
+ 		}
+ 		n = statp->nscount;
+-		if (statp->nscount > EXT(statp).nscount)
+-			for (n = EXT(statp).nscount, ns = 0;
++		ext_total_nscount = EXT(statp).nscount + EXT(statp).nscount6;
++		if (statp->nscount > ext_total_nscount)
++			for (n = ext_total_nscount, ns = 0;
+ 			     n < statp->nscount; n++) {
+ 				while (ns < MAXNS
+ 				       && EXT(statp).nsmap[ns] != MAXNS)
diff --git a/SOURCES/glibc-rh804689.patch b/SOURCES/glibc-rh804689.patch
new file mode 100644
index 0000000..a96a33f
--- /dev/null
+++ b/SOURCES/glibc-rh804689.patch
@@ -0,0 +1,23 @@
+diff -rup a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c
+--- a/sysdeps/posix/getaddrinfo.c	2012-03-20 21:31:14.177358937 -0600
++++ b/sysdeps/posix/getaddrinfo.c	2012-03-21 09:13:17.198290683 -0600
+@@ -560,15 +563,11 @@ gaih_inet (const char *name, const struc
+ 	  int no_more;
+ 	  int old_res_options;
+ 
+-	  /* If we do not have to look for IPv4 and IPv6 together, use
+-	     the simple, old functions.  */
+-	  if ((req->ai_family == AF_INET
+-	       || (req->ai_family == AF_INET6
+-		   && ((req->ai_flags & AI_V4MAPPED) == 0
+-		       || (req->ai_flags & AI_ALL) == 0)))
+-	      && (req->ai_flags & AI_CANONNAME) == 0)
++	  /* If we do not have to look for IPv6 addresses, use
++	     the simple, old functions, which do not support
++	     IPv6 scope ids. */
++	  if (req->ai_family == AF_INET)
+ 	    {
+-	      int family = req->ai_family;
+ 	      size_t tmpbuflen = 512;
+ 	      assert (tmpbuf == NULL);
+ 	      tmpbuf = alloca_account (tmpbuflen, alloca_used);
diff --git a/SOURCES/glibc-rh808337.patch b/SOURCES/glibc-rh808337.patch
new file mode 100644
index 0000000..bc20cbc
--- /dev/null
+++ b/SOURCES/glibc-rh808337.patch
@@ -0,0 +1,21 @@
+commit 6a5ee1029b3966c5ae9adaaa881e255b2880f511
+Author: Ulrich Drepper <drepper@gmail.com>
+Date:   Sun Mar 6 00:01:50 2011 -0500
+
+    Fix loading first object along a path when tracing.
+
+diff --git a/elf/dl-load.c b/elf/dl-load.c
+index 1ad16a0..f866066 100644
+--- a/elf/dl-load.c
++++ b/elf/dl-load.c
+@@ -2111,7 +2111,9 @@ _dl_map_object (struct link_map *loader, const char *name,
+ 	    {
+ #ifdef SHARED
+ 	      // XXX Correct to unconditionally default to namespace 0?
+-	      l = loader ?: GL(dl_ns)[LM_ID_BASE]._ns_loaded;
++	      l = (loader
++		   ?: GL(dl_ns)[LM_ID_BASE]._ns_loaded
++		   ?: &GL(dl_rtld_map));
+ #else
+ 	      l = loader;
+ #endif
diff --git a/SOURCES/glibc-rh808545.patch b/SOURCES/glibc-rh808545.patch
new file mode 100644
index 0000000..9a2cae3
--- /dev/null
+++ b/SOURCES/glibc-rh808545.patch
@@ -0,0 +1,44 @@
+diff -rup a/resolv/nss_dns/dns-host.c b/resolv/nss_dns/dns-host.c
+--- a/resolv/nss_dns/dns-host.c	2012-04-18 11:17:31.527539744 -0600
++++ b/resolv/nss_dns/dns-host.c	2012-04-18 11:21:45.441394159 -0600
+@@ -745,6 +745,10 @@ getanswer_r (const querybuf *answer, int
+ 
+       if ((qtype == T_A || qtype == T_AAAA) && type == T_CNAME)
+ 	{
++	  /* A CNAME could also have a TTL entry.  */
++	  if (ttlp != NULL && ttl < *ttlp)
++	      *ttlp = ttl;
++
+ 	  if (ap >= &host_data->aliases[MAX_NR_ALIASES - 1])
+ 	    continue;
+ 	  n = dn_expand (answer->buf, end_of_message, cp, tbuf, sizeof tbuf);
+@@ -906,7 +910,7 @@ getanswer_r (const querybuf *answer, int
+ 	    {
+ 	      register int nn;
+ 
+-	      if (ttlp != NULL)
++	      if (ttlp != NULL && ttl < *ttlp)
+ 		*ttlp = ttl;
+ 	      if (canonp != NULL)
+ 		*canonp = bp;
+@@ -1082,6 +1086,11 @@ gaih_getanswer_slice (const querybuf *an
+       if (type == T_CNAME)
+ 	{
+ 	  char tbuf[MAXDNAME];
++
++	  /* A CNAME could also have a TTL entry.  */
++	  if (ttlp != NULL && ttl < *ttlp)
++	    *ttlp = ttl;
++
+ 	  n = dn_expand (answer->buf, end_of_message, cp, tbuf, sizeof tbuf);
+ 	  if (__builtin_expect (n < 0 || res_hnok (tbuf) == 0, 0))
+ 	    {
+@@ -1162,7 +1171,7 @@ gaih_getanswer_slice (const querybuf *an
+ 
+       if (*firstp)
+ 	{
+-	  if (ttlp != NULL)
++	  if (ttlp != NULL && ttl < *ttlp)
+ 	    *ttlp = ttl;
+ 
+ 	  (*pat)->name = canon ?: h_name;
diff --git a/SOURCES/glibc-rh809602.patch b/SOURCES/glibc-rh809602.patch
new file mode 100644
index 0000000..81aa63a
--- /dev/null
+++ b/SOURCES/glibc-rh809602.patch
@@ -0,0 +1,47 @@
+diff -rup a/nscd/nscd_getserv_r.c b/nscd/nscd_getserv_r.c
+--- a/nscd/nscd_getserv_r.c	2012-04-04 16:37:27.873951850 -0600
++++ b/nscd/nscd_getserv_r.c	2012-04-04 16:37:49.904837348 -0600
+@@ -124,6 +123,7 @@ nscd_getserv_r (const char *crit, size_t
+ 	  s_name = (char *) (&found->data[0].servdata + 1);
+ 	  serv_resp = found->data[0].servdata;
+ 	  s_proto = s_name + serv_resp.s_name_len;
++	  alloca_aliases_len = 1;
+ 	  aliases_len = (uint32_t *) (s_proto + serv_resp.s_proto_len);
+ 	  aliases_list = ((char *) aliases_len
+ 			  + serv_resp.s_aliases_cnt * sizeof (uint32_t));
+@@ -154,7 +154,9 @@ nscd_getserv_r (const char *crit, size_t
+ 				     + (serv_resp.s_aliases_cnt
+ 					* sizeof (uint32_t)));
+ 	      if (alloca_aliases_len)
+-		tmp = __alloca (serv_resp.s_aliases_cnt * sizeof (uint32_t));
++		tmp = alloca_account (serv_resp.s_aliases_cnt
++				      * sizeof (uint32_t),
++				      alloca_used);
+ 	      else
+ 		{
+ 		  tmp = malloc (serv_resp.s_aliases_cnt * sizeof (uint32_t));
+@@ -249,8 +251,9 @@ nscd_getserv_r (const char *crit, size_t
+ 				     + (serv_resp.s_aliases_cnt
+ 					* sizeof (uint32_t)));
+ 	      if (alloca_aliases_len)
+-		aliases_len = alloca (serv_resp.s_aliases_cnt
+-				      * sizeof (uint32_t));
++		aliases_len = alloca_account (serv_resp.s_aliases_cnt
++					      * sizeof (uint32_t),
++					      alloca_used);
+ 	      else
+ 		{
+ 		  aliases_len = malloc (serv_resp.s_aliases_cnt
+@@ -368,7 +371,11 @@ nscd_getserv_r (const char *crit, size_t
+ 	}
+ 
+       if (retval != -1)
+-	goto retry;
++	{
++	  if (!alloca_aliases_len)
++	    free ((void *) aliases_len);
++	  goto retry;
++	}
+     }
+ 
+   if (!alloca_aliases_len)
diff --git a/SOURCES/glibc-rh883974-2.patch b/SOURCES/glibc-rh883974-2.patch
new file mode 100644
index 0000000..393c466
--- /dev/null
+++ b/SOURCES/glibc-rh883974-2.patch
@@ -0,0 +1,21 @@
+diff -Nrup a/timezone/zic.c b/timezone/zic.c
+--- a/timezone/zic.c	2013-07-19 07:25:11.726506479 -0600
++++ b/timezone/zic.c	2013-07-19 07:27:15.059083404 -0600
+@@ -2473,14 +2473,12 @@ oadd(t1, t2)
+ const long	t1;
+ const long	t2;
+ {
+-	register long	t;
+-
+-	t = t1 + t2;
+-	if ((t2 > 0 && t <= t1) || (t2 < 0 && t >= t1)) {
++	if (t1 < 0 ? t2 < LONG_MIN - t1 : LONG_MAX - t1 < t2) {
+ 		error(_("time overflow"));
+ 		exit(EXIT_FAILURE);
+ 	}
+-	return t;
++
++	return t1 + t2;
+ }
+ 
+ static zic_t
diff --git a/SOURCES/glibc-rh883974.patch b/SOURCES/glibc-rh883974.patch
new file mode 100644
index 0000000..d083eab
--- /dev/null
+++ b/SOURCES/glibc-rh883974.patch
@@ -0,0 +1,48 @@
+diff -Nrup a/crypt/md5.c b/crypt/md5.c
+--- a/crypt/md5.c	2010-05-04 05:27:23.000000000 -0600
++++ b/crypt/md5.c	2013-01-02 13:21:20.140576889 -0700
+@@ -1,6 +1,6 @@
+ /* Functions to compute MD5 message digest of files or memory blocks.
+    according to the definition of MD5 in RFC 1321 from April 1992.
+-   Copyright (C) 1995,1996,1997,1999,2000,2001,2005
++   Copyright (C) 1995,1996,1997,1999,2000,2001,2005,2011
+ 	Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+ 
+@@ -123,9 +123,9 @@ md5_finish_ctx (ctx, resbuf)
+   memcpy (&ctx->buffer[bytes], fillbuf, pad);
+ 
+   /* Put the 64-bit file length in *bits* at the end of the buffer.  */
+-  *(md5_uint32 *) &ctx->buffer[bytes + pad] = SWAP (ctx->total[0] << 3);
+-  *(md5_uint32 *) &ctx->buffer[bytes + pad + 4] = SWAP ((ctx->total[1] << 3) |
+-							(ctx->total[0] >> 29));
++  ctx->buffer32[(bytes + pad) / 4] = SWAP (ctx->total[0] << 3);
++  ctx->buffer32[(bytes + pad + 4) / 4] = SWAP ((ctx->total[1] << 3) |
++					       (ctx->total[0] >> 29));
+ 
+   /* Process last bytes.  */
+   md5_process_block (ctx->buffer, bytes + pad + 8, ctx);
+diff -Nrup a/crypt/md5.h b/crypt/md5.h
+--- a/crypt/md5.h	2010-05-04 05:27:23.000000000 -0600
++++ b/crypt/md5.h	2013-01-02 13:21:20.140576889 -0700
+@@ -1,6 +1,6 @@
+ /* Declaration of functions and data types used for MD5 sum computing
+    library functions.
+-   Copyright (C) 1995-1997,1999,2000,2001,2004,2005
++   Copyright (C) 1995-1997,1999,2000,2001,2004,2005,2011
+       Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+ 
+@@ -88,7 +88,11 @@ struct md5_ctx
+ 
+   md5_uint32 total[2];
+   md5_uint32 buflen;
+-  char buffer[128] __attribute__ ((__aligned__ (__alignof__ (md5_uint32))));
++  union
++  {
++    char buffer[128];
++    md5_uint32 buffer32[32];
++  };
+ };
+ 
+ /*
diff --git a/SOURCES/glibc-rh911307.patch b/SOURCES/glibc-rh911307.patch
new file mode 100644
index 0000000..83158a6
--- /dev/null
+++ b/SOURCES/glibc-rh911307.patch
@@ -0,0 +1,61 @@
+#
+# Red Hat BZ:
+# https://bugzilla.redhat.com/show_bug.cgi?id=911307
+#
+# Sourceware BZ: None.
+#
+# Upstreamm submission: Not yet completed.
+#
+# ChangeLog
+#
+# 2013-02-27  Carlos O'Donell  <carlos@redhat.com>
+#
+#	* elf/Makefile (CFLAGS-.o): Add -fno-tree-loop-distribute-patterns.
+#	(CFLAGS-.os): Likewise.
+#	(CFLAGS-.op): Likewise.
+#	(CFLAGS-.ob): Likewise.
+#	(CFLAGS-.oS): Likewise.
+#	* string/Makefile (CFLAGS-.o): Likewise.
+#	(CFLAGS-.os): Likewise.
+#	(CFLAGS-.op): Likewise.
+#	(CFLAGS-.ob): Likewise.
+#	(CFLAGS-.oS): Likewise.
+#
+diff -Nrup a/elf/Makefile b/elf/Makefile
+--- a/elf/Makefile	2013-05-28 09:56:09.798610050 -0600
++++ b/elf/Makefile	2013-05-28 13:30:20.007930731 -0600
+@@ -461,6 +461,16 @@ CFLAGS-cache.c = $(SYSCONF-FLAGS)
+ CPPFLAGS-.os += $(if $(filter $(@F),$(patsubst %,%.os,$(all-rtld-routines))),\
+ 		     -DNOT_IN_libc=1 -DIS_IN_rtld=1 -DIN_LIB=rtld)
+ 
++# Disable any optimization which might result in function calls during early
++# dynamic loader startup. We disable -ftree-loop-distribute-patterns which
++# might convert code into calls to functions like memcpy or memset when the PLT
++# is not yet setup.
++CFLAGS-.o += -fno-tree-loop-distribute-patterns
++CFLAGS-.os += -fno-tree-loop-distribute-patterns
++CFLAGS-.op += -fno-tree-loop-distribute-patterns
++CFLAGS-.ob += -fno-tree-loop-distribute-patterns
++CFLAGS-.oS += -fno-tree-loop-distribute-patterns
++
+ test-modules = $(addprefix $(objpfx),$(addsuffix .so,$(strip $(modules-names))))
+ generated += $(addsuffix .so,$(strip $(modules-names)))
+ 
+diff -Nrup a/string/Makefile b/string/Makefile
+--- a/string/Makefile	2013-05-28 09:56:09.534610913 -0600
++++ b/string/Makefile	2013-05-28 13:31:01.693053657 -0600
+@@ -77,6 +77,14 @@ CFLAGS-test-ffs.c = -fno-builtin
+ CFLAGS-tst-inlcall.c = -fno-builtin
+ CFLAGS-bug-strstr1.c = -fno-builtin
+ 
++# Disable any optimization which might result in function calls to the very
++# same functions we are trying to compile, thus creating an infinite loop.
++CFLAGS-.o += -fno-tree-loop-distribute-patterns
++CFLAGS-.os += -fno-tree-loop-distribute-patterns
++CFLAGS-.op += -fno-tree-loop-distribute-patterns
++CFLAGS-.ob += -fno-tree-loop-distribute-patterns
++CFLAGS-.oS += -fno-tree-loop-distribute-patterns
++
+ ifeq ($(cross-compiling),no)
+ tests: $(objpfx)tst-svc.out
+ $(objpfx)tst-svc.out: tst-svc.input $(objpfx)tst-svc
diff --git a/SPECS/compat-glibc.spec b/SPECS/compat-glibc.spec
new file mode 100644
index 0000000..dc93505
--- /dev/null
+++ b/SPECS/compat-glibc.spec
@@ -0,0 +1,547 @@
+%define glibcsrcdir glibc-2.12-2-gc4ccff1
+%define glibcversion 2.12
+### glibc.spec.in follows:
+%define run_glibc_tests 1
+%define auxarches noarch
+%define xenarches noarch
+%define buildxen 0
+%define xenpackage 0
+%define buildpower6 0
+%define rtkaioarches noarch
+%define debuginfocommonarches noarch
+%define _unpackaged_files_terminate_build 0
+%undefine _enable_debug_packages
+# What's the right thing to do with these?
+# XXX
+%define biarcharches noarch
+%define multiarcharches noarch
+%define systemtaparches noarch
+# XXX
+
+Summary: Compatibility C library
+Name: compat-glibc
+# XXX Should this bump?
+Epoch: 1
+Version: %{glibcversion}
+Release: 1.80.5%{?dist}
+# GPLv2+ is used in a bunch of programs, LGPLv2+ is used for libraries.
+# Things that are linked directly into dynamically linked programs
+# and shared libraries (e.g. crt files, lib*_nonshared.a) have an additional
+# exception which allows linking it into any kind of programs or shared
+# libraries without restrictions.
+License: LGPLv2+ and LGPLv2+ with exceptions and GPLv2+
+Group: Development/Libraries
+URL: http://sources.redhat.com/glibc/
+Source0: %{?glibc_release_url}%{glibcsrcdir}.tar.bz2
+Source1: %{glibcsrcdir}-fedora.tar.bz2
+Source2: dummylib.sh
+Patch0: glibc-fedora.patch
+Patch1: glibc-ia64-lib64.patch
+Patch2: glibc-rh587360.patch
+Patch3: glibc-rh582738.patch
+Patch4: glibc-getlogin-r.patch
+Patch5: glibc-localedata.patch
+Patch6: glibc-rh593396.patch
+Patch7: glibc-recvmmsg.patch
+Patch8: glibc-aliasing.patch
+Patch9: glibc-rh593686.patch
+Patch10: glibc-rh607461.patch
+Patch11: glibc-rh621959.patch
+Patch12: glibc-rh607010.patch
+Patch13: glibc-rh630801.patch
+Patch14: glibc-rh631011.patch
+Patch15: glibc-rh641128.patch
+Patch16: glibc-rh642584.patch
+Patch17: glibc-rh643822.patch
+Patch18: glibc-rh645672.patch
+Patch19: glibc-rh580498.patch
+Patch20: glibc-rh615090.patch
+Patch21: glibc-rh623187.patch
+Patch22: glibc-rh646954.patch
+Patch23: glibc-rh647448.patch
+Patch24: glibc-rh615701.patch
+Patch25: glibc-rh652661.patch
+Patch26: glibc-rh656530.patch
+Patch27: glibc-rh656014.patch
+Patch28: glibc-rh661982.patch
+Patch29: glibc-rh601686.patch
+Patch30: glibc-rh676076.patch
+Patch31: glibc-rh667974.patch
+Patch32: glibc-rh625893.patch
+Patch33: glibc-rh681054.patch
+Patch34: glibc-rh689471.patch
+Patch35: glibc-rh692177.patch
+Patch36: glibc-rh692838.patch
+Patch37: glibc-rh703480.patch
+Patch38: glibc-rh705465.patch
+Patch39: glibc-rh703481.patch
+Patch40: glibc-rh694386.patch
+Patch41: glibc-rh676591.patch
+Patch42: glibc-rh711987.patch
+Patch43: glibc-rh695595.patch
+Patch45: glibc-rh695963.patch
+Patch46: glibc-rh713134.patch
+Patch47: glibc-rh714823.patch
+Patch48: glibc-rh718057.patch
+Patch49: glibc-rh688980.patch
+Patch50: glibc-rh712248.patch
+Patch51: glibc-rh731042.patch
+Patch52: glibc-rh730379.patch
+Patch53: glibc-rh700507.patch
+Patch54: glibc-rh699724.patch
+Patch55: glibc-rh736346.patch
+Patch56: glibc-rh737778.patch
+Patch57: glibc-rh738665.patch
+Patch58: glibc-rh738763.patch
+Patch59: glibc-rh739184.patch
+Patch60: glibc-rh711927.patch
+Patch61: glibc-rh688720.patch
+Patch62: glibc-rh726517.patch
+Patch63: glibc-rh752122.patch
+Patch64: glibc-rh739971.patch
+Patch65: glibc-rh751750.patch
+Patch66: glibc-rh740506.patch
+Patch67: glibc-rh757888.patch
+Patch68: glibc-rh750531.patch
+Patch69: glibc-rh749188.patch
+Patch70: glibc-rh767746.patch
+Patch72: glibc-rh767693.patch
+Patch73: glibc-rh740506-2.patch
+Patch74: glibc-rh696472.patch
+Patch75: glibc-rh771342.patch
+Patch76: glibc-rh657572.patch
+Patch77: glibc-rh767693-2.patch
+Patch78: glibc-rh782585.patch
+Patch79: glibc-rh784402.patch
+Patch80: glibc-rh697421.patch
+Patch81: glibc-rh785984.patch
+Patch82: glibc-rh767146.patch
+Patch83: glibc-rh766513.patch
+Patch84: glibc-rh789209.patch
+Patch85: glibc-rh788959.patch
+Patch86: glibc-rh789189.patch
+Patch88: glibc-rh789238.patch
+Patch89: glibc-rh794817.patch
+Patch90: glibc-rh797094-1.patch
+Patch91: glibc-rh797094-2.patch
+Patch92: glibc-rh789238-2.patch
+Patch93: glibc-rh795498.patch
+Patch94: glibc-rh794817-2.patch
+Patch95: glibc-rh804689.patch
+Patch96: glibc-rh809602.patch
+Patch97: glibc-rh808337.patch
+Patch98: glibc-rh804630.patch
+Patch99: glibc-rh788959-2.patch
+Patch100: glibc-rh808545.patch
+
+Patch10000: glibc-fix-implicit-rule.patch
+Patch10001: glibc-gcc47-ctordtor.patch
+Patch10002: glibc-rh783979.patch
+
+# I'm not sure why we didn't see strict aliasing warnings with RHEL 6 builds, perhaps
+# it's due to the newer compiler in RHEL 7.
+Patch10003: glibc-rh883974.patch
+
+# GCC recently removed -mnew-mnemonics for PPC
+Patch10004: glibc-ppc-mnemonics.patch
+
+# Disable -ftree-loop-distribute-patterns  which converts open code to
+# memset, memcpy, etc.  This can cause infinte loops when compiling those
+# routines in glibc.  Furthermore it can create calls through the PLT in 
+# the dynamic linker when the PLT hasn't been set up yet.
+Patch10005: glibc-rh911307.patch
+
+# Newer compiler is also complaining about overflow problems
+Patch10006: glibc-rh883974-2.patch
+
+Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+Autoreq: true
+Autoprov: false
+Requires: compat-glibc-headers = %{epoch}:%{version}-%{release}
+# This is for building auxiliary programs like memusage, nscd
+# For initial glibc bootstraps it can be commented out
+BuildRequires: gd-devel libpng-devel zlib-devel texinfo, libselinux-devel >= 1.33.4-3
+BuildRequires: audit-libs-devel >= 1.1.3, sed >= 3.95, libcap-devel, gettext, nss-devel
+BuildRequires: /bin/ps, /bin/kill, /bin/awk
+%ifarch %{systemtaparches}
+BuildRequires: systemtap-sdt-devel
+%endif
+# This is to ensure that __frame_state_for is exported by glibc
+# will be compatible with egcs 1.x.y
+BuildRequires: gcc >= 3.2
+%define enablekernel 2.6.18
+%ifarch i386
+%define nptl_target_cpu i486
+%else
+%define nptl_target_cpu %{_target_cpu}
+%endif
+%ifarch %{multiarcharches}
+# Need STT_IFUNC support
+%ifarch ppc ppc64
+BuildRequires: binutils >= 2.20.51.0.2
+Conflicts: binutils < 2.20.51.0.2
+%else
+BuildRequires: binutils >= 2.19.51.0.10
+Conflicts: binutils < 2.19.51.0.10
+%endif
+# Earlier releases have broken support for IRELATIVE relocations
+Conflicts: prelink < 0.4.2
+%else
+# Need AS_NEEDED directive
+# Need --hash-style=* support
+BuildRequires: binutils >= 2.17.50.0.2-5
+%endif
+BuildRequires: gcc >= 3.2.1-5
+%ifarch ppc s390 s390x
+BuildRequires: gcc >= 4.1.0-0.17
+%endif
+%if 0%{?_enable_debug_packages}
+BuildRequires: elfutils >= 0.72
+BuildRequires: rpm >= 4.2-0.56
+%endif
+%define __find_provides %{_builddir}/%{glibcsrcdir}/find_provides.sh
+%define _filter_GLIBC_PRIVATE 1
+
+%description
+This package contains stub shared libraries and static libraries
+from Red Hat Enterprise Linux 6.
+
+To compile and link against these compatibility libraries, use
+gcc -fgnu89-inline \
+      -I %{_prefix}/lib/%{_target_cpu}-redhat-linux6E/include \
+      -B %{_prefix}/lib/%{_target_cpu}-redhat-linux6E/%{_lib}/
+
+
+%package headers
+Summary: Header files for development using standard C libraries.
+Group: Development/Libraries
+Provides: %{name}-headers(%{_target_cpu})
+Requires: compat-glibc = %{epoch}:%{version}-%{release}
+%ifarch x86_64
+# If both -m32 and -m64 is to be supported on AMD64, x86_64 glibc-headers
+# have to be installed, not i586 ones.
+Obsoletes: %{name}-headers(i586)
+Obsoletes: %{name}-headers(i686)
+%endif
+Requires(pre): kernel-headers
+Requires: kernel-headers >= 2.2.1
+Requires: %{name} = %{epoch}:%{version}-%{release}
+BuildRequires: kernel-headers >= 2.6.22
+
+%description headers
+The compat-glibc-headers package contains the header files from
+Red Hat Enterprise Linux 56
+
+
+%prep
+%setup -q -n %{glibcsrcdir} -b1
+%patch0 -E -p1
+%ifarch ia64
+%if "%{_lib}" == "lib64"
+%patch1 -p1
+%endif
+%endif
+%patch2 -p1
+%patch3 -p1
+%patch4 -p1
+%patch5 -p1
+%patch6 -p1
+%patch7 -p1
+%patch8 -p1
+%patch9 -p1
+%patch10 -p1
+%patch11 -p1
+%patch12 -p1
+%patch13 -p1
+%patch14 -p1
+%patch15 -p1
+%patch16 -p1
+%patch17 -p1
+%patch18 -p1
+%patch19 -p1
+%patch20 -p1
+%patch21 -p1
+%patch22 -p1
+%patch23 -p1
+%patch24 -p1
+%patch25 -p1
+%patch26 -p1
+%patch27 -p1
+%patch28 -p1
+%patch29 -p1
+%patch30 -p1
+%patch31 -p1
+%patch32 -p1
+%patch33 -p1
+%patch34 -p1
+%patch35 -p1
+%patch36 -p1
+%patch37 -p1
+%patch38 -p1
+%patch39 -p1
+%patch40 -p1
+%patch41 -p1
+%patch42 -p1
+%patch43 -p1
+%patch45 -p1
+%patch46 -p1
+%patch47 -p1
+%patch48 -p1
+%patch49 -p1
+%patch50 -p1
+%patch51 -p1
+%patch52 -p1
+%patch53 -p1
+%patch54 -p1
+%patch55 -p1
+%patch56 -p1
+%patch57 -p1
+%patch58 -p1
+%patch59 -p1
+%patch60 -p1
+%patch61 -p1
+%patch62 -p1
+%patch63 -p1
+%patch64 -p1
+%patch65 -p1
+%patch66 -p1
+%patch67 -p1
+%patch68 -p1
+%patch69 -p1
+%patch70 -p1
+%patch72 -p1
+%patch73 -p1
+%patch74 -p1
+%patch75 -p1
+%patch76 -p1
+%patch77 -p1
+%patch78 -p1
+%patch79 -p1
+%patch80 -p1
+%patch81 -p1
+%patch82 -p1
+%patch83 -p1
+%patch84 -p1
+%patch85 -p1
+%patch86 -p1
+%patch88 -p1
+%patch89 -p1
+%patch90 -p1
+%patch91 -p1
+%patch92 -p1
+%patch93 -p1
+%patch94 -p1
+%patch95 -p1
+%patch96 -p1
+%patch97 -p1
+%patch98 -p1
+%patch99 -p1
+%patch100 -p1
+
+# These are compat-glibc specific changes necessary for the old glibc to
+# build with new compilers.
+%patch10000 -p1
+%patch10001 -p1
+%patch10002 -p1
+%patch10003 -p1
+%patch10004 -p1
+%patch10005 -p1
+%patch10006 -p1
+
+find . -type f -size 0 -o -name "*.orig" -exec rm -f {} \;
+touch `find . -name configure`
+touch locale/programs/*-kw.h
+
+%build
+GCC=gcc
+GXX=g++
+%ifarch %{ix86}
+BuildFlags="-march=%{nptl_target_cpu} -mtune=generic"
+%endif
+%ifarch i686
+BuildFlags="-march=i686 -mtune=generic"
+%endif
+%ifarch i386 i486 i586
+BuildFlags="$BuildFlags -mno-tls-direct-seg-refs"
+%endif
+%ifarch x86_64
+BuildFlags="-mtune=generic"
+%endif
+%ifarch alphaev6
+BuildFlags="-mcpu=ev6"
+%endif
+%ifarch sparc
+BuildFlags="-fcall-used-g6"
+GCC="gcc -m32"
+GXX="g++ -m32"
+%endif
+%ifarch sparcv9
+BuildFlags="-mcpu=ultrasparc -fcall-used-g6"
+GCC="gcc -m32"
+GXX="g++ -m32"
+%endif
+%ifarch sparcv9v
+BuildFlags="-mcpu=niagara -fcall-used-g6"
+GCC="gcc -m32"
+GXX="g++ -m32"
+%endif
+%ifarch sparc64
+BuildFlags="-mcpu=ultrasparc -mvis -fcall-used-g6"
+GCC="gcc -m64"
+GXX="g++ -m64"
+%endif
+%ifarch sparc64v
+BuildFlags="-mcpu=niagara -mvis -fcall-used-g6"
+GCC="gcc -m64"
+GXX="g++ -m64"
+%endif
+%ifarch ppc64
+BuildFlags="-mno-minimal-toc"
+GCC="gcc -m64"
+GXX="g++ -m64"
+%endif
+
+BuildFlags="$BuildFlags -fgnu89-inline"
+# Add -DNDEBUG unless using a prerelease
+case %{version} in
+  *.*.9[0-9]*) ;;
+  *)
+     BuildFlags="$BuildFlags -DNDEBUG"
+     ;;
+esac
+EnableKernel="--enable-kernel=%{enablekernel}"
+echo "$GCC" > Gcc
+AddOns=`echo */configure | sed -e 's!/configure!!g;s!\(linuxthreads\|nptl\|rtkaio\|powerpc-cpu\)\( \|$\)!!g;s! \+$!!;s! !,!g;s!^!,!;/^,\*$/d'`
+%ifarch %{rtkaioarches}
+AddOns=,rtkaio$AddOns
+%endif
+
+build_nptl()
+{
+builddir=build-%{nptl_target_cpu}-$1
+shift
+rm -rf $builddir
+mkdir $builddir ; cd $builddir
+build_CFLAGS="$BuildFlags -g -O3 $*"
+../configure CC="$GCC" CXX="$GXX" CFLAGS="$build_CFLAGS" \
+	--prefix=%{_prefix} \
+	--enable-add-ons=nptl$AddOns --without-cvs $EnableKernel \
+	--without-selinux \
+	--with-headers=%{_prefix}/include --enable-bind-now \
+	--with-tls --with-__thread --build %{nptl_target_cpu}-redhat-linux \
+	--host %{nptl_target_cpu}-redhat-linux \
+%ifarch %{multiarcharches}
+	--enable-multi-arch \
+%endif
+%ifarch %{systemtaparches}
+	--enable-systemtap \
+%endif
+	--disable-profile --enable-experimental-malloc --enable-nss-crypt
+
+make %{?_smp_mflags} -r CFLAGS="$build_CFLAGS" PARALLELMFLAGS=-s
+
+cd ..
+}
+
+build_nptl linuxnptl
+
+%install
+GCC=`cat Gcc`
+
+rm -rf $RPM_BUILD_ROOT
+mkdir -p $RPM_BUILD_ROOT
+make -j1 install_root=$RPM_BUILD_ROOT install -C build-%{nptl_target_cpu}-linuxnptl PARALLELMFLAGS=-s
+chmod +x $RPM_BUILD_ROOT%{_prefix}/libexec/pt_chown
+%ifnarch %{auxarches}
+cd build-%{nptl_target_cpu}-linuxnptl && \
+  make %{?_smp_mflags} install_root=$RPM_BUILD_ROOT install-locales -C ../localedata objdir=`pwd` && \
+  cd ..
+%endif
+
+# Remove the files we don't want to distribute
+rm -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libNoVersion*
+rm -f $RPM_BUILD_ROOT/%{_lib}/libNoVersion*
+rm -f $RPM_BUILD_ROOT{%{_prefix},}/%{_lib}/lib{NoVersion,nss,BrokenLocale}*
+
+# NPTL <bits/stdio-lock.h> is not usable outside of glibc, so include
+# the generic one (#162634)
+cp -a bits/stdio-lock.h $RPM_BUILD_ROOT%{_prefix}/include/bits/stdio-lock.h
+# And <bits/libc-lock.h> needs sanitizing as well.
+cp -a fedora/libc-lock.h $RPM_BUILD_ROOT%{_prefix}/include/bits/libc-lock.h
+
+ln -sf libbsd-compat.a $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libbsd.a
+
+strip -g $RPM_BUILD_ROOT%{_prefix}/%{_lib}/*.o
+
+# rquota.x and rquota.h are now provided by quota
+rm -f $RPM_BUILD_ROOT%{_prefix}/include/rpcsvc/rquota.[hx]
+
+COMPATD=$RPM_BUILD_ROOT%{_prefix}/lib/%{_target_cpu}-redhat-linux6E
+
+mkdir -p $COMPATD/%{_lib}
+
+mv -f $RPM_BUILD_ROOT%{_prefix}/include $COMPATD/
+mv -f $RPM_BUILD_ROOT%{_prefix}/%{_lib}/*.[oa] $COMPATD/%{_lib}
+strip -R .comment -g $COMPATD/%{_lib}/*.a
+ln -sf libbsd-compat.a $COMPATD/%{_lib}/libbsd.a
+mkdir -p $RPM_BUILD_ROOT%{_prefix}/tmp
+cp -a $RPM_BUILD_ROOT%{_prefix}/%{_lib}/*.so $RPM_BUILD_ROOT%{_prefix}/tmp
+rm -f $RPM_BUILD_ROOT%{_prefix}/tmp/libc.so
+rm -f $RPM_BUILD_ROOT%{_prefix}/tmp/libpthread.so
+pushd $RPM_BUILD_ROOT%{_prefix}/tmp
+ln -sf ../../%{_lib}/libc.so.6* libc.so
+ln -sf ../../%{_lib}/libpthread.so.0* libpthread.so
+popd
+
+cd build-%{nptl_target_cpu}-linuxnptl
+for libpath in $RPM_BUILD_ROOT%{_prefix}/tmp/*.so; do
+  lib=`basename $libpath .so`
+  sh %{SOURCE2} $libpath $COMPATD/%{_lib}/$lib.so $lib.map
+done
+
+mv $COMPATD/%{_lib}/libc.so $COMPATD/%{_lib}/libc_real.so
+mv $COMPATD/%{_lib}/libpthread.so $COMPATD/%{_lib}/libpthread_real.so
+LDIR=%{_prefix}/lib/%{_target_cpu}-redhat-linux6E/%{_lib}
+sed 's~^GROUP.*$~GROUP ('$LDIR'/libc_real.so '$LDIR'/libc_nonshared.a )~' \
+  $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libc.so > $COMPATD/%{_lib}/libc.so
+sed 's~^GROUP.*$~GROUP ('$LDIR'/libpthread_real.so '$LDIR'/libpthread_nonshared.a )~' \
+  $RPM_BUILD_ROOT%{_prefix}/%{_lib}/libpthread.so > $COMPATD/%{_lib}/libpthread.so
+
+%clean
+rm -rf "$RPM_BUILD_ROOT"
+
+%files 
+%defattr(-,root,root)
+%dir %{_prefix}/lib/%{_target_cpu}-redhat-linux6E
+%dir %{_prefix}/lib/%{_target_cpu}-redhat-linux6E/%{_lib}
+%{_prefix}/lib/%{_target_cpu}-redhat-linux6E/%{_lib}/*.[oa]
+%{_prefix}/lib/%{_target_cpu}-redhat-linux6E/%{_lib}/*.so
+
+%files headers
+%defattr(-,root,root)
+%dir %{_prefix}/lib/%{_target_cpu}-redhat-linux6E
+%{_prefix}/lib/%{_target_cpu}-redhat-linux6E/include
+
+
+%changelog
+* Fri Jul 19 2013 Jeff Law <law@redhat.com> - 1:2.12-1.80.5
+- Backport timezone/zic.c change to avoid overflow in oadd (#883974) 
+
+* Tue May 28 2013 Jeff Law <law@redhat.com> - 1:2.12-1.80.4
+- Fix passing of -z execstack to the linker.
+- Remove -mnew-mnenomics from PPC build flags
+- Pull over patch for 911307 from Fedora
+
+* Mon May 20 2013 Jeff Law <law@redhat.com> - 1:2.12-1.80.3
+- Add -z execstack to command line for building DSOs in
+  dummylib.sh (#883974)
+
+* Wed Jan 2 2013 Jeff Law <law@redhat.com> - 1:2.12-1.80.2
+- Backport change to avoid strict-aliasing problems in 
+  md5.c (#883974)
+
+* Wed Jun 13 2012 Daniel Mach <dmach@redhat.com> - 1:2.12-1.80.1
+- add missing epoch to Requires: in headers package
+
+* Fri Jun 8 2012 Jeff Law <law@redhat.com> - 1:2.12-1.80
+- changed into compatibility package