aboutsummaryrefslogtreecommitdiff
path: root/REORG.TODO/stdlib
diff options
context:
space:
mode:
Diffstat (limited to 'REORG.TODO/stdlib')
-rw-r--r--REORG.TODO/stdlib/Depend1
-rw-r--r--REORG.TODO/stdlib/Makefile221
-rw-r--r--REORG.TODO/stdlib/Versions135
-rw-r--r--REORG.TODO/stdlib/a64l.c64
-rw-r--r--REORG.TODO/stdlib/abort.c142
-rw-r--r--REORG.TODO/stdlib/abs.c27
-rw-r--r--REORG.TODO/stdlib/add_n.c53
-rw-r--r--REORG.TODO/stdlib/addmul_1.c61
-rw-r--r--REORG.TODO/stdlib/alloca.h40
-rw-r--r--REORG.TODO/stdlib/at_quick_exit.c50
-rw-r--r--REORG.TODO/stdlib/atexit.c52
-rw-r--r--REORG.TODO/stdlib/atof.c28
-rw-r--r--REORG.TODO/stdlib/atoi.c28
-rw-r--r--REORG.TODO/stdlib/atol.c28
-rw-r--r--REORG.TODO/stdlib/atoll.c28
-rw-r--r--REORG.TODO/stdlib/bits/monetary-ldbl.h27
-rw-r--r--REORG.TODO/stdlib/bits/stdlib-float.h29
-rw-r--r--REORG.TODO/stdlib/bits/stdlib-ldbl.h41
-rw-r--r--REORG.TODO/stdlib/bits/stdlib.h155
-rw-r--r--REORG.TODO/stdlib/bsearch.c23
-rw-r--r--REORG.TODO/stdlib/bug-fmtmsg1.c28
-rw-r--r--REORG.TODO/stdlib/bug-getcontext.c76
-rw-r--r--REORG.TODO/stdlib/bug-strtod.c67
-rw-r--r--REORG.TODO/stdlib/bug-strtod2.c57
-rw-r--r--REORG.TODO/stdlib/canonicalize.c246
-rw-r--r--REORG.TODO/stdlib/cmp.c48
-rw-r--r--REORG.TODO/stdlib/cxa_at_quick_exit.c30
-rw-r--r--REORG.TODO/stdlib/cxa_atexit.c133
-rw-r--r--REORG.TODO/stdlib/cxa_finalize.c82
-rw-r--r--REORG.TODO/stdlib/cxa_thread_atexit_impl.c165
-rw-r--r--REORG.TODO/stdlib/dbl2mpn.c31
-rw-r--r--REORG.TODO/stdlib/div.c62
-rw-r--r--REORG.TODO/stdlib/divmod_1.c199
-rw-r--r--REORG.TODO/stdlib/divrem.c234
-rw-r--r--REORG.TODO/stdlib/drand48-iter.c56
-rw-r--r--REORG.TODO/stdlib/drand48.c30
-rw-r--r--REORG.TODO/stdlib/drand48_r.c27
-rw-r--r--REORG.TODO/stdlib/erand48.c30
-rw-r--r--REORG.TODO/stdlib/erand48_r.c47
-rw-r--r--REORG.TODO/stdlib/errno.h72
-rw-r--r--REORG.TODO/stdlib/exit.c107
-rw-r--r--REORG.TODO/stdlib/exit.h77
-rw-r--r--REORG.TODO/stdlib/fmtmsg.c386
-rw-r--r--REORG.TODO/stdlib/fmtmsg.h105
-rw-r--r--REORG.TODO/stdlib/fpioconst.c1329
-rw-r--r--REORG.TODO/stdlib/fpioconst.h88
-rw-r--r--REORG.TODO/stdlib/gen-fpioconst.c108
-rw-r--r--REORG.TODO/stdlib/gen-tst-strtod-round.c191
-rw-r--r--REORG.TODO/stdlib/getcontext.c29
-rw-r--r--REORG.TODO/stdlib/getentropy.c31
-rw-r--r--REORG.TODO/stdlib/getenv.c92
-rw-r--r--REORG.TODO/stdlib/getrandom.c31
-rw-r--r--REORG.TODO/stdlib/getsubopt.c79
-rw-r--r--REORG.TODO/stdlib/gmp-impl.h367
-rw-r--r--REORG.TODO/stdlib/gmp.h623
-rw-r--r--REORG.TODO/stdlib/grouping.c201
-rw-r--r--REORG.TODO/stdlib/grouping.h33
-rw-r--r--REORG.TODO/stdlib/groupingwc.c2
-rw-r--r--REORG.TODO/stdlib/inlines.c3
-rw-r--r--REORG.TODO/stdlib/isomac.c447
-rw-r--r--REORG.TODO/stdlib/jrand48.c30
-rw-r--r--REORG.TODO/stdlib/jrand48_r.c34
-rw-r--r--REORG.TODO/stdlib/l64a.c56
-rw-r--r--REORG.TODO/stdlib/labs.c28
-rw-r--r--REORG.TODO/stdlib/lcong48.c26
-rw-r--r--REORG.TODO/stdlib/lcong48_r.c36
-rw-r--r--REORG.TODO/stdlib/ldbl2mpn.c1
-rw-r--r--REORG.TODO/stdlib/ldiv.c31
-rw-r--r--REORG.TODO/stdlib/llabs.c29
-rw-r--r--REORG.TODO/stdlib/lldiv.c32
-rw-r--r--REORG.TODO/stdlib/longlong.h1773
-rw-r--r--REORG.TODO/stdlib/lrand48.c30
-rw-r--r--REORG.TODO/stdlib/lrand48_r.c30
-rw-r--r--REORG.TODO/stdlib/lshift.c78
-rw-r--r--REORG.TODO/stdlib/makecontext.c28
-rw-r--r--REORG.TODO/stdlib/mblen.c68
-rw-r--r--REORG.TODO/stdlib/mbstowcs.c39
-rw-r--r--REORG.TODO/stdlib/mbtowc.c72
-rw-r--r--REORG.TODO/stdlib/mod_1.c189
-rw-r--r--REORG.TODO/stdlib/monetary.h58
-rw-r--r--REORG.TODO/stdlib/mp_clz_tab.c36
-rw-r--r--REORG.TODO/stdlib/mpn2dbl.c29
-rw-r--r--REORG.TODO/stdlib/mpn2flt.c29
-rw-r--r--REORG.TODO/stdlib/mpn2ldbl.c1
-rw-r--r--REORG.TODO/stdlib/mrand48.c30
-rw-r--r--REORG.TODO/stdlib/mrand48_r.c29
-rw-r--r--REORG.TODO/stdlib/msort.c310
-rw-r--r--REORG.TODO/stdlib/mul.c142
-rw-r--r--REORG.TODO/stdlib/mul_1.c55
-rw-r--r--REORG.TODO/stdlib/mul_n.c360
-rw-r--r--REORG.TODO/stdlib/nrand48.c30
-rw-r--r--REORG.TODO/stdlib/nrand48_r.c37
-rw-r--r--REORG.TODO/stdlib/old_atexit.c8
-rw-r--r--REORG.TODO/stdlib/on_exit.c41
-rw-r--r--REORG.TODO/stdlib/putenv.c87
-rw-r--r--REORG.TODO/stdlib/qsort.c249
-rw-r--r--REORG.TODO/stdlib/quick_exit.c48
-rw-r--r--REORG.TODO/stdlib/rand.c28
-rw-r--r--REORG.TODO/stdlib/rand_r.c48
-rw-r--r--REORG.TODO/stdlib/random.c300
-rw-r--r--REORG.TODO/stdlib/random_r.c401
-rw-r--r--REORG.TODO/stdlib/rpmatch.c61
-rw-r--r--REORG.TODO/stdlib/rshift.c78
-rw-r--r--REORG.TODO/stdlib/secure-getenv.c36
-rw-r--r--REORG.TODO/stdlib/seed48.c28
-rw-r--r--REORG.TODO/stdlib/seed48_r.c39
-rw-r--r--REORG.TODO/stdlib/setcontext.c29
-rw-r--r--REORG.TODO/stdlib/setenv.c340
-rw-r--r--REORG.TODO/stdlib/srand48.c26
-rw-r--r--REORG.TODO/stdlib/srand48_r.c39
-rw-r--r--REORG.TODO/stdlib/stdlib.h911
-rw-r--r--REORG.TODO/stdlib/strfmon.c39
-rw-r--r--REORG.TODO/stdlib/strfmon_l.c625
-rw-r--r--REORG.TODO/stdlib/strfrom-skeleton.c155
-rw-r--r--REORG.TODO/stdlib/strfromd.c22
-rw-r--r--REORG.TODO/stdlib/strfromf.c22
-rw-r--r--REORG.TODO/stdlib/strfroml.c22
-rw-r--r--REORG.TODO/stdlib/strtod.c80
-rw-r--r--REORG.TODO/stdlib/strtod_l.c1787
-rw-r--r--REORG.TODO/stdlib/strtod_nan.c24
-rw-r--r--REORG.TODO/stdlib/strtod_nan_double.h30
-rw-r--r--REORG.TODO/stdlib/strtod_nan_float.h29
-rw-r--r--REORG.TODO/stdlib/strtod_nan_main.c63
-rw-r--r--REORG.TODO/stdlib/strtod_nan_narrow.h22
-rw-r--r--REORG.TODO/stdlib/strtod_nan_wide.h22
-rw-r--r--REORG.TODO/stdlib/strtof.c34
-rw-r--r--REORG.TODO/stdlib/strtof_l.c38
-rw-r--r--REORG.TODO/stdlib/strtof_nan.c24
-rw-r--r--REORG.TODO/stdlib/strtoimax.c1
-rw-r--r--REORG.TODO/stdlib/strtol.c109
-rw-r--r--REORG.TODO/stdlib/strtol_l.c551
-rw-r--r--REORG.TODO/stdlib/strtold.c64
-rw-r--r--REORG.TODO/stdlib/strtold_l.c65
-rw-r--r--REORG.TODO/stdlib/strtold_nan.c30
-rw-r--r--REORG.TODO/stdlib/strtoll.c33
-rw-r--r--REORG.TODO/stdlib/strtoll_l.c27
-rw-r--r--REORG.TODO/stdlib/strtoul.c20
-rw-r--r--REORG.TODO/stdlib/strtoul_l.c27
-rw-r--r--REORG.TODO/stdlib/strtoull.c33
-rw-r--r--REORG.TODO/stdlib/strtoull_l.c28
-rw-r--r--REORG.TODO/stdlib/strtoumax.c1
-rw-r--r--REORG.TODO/stdlib/sub_n.c53
-rw-r--r--REORG.TODO/stdlib/submul_1.c61
-rw-r--r--REORG.TODO/stdlib/swapcontext.c29
-rw-r--r--REORG.TODO/stdlib/sys/errno.h1
-rw-r--r--REORG.TODO/stdlib/sys/random.h42
-rw-r--r--REORG.TODO/stdlib/system.c35
-rw-r--r--REORG.TODO/stdlib/tens_in_limb.c31
-rw-r--r--REORG.TODO/stdlib/test-a64l.c80
-rw-r--r--REORG.TODO/stdlib/test-canon.c235
-rw-r--r--REORG.TODO/stdlib/test-canon2.c74
-rw-r--r--REORG.TODO/stdlib/testdiv.c39
-rw-r--r--REORG.TODO/stdlib/testdiv.input2
-rw-r--r--REORG.TODO/stdlib/testmb.c65
-rw-r--r--REORG.TODO/stdlib/testmb2.c31
-rw-r--r--REORG.TODO/stdlib/testrand.c52
-rw-r--r--REORG.TODO/stdlib/testsort.c36
-rw-r--r--REORG.TODO/stdlib/tst-atof1.c19
-rw-r--r--REORG.TODO/stdlib/tst-atof2.c55
-rw-r--r--REORG.TODO/stdlib/tst-bsearch.c153
-rw-r--r--REORG.TODO/stdlib/tst-empty-env.c58
-rw-r--r--REORG.TODO/stdlib/tst-environ.c229
-rw-r--r--REORG.TODO/stdlib/tst-fmtmsg.c85
-rwxr-xr-xREORG.TODO/stdlib/tst-fmtmsg.sh337
-rw-r--r--REORG.TODO/stdlib/tst-getrandom.c245
-rw-r--r--REORG.TODO/stdlib/tst-limits.c72
-rw-r--r--REORG.TODO/stdlib/tst-makecontext.c110
-rw-r--r--REORG.TODO/stdlib/tst-makecontext2.c79
-rw-r--r--REORG.TODO/stdlib/tst-makecontext3.c220
-rw-r--r--REORG.TODO/stdlib/tst-putenv.c18
-rw-r--r--REORG.TODO/stdlib/tst-putenvmod.c17
-rw-r--r--REORG.TODO/stdlib/tst-qsort.c55
-rw-r--r--REORG.TODO/stdlib/tst-qsort2.c89
-rw-r--r--REORG.TODO/stdlib/tst-quick_exit.cc47
-rw-r--r--REORG.TODO/stdlib/tst-rand48-2.c116
-rw-r--r--REORG.TODO/stdlib/tst-rand48.c393
-rw-r--r--REORG.TODO/stdlib/tst-random.c122
-rw-r--r--REORG.TODO/stdlib/tst-random2.c61
-rw-r--r--REORG.TODO/stdlib/tst-secure-getenv.c242
-rw-r--r--REORG.TODO/stdlib/tst-setcontext.c244
-rw-r--r--REORG.TODO/stdlib/tst-setcontext2.c230
-rw-r--r--REORG.TODO/stdlib/tst-setcontext3.c138
-rw-r--r--REORG.TODO/stdlib/tst-setcontext3.sh52
-rw-r--r--REORG.TODO/stdlib/tst-strfmon_l.c220
-rw-r--r--REORG.TODO/stdlib/tst-strfrom-locale.c91
-rw-r--r--REORG.TODO/stdlib/tst-strfrom.c91
-rw-r--r--REORG.TODO/stdlib/tst-strfrom.h120
-rw-r--r--REORG.TODO/stdlib/tst-strtod-nan-locale-main.c89
-rw-r--r--REORG.TODO/stdlib/tst-strtod-nan-locale.c25
-rw-r--r--REORG.TODO/stdlib/tst-strtod-overflow.c49
-rw-r--r--REORG.TODO/stdlib/tst-strtod-round-data150
-rw-r--r--REORG.TODO/stdlib/tst-strtod-round-data.h11584
-rw-r--r--REORG.TODO/stdlib/tst-strtod-round-skeleton.c252
-rw-r--r--REORG.TODO/stdlib/tst-strtod-round.c24
-rw-r--r--REORG.TODO/stdlib/tst-strtod-underflow.c225
-rw-r--r--REORG.TODO/stdlib/tst-strtod.c218
-rw-r--r--REORG.TODO/stdlib/tst-strtod.h49
-rw-r--r--REORG.TODO/stdlib/tst-strtod1i.c84
-rw-r--r--REORG.TODO/stdlib/tst-strtod2.c44
-rw-r--r--REORG.TODO/stdlib/tst-strtod3.c55
-rw-r--r--REORG.TODO/stdlib/tst-strtod4.c56
-rw-r--r--REORG.TODO/stdlib/tst-strtod5.c89
-rw-r--r--REORG.TODO/stdlib/tst-strtod5i.c100
-rw-r--r--REORG.TODO/stdlib/tst-strtod6.c57
-rw-r--r--REORG.TODO/stdlib/tst-strtol-locale-main.c87
-rw-r--r--REORG.TODO/stdlib/tst-strtol-locale.c25
-rw-r--r--REORG.TODO/stdlib/tst-strtol.c626
-rw-r--r--REORG.TODO/stdlib/tst-strtoll.c401
-rw-r--r--REORG.TODO/stdlib/tst-system.c30
-rw-r--r--REORG.TODO/stdlib/tst-thread-quick_exit.cc66
-rw-r--r--REORG.TODO/stdlib/tst-tininess.c69
-rw-r--r--REORG.TODO/stdlib/tst-tls-atexit-lib.c38
-rw-r--r--REORG.TODO/stdlib/tst-tls-atexit-nodelete.c24
-rw-r--r--REORG.TODO/stdlib/tst-tls-atexit.c156
-rw-r--r--REORG.TODO/stdlib/tst-unsetenv1.c12
-rw-r--r--REORG.TODO/stdlib/tst-width-stdint.c185
-rw-r--r--REORG.TODO/stdlib/tst-width.c87
-rw-r--r--REORG.TODO/stdlib/tst-xpg-basename.c69
-rw-r--r--REORG.TODO/stdlib/ucontext.h52
-rw-r--r--REORG.TODO/stdlib/udiv_qrnnd.c10
-rw-r--r--REORG.TODO/stdlib/wcstoimax.c1
-rw-r--r--REORG.TODO/stdlib/wcstombs.c35
-rw-r--r--REORG.TODO/stdlib/wcstoumax.c1
-rw-r--r--REORG.TODO/stdlib/wctomb.c57
-rw-r--r--REORG.TODO/stdlib/xpg_basename.c71
225 files changed, 37988 insertions, 0 deletions
diff --git a/REORG.TODO/stdlib/Depend b/REORG.TODO/stdlib/Depend
new file mode 100644
index 0000000000..f3e1156a4e
--- /dev/null
+++ b/REORG.TODO/stdlib/Depend
@@ -0,0 +1 @@
+localedata
diff --git a/REORG.TODO/stdlib/Makefile b/REORG.TODO/stdlib/Makefile
new file mode 100644
index 0000000000..9b0acce8cc
--- /dev/null
+++ b/REORG.TODO/stdlib/Makefile
@@ -0,0 +1,221 @@
+# Copyright (C) 1991-2017 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, see
+# <http://www.gnu.org/licenses/>.
+
+#
+# Makefile for stdlib routines
+#
+subdir := stdlib
+
+include ../Makeconfig
+
+headers := stdlib.h bits/stdlib.h bits/stdlib-ldbl.h bits/stdlib-float.h \
+ monetary.h bits/monetary-ldbl.h \
+ inttypes.h stdint.h bits/wordsize.h \
+ errno.h sys/errno.h bits/errno.h \
+ ucontext.h sys/ucontext.h \
+ alloca.h fmtmsg.h \
+ bits/stdlib-bsearch.h sys/random.h bits/stdint-intn.h \
+ bits/stdint-uintn.h
+
+routines := \
+ atof atoi atol atoll \
+ abort \
+ bsearch qsort msort \
+ getenv putenv setenv secure-getenv \
+ exit on_exit atexit cxa_atexit cxa_finalize old_atexit \
+ quick_exit at_quick_exit cxa_at_quick_exit cxa_thread_atexit_impl \
+ abs labs llabs \
+ div ldiv lldiv \
+ mblen mbstowcs mbtowc wcstombs wctomb \
+ random random_r rand rand_r \
+ drand48 erand48 lrand48 nrand48 mrand48 jrand48 \
+ srand48 seed48 lcong48 \
+ drand48_r erand48_r lrand48_r nrand48_r mrand48_r jrand48_r \
+ srand48_r seed48_r lcong48_r \
+ drand48-iter getrandom getentropy \
+ strfromf strfromd strfroml \
+ strtol strtoul strtoll strtoull \
+ strtol_l strtoul_l strtoll_l strtoull_l \
+ strtof strtod strtold \
+ strtof_l strtod_l strtold_l \
+ strtof_nan strtod_nan strtold_nan \
+ system canonicalize \
+ a64l l64a \
+ rpmatch strfmon strfmon_l getsubopt xpg_basename fmtmsg \
+ strtoimax strtoumax wcstoimax wcstoumax \
+ getcontext setcontext makecontext swapcontext
+aux = grouping groupingwc tens_in_limb
+
+# These routines will be omitted from the libc shared object.
+# Instead the static object files will be included in a special archive
+# linked against when the shared library will be used.
+static-only-routines = atexit at_quick_exit
+
+test-srcs := tst-fmtmsg
+tests := tst-strtol tst-strtod testmb testrand testsort testdiv \
+ test-canon test-canon2 tst-strtoll tst-environ \
+ tst-xpg-basename tst-random tst-random2 tst-bsearch \
+ tst-limits tst-rand48 bug-strtod tst-setcontext \
+ tst-setcontext2 test-a64l tst-qsort tst-system testmb2 \
+ bug-strtod2 tst-atof1 tst-atof2 tst-strtod2 \
+ tst-rand48-2 tst-makecontext tst-strtod5 \
+ tst-qsort2 tst-makecontext2 tst-strtod6 tst-unsetenv1 \
+ tst-makecontext3 bug-getcontext bug-fmtmsg1 \
+ tst-secure-getenv tst-strtod-overflow tst-strtod-round \
+ tst-tininess tst-strtod-underflow tst-setcontext3 \
+ tst-strtol-locale tst-strtod-nan-locale tst-strfmon_l \
+ tst-quick_exit tst-thread-quick_exit tst-width \
+ tst-width-stdint tst-strfrom tst-strfrom-locale \
+ tst-getrandom
+tests-internal := tst-strtod1i tst-strtod3 tst-strtod4 tst-strtod5i \
+ tst-tls-atexit tst-tls-atexit-nodelete
+tests-static := tst-secure-getenv
+
+ifeq ($(build-hardcoded-path-in-tests),yes)
+tests += tst-empty-env
+endif
+
+ifeq ($(have-cxx-thread_local),yes)
+CFLAGS-tst-quick_exit.o = -std=c++11
+LDLIBS-tst-quick_exit = -lstdc++
+CFLAGS-tst-thread-quick_exit.o = -std=c++11
+LDLIBS-tst-thread-quick_exit = -lstdc++
+$(objpfx)tst-thread-quick_exit: $(shared-thread-library)
+else
+tests-unsupported += tst-quick_exit tst-thread-quick_exit
+endif
+
+modules-names = tst-tls-atexit-lib
+extra-test-objs += $(addsuffix .os, $(modules-names))
+
+ifeq ($(build-shared),yes)
+tests += tst-putenv
+endif
+
+# Several mpn functions from GNU MP are used by the strtod function.
+mpn-routines := inlines add_n addmul_1 cmp divmod_1 divrem udiv_qrnnd \
+ lshift rshift mod_1 mul mul_1 mul_n sub_n submul_1
+mpn-headers = longlong.h gmp.h gmp-impl.h gmp-mparam.h asm-syntax.h
+
+routines := $(strip $(routines) $(mpn-routines)) \
+ dbl2mpn ldbl2mpn \
+ mpn2flt mpn2dbl mpn2ldbl
+aux += fpioconst mp_clz_tab
+
+tests-extras += tst-putenvmod
+extra-test-objs += tst-putenvmod.os
+
+generated += isomac isomac.out tst-putenvmod.so
+
+CFLAGS-bsearch.c = $(uses-callbacks)
+CFLAGS-msort.c = $(uses-callbacks)
+CFLAGS-qsort.c = $(uses-callbacks)
+CFLAGS-system.c = -fexceptions
+CFLAGS-system.os = -fomit-frame-pointer
+CFLAGS-fmtmsg.c = -fexceptions
+
+CFLAGS-strfmon.c = $(libio-mtsafe)
+CFLAGS-strfmon_l.c = $(libio-mtsafe)
+
+# The strfrom class of functions call __printf_fp in order to convert the
+# floating-point value to characters. This requires the value of IO_MTSAFE_IO.
+CFLAGS-strfromd.c = $(libio-mtsafe)
+CFLAGS-strfromf.c = $(libio-mtsafe)
+CFLAGS-strfroml.c = $(libio-mtsafe)
+
+CFLAGS-tst-bsearch.c = $(stack-align-test-flags)
+CFLAGS-tst-qsort.c = $(stack-align-test-flags)
+CFLAGS-tst-makecontext.c += -funwind-tables
+CFLAGS-tst-makecontext2.c = $(stack-align-test-flags)
+
+# Run a test on the header files we use.
+tests-special += $(objpfx)isomac.out
+
+ifeq ($(run-built-tests),yes)
+tests-special += $(objpfx)tst-fmtmsg.out
+endif
+
+include ../Rules
+
+ifeq ($(run-built-tests),yes)
+LOCALES := cs_CZ.UTF-8 de_DE.UTF-8 en_US.ISO-8859-1 tr_TR.UTF-8 \
+ tr_TR.ISO-8859-9 tg_TJ.UTF-8 te_IN.UTF-8 bn_IN.UTF-8 \
+ el_GR.UTF-8
+include ../gen-locales.mk
+
+$(objpfx)bug-strtod2.out: $(gen-locales)
+$(objpfx)testmb2.out: $(gen-locales)
+$(objpfx)tst-strtod.out: $(gen-locales)
+$(objpfx)tst-strtod3.out: $(gen-locales)
+$(objpfx)tst-strtod4.out: $(gen-locales)
+$(objpfx)tst-strtod5.out: $(gen-locales)
+$(objpfx)tst-strtol-locale.out: $(gen-locales)
+$(objpfx)tst-strtod-nan-locale.out: $(gen-locales)
+$(objpfx)tst-strfmon_l.out: $(gen-locales)
+$(objpfx)tst-strfrom.out: $(gen-locales)
+$(objpfx)tst-strfrom-locale.out: $(gen-locales)
+endif
+
+# Testdir has to be named stdlib and needs to be writable
+test-canon-ARGS = --test-dir=${common-objpfx}stdlib
+
+bug-fmtmsg1-ENV = SEV_LEVEL=foo,11,newsev
+
+$(objpfx)isomac.out: $(objpfx)isomac
+ $(dir $<)$(notdir $<) '$(CC)' \
+ '-I../include $(+sysdep-includes) $(sysincludes) -I..' > $<.out; \
+ $(evaluate-test)
+
+isomac-CFLAGS = -O
+$(objpfx)isomac: isomac.c
+ $(native-compile)
+
+$(objpfx)tst-fmtmsg.out: tst-fmtmsg.sh $(objpfx)tst-fmtmsg
+ $(SHELL) $< $(common-objpfx) '$(test-program-prefix-before-env)' \
+ '$(run-program-env)' '$(test-program-prefix-after-env)' \
+ $(common-objpfx)stdlib/; \
+ $(evaluate-test)
+
+$(objpfx)tst-putenv: $(objpfx)tst-putenvmod.so
+LDFLAGS-tst-putenv = $(no-as-needed)
+
+$(objpfx)tst-putenvmod.so: $(objpfx)tst-putenvmod.os $(link-libc-deps)
+ $(build-module)
+libof-tst-putenvmod = extramodules
+
+$(objpfx)bug-getcontext: $(libm)
+$(objpfx)tst-strtod-round: $(libm)
+$(objpfx)tst-tininess: $(libm)
+$(objpfx)tst-strtod-underflow: $(libm)
+$(objpfx)tst-strtod6: $(libm)
+$(objpfx)tst-strtod-nan-locale: $(libm)
+
+tst-tls-atexit-lib.so-no-z-defs = yes
+
+$(objpfx)tst-tls-atexit: $(shared-thread-library) $(libdl)
+$(objpfx)tst-tls-atexit.out: $(objpfx)tst-tls-atexit-lib.so
+
+$(objpfx)tst-tls-atexit-nodelete: $(shared-thread-library) $(libdl)
+$(objpfx)tst-tls-atexit-nodelete.out: $(objpfx)tst-tls-atexit-lib.so
+
+$(objpfx)tst-setcontext3.out: tst-setcontext3.sh $(objpfx)tst-setcontext3
+ $(SHELL) $< $(common-objpfx) '$(test-program-prefix-before-env)' \
+ '$(run-program-env)' '$(test-program-prefix-after-env)' \
+ $(common-objpfx)stdlib/; \
+ $(evaluate-test)
+
+$(objpfx)tst-makecontext: $(libdl)
diff --git a/REORG.TODO/stdlib/Versions b/REORG.TODO/stdlib/Versions
new file mode 100644
index 0000000000..9cade20a06
--- /dev/null
+++ b/REORG.TODO/stdlib/Versions
@@ -0,0 +1,135 @@
+libc {
+ GLIBC_2.0 {
+ # functions with required interface outside normal name space
+ __xpg_basename;
+
+ # functions used in inline functions or macros
+ __strtod_internal; __strtof_internal; __strtold_internal;
+ __strtol_internal; __strtoll_internal;
+ __strtoul_internal; __strtoull_internal;
+ # functions formerly so used (compatibility symbols)
+ __strtoq_internal; __strtouq_internal;
+
+ # compatibility symbol
+ __secure_getenv;
+
+ # a*
+ a64l; abort; abs; atexit; atof; atoi; atol; atoll;
+
+ # b*
+ bsearch;
+
+ # c*
+ canonicalize_file_name; clearenv;
+
+ # d*
+ div; drand48; drand48_r;
+
+ # e*
+ erand48; erand48_r; exit;
+
+ # g*
+ getenv; getsubopt;
+
+ # i*
+ initstate; initstate_r;
+
+ # l*
+ l64a; labs; lcong48; lcong48_r; ldiv; llabs; lldiv; lrand48; lrand48_r;
+
+ # m*
+ mblen; mbrlen; mbrtowc; mbsinit; mbsnrtowcs; mbsrtowcs; mbstowcs;
+ mbtowc; mcheck; mcount; mrand48; mrand48_r;
+
+ # n*
+ nrand48; nrand48_r;
+
+ # o*
+ on_exit;
+
+ # p*
+ putenv;
+
+ # q*
+ qsort;
+
+ # r*
+ rand; rand_r; random; random_r; realpath; rpmatch;
+
+ # s*
+ seed48; seed48_r; setcontext; setenv; setstate; setstate_r; srand; srand48;
+ srand48_r; srandom; srandom_r; step; strfmon; strtod; strtof; strtol;
+ strtold; strtoll; strtoq; strtoul; strtoull; strtouq; system;
+
+ # u*
+ unsetenv;
+
+ # w*
+ wcstombs; wctomb;
+ }
+ GLIBC_2.1 {
+ # a*
+ addseverity;
+
+ # f*
+ fmtmsg;
+
+ # g*
+ getcontext;
+
+ # m*
+ makecontext;
+
+ # s*
+ strtoimax; strtoumax; swapcontext;
+ }
+ GLIBC_2.1.1 {
+ # _*
+ _Exit;
+
+ # i*
+ imaxabs; imaxdiv;
+ }
+ GLIBC_2.1.3 {
+ # used by new G++ ABI
+ __cxa_atexit; __cxa_finalize;
+ }
+ GLIBC_2.3 {
+ # Silent change in SUS.
+ realpath;
+ }
+ GLIBC_2.8 {
+ qsort_r;
+ }
+ GLIBC_2.10 {
+ quick_exit; __cxa_at_quick_exit;
+ }
+ GLIBC_2.13 {
+ __fentry__;
+ }
+ GLIBC_2.17 {
+ secure_getenv;
+ }
+ GLIBC_2.18 {
+ __cxa_thread_atexit_impl;
+ }
+ GLIBC_2.24 {
+ quick_exit;
+ }
+ GLIBC_2.25 {
+ # s*
+ strfromd; strfromf; strfroml;
+ getrandom; getentropy;
+ }
+ GLIBC_PRIVATE {
+ # functions which have an additional interface since they are
+ # are cancelable.
+ __libc_system;
+ # Variable which needs a dynamic symbol table entry.
+ __abort_msg;
+ # Used from other libraries
+ __libc_secure_getenv;
+ __call_tls_dtors;
+ __strtof_nan; __strtod_nan; __strtold_nan;
+ }
+}
diff --git a/REORG.TODO/stdlib/a64l.c b/REORG.TODO/stdlib/a64l.c
new file mode 100644
index 0000000000..55de3129d3
--- /dev/null
+++ b/REORG.TODO/stdlib/a64l.c
@@ -0,0 +1,64 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.org>, August 1995.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+#define TABLE_BASE 0x2e
+#define TABLE_SIZE 0x4d
+
+#define XX ((char)0x40)
+
+
+static const char a64l_table[TABLE_SIZE] =
+{
+ /* 0x2e */ 0, 1,
+ /* 0x30 */ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, XX, XX, XX, XX, XX, XX,
+ /* 0x40 */ XX, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
+ /* 0x50 */ 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, XX, XX, XX, XX, XX,
+ /* 0x60 */ XX, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ /* 0x70 */ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63
+};
+
+
+long int
+a64l (const char *string)
+{
+ const char *ptr = string;
+ unsigned long int result = 0ul;
+ const char *end = ptr + 6;
+ int shift = 0;
+
+ do
+ {
+ unsigned index;
+ unsigned value;
+
+ index = *ptr - TABLE_BASE;
+ if ((unsigned int) index >= TABLE_SIZE)
+ break;
+ value = (int) a64l_table[index];
+ if (value == (int) XX)
+ break;
+ ++ptr;
+ result |= value << shift;
+ shift += 6;
+ }
+ while (ptr != end);
+
+ return (long int) result;
+}
diff --git a/REORG.TODO/stdlib/abort.c b/REORG.TODO/stdlib/abort.c
new file mode 100644
index 0000000000..19882f3e3d
--- /dev/null
+++ b/REORG.TODO/stdlib/abort.c
@@ -0,0 +1,142 @@
+/* Copyright (C) 1991-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <libc-lock.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sigsetops.h>
+
+/* Try to get a machine dependent instruction which will make the
+ program crash. This is used in case everything else fails. */
+#include <abort-instr.h>
+#ifndef ABORT_INSTRUCTION
+/* No such instruction is available. */
+# define ABORT_INSTRUCTION
+#endif
+
+#include <libio/libioP.h>
+#define fflush(s) _IO_flush_all_lockp (0)
+
+/* Exported variable to locate abort message in core files etc. */
+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
+ already got. */
+static int stage;
+
+/* We should be prepared for multiple threads trying to run abort. */
+__libc_lock_define_initialized_recursive (static, lock);
+
+
+/* Cause an abnormal program termination with core-dump. */
+void
+abort (void)
+{
+ struct sigaction act;
+ sigset_t sigs;
+
+ /* First acquire the lock. */
+ __libc_lock_lock_recursive (lock);
+
+ /* Now it's for sure we are alone. But recursive calls are possible. */
+
+ /* Unblock SIGABRT. */
+ if (stage == 0)
+ {
+ ++stage;
+ __sigemptyset (&sigs);
+ __sigaddset (&sigs, SIGABRT);
+ __sigprocmask (SIG_UNBLOCK, &sigs, 0);
+ }
+
+ /* Flush all streams. We cannot close them now because the user
+ might have registered a handler for SIGABRT. */
+ if (stage == 1)
+ {
+ ++stage;
+ fflush (NULL);
+ }
+
+ /* Send signal which possibly calls a user handler. */
+ if (stage == 2)
+ {
+ /* This stage is special: we must allow repeated calls of
+ `abort' when a user defined handler for SIGABRT is installed.
+ This is risky since the `raise' implementation might also
+ fail but I don't see another possibility. */
+ int save_stage = stage;
+
+ stage = 0;
+ __libc_lock_unlock_recursive (lock);
+
+ raise (SIGABRT);
+
+ __libc_lock_lock_recursive (lock);
+ stage = save_stage + 1;
+ }
+
+ /* There was a handler installed. Now remove it. */
+ if (stage == 3)
+ {
+ ++stage;
+ memset (&act, '\0', sizeof (struct sigaction));
+ act.sa_handler = SIG_DFL;
+ __sigfillset (&act.sa_mask);
+ act.sa_flags = 0;
+ __sigaction (SIGABRT, &act, NULL);
+ }
+
+ /* Now close the streams which also flushes the output the user
+ defined handler might has produced. */
+ if (stage == 4)
+ {
+ ++stage;
+ __fcloseall ();
+ }
+
+ /* Try again. */
+ if (stage == 5)
+ {
+ ++stage;
+ raise (SIGABRT);
+ }
+
+ /* Now try to abort using the system specific command. */
+ if (stage == 6)
+ {
+ ++stage;
+ ABORT_INSTRUCTION;
+ }
+
+ /* If we can't signal ourselves and the abort instruction failed, exit. */
+ if (stage == 7)
+ {
+ ++stage;
+ _exit (127);
+ }
+
+ /* If even this fails try to use the provided instruction to crash
+ or otherwise make sure we never return. */
+ while (1)
+ /* Try for ever and ever. */
+ ABORT_INSTRUCTION;
+}
+libc_hidden_def (abort)
diff --git a/REORG.TODO/stdlib/abs.c b/REORG.TODO/stdlib/abs.c
new file mode 100644
index 0000000000..dad7403658
--- /dev/null
+++ b/REORG.TODO/stdlib/abs.c
@@ -0,0 +1,27 @@
+/* Copyright (C) 1991-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+#undef abs
+
+/* Return the absolute value of I. */
+int
+abs (int i)
+{
+ return i < 0 ? -i : i;
+}
diff --git a/REORG.TODO/stdlib/add_n.c b/REORG.TODO/stdlib/add_n.c
new file mode 100644
index 0000000000..12ded53c58
--- /dev/null
+++ b/REORG.TODO/stdlib/add_n.c
@@ -0,0 +1,53 @@
+/* mpn_add_n -- Add two limb vectors of equal, non-zero length.
+
+Copyright (C) 1992-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP 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 MP 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 MP Library; see the file COPYING.LIB. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+
+mp_limb_t
+mpn_add_n (mp_ptr res_ptr, mp_srcptr s1_ptr, mp_srcptr s2_ptr, mp_size_t size)
+{
+ register mp_limb_t x, y, cy;
+ register mp_size_t j;
+
+ /* The loop counter and index J goes from -SIZE to -1. This way
+ the loop becomes faster. */
+ j = -size;
+
+ /* Offset the base pointers to compensate for the negative indices. */
+ s1_ptr -= j;
+ s2_ptr -= j;
+ res_ptr -= j;
+
+ cy = 0;
+ do
+ {
+ y = s2_ptr[j];
+ x = s1_ptr[j];
+ y += cy; /* add previous carry to one addend */
+ cy = (y < cy); /* get out carry from that addition */
+ y = x + y; /* add other addend */
+ cy = (y < x) + cy; /* get out carry from that add, combine */
+ res_ptr[j] = y;
+ }
+ while (++j != 0);
+
+ return cy;
+}
diff --git a/REORG.TODO/stdlib/addmul_1.c b/REORG.TODO/stdlib/addmul_1.c
new file mode 100644
index 0000000000..9eaea8ba33
--- /dev/null
+++ b/REORG.TODO/stdlib/addmul_1.c
@@ -0,0 +1,61 @@
+/* mpn_addmul_1 -- multiply the S1_SIZE long limb vector pointed to by S1_PTR
+ by S2_LIMB, add the S1_SIZE least significant limbs of the product to the
+ limb vector pointed to by RES_PTR. Return the most significant limb of
+ the product, adjusted for carry-out from the addition.
+
+Copyright (C) 1992-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP 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 MP 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 MP Library; see the file COPYING.LIB. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+#include "longlong.h"
+
+mp_limb_t
+mpn_addmul_1 (register mp_ptr res_ptr, register mp_srcptr s1_ptr,
+ mp_size_t s1_size, register mp_limb_t s2_limb)
+{
+ register mp_limb_t cy_limb;
+ register mp_size_t j;
+ register mp_limb_t prod_high, prod_low;
+ register mp_limb_t x;
+
+ /* The loop counter and index J goes from -SIZE to -1. This way
+ the loop becomes faster. */
+ j = -s1_size;
+
+ /* Offset the base pointers to compensate for the negative indices. */
+ res_ptr -= j;
+ s1_ptr -= j;
+
+ cy_limb = 0;
+ do
+ {
+ umul_ppmm (prod_high, prod_low, s1_ptr[j], s2_limb);
+
+ prod_low += cy_limb;
+ cy_limb = (prod_low < cy_limb) + prod_high;
+
+ x = res_ptr[j];
+ prod_low = x + prod_low;
+ cy_limb += (prod_low < x);
+ res_ptr[j] = prod_low;
+ }
+ while (++j != 0);
+
+ return cy_limb;
+}
diff --git a/REORG.TODO/stdlib/alloca.h b/REORG.TODO/stdlib/alloca.h
new file mode 100644
index 0000000000..89a1a90a4f
--- /dev/null
+++ b/REORG.TODO/stdlib/alloca.h
@@ -0,0 +1,40 @@
+/* Copyright (C) 1992-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef _ALLOCA_H
+#define _ALLOCA_H 1
+
+#include <features.h>
+
+#define __need_size_t
+#include <stddef.h>
+
+__BEGIN_DECLS
+
+/* Remove any previous definitions. */
+#undef alloca
+
+/* Allocate a block that will be freed when the calling function exits. */
+extern void *alloca (size_t __size) __THROW;
+
+#ifdef __GNUC__
+# define alloca(size) __builtin_alloca (size)
+#endif /* GCC. */
+
+__END_DECLS
+
+#endif /* alloca.h */
diff --git a/REORG.TODO/stdlib/at_quick_exit.c b/REORG.TODO/stdlib/at_quick_exit.c
new file mode 100644
index 0000000000..3b74d0a688
--- /dev/null
+++ b/REORG.TODO/stdlib/at_quick_exit.c
@@ -0,0 +1,50 @@
+/* Copyright (C) 1991-2017 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.
+
+ In addition to the permissions in the GNU Lesser General Public
+ License, the Free Software Foundation gives you unlimited
+ permission to link the compiled version of this file with other
+ programs, and to distribute those programs without any restriction
+ coming from the use of this file. (The GNU Lesser General Public
+ License restrictions do apply in other respects; for example, they
+ cover modification of the file, and distribution when not linked
+ into another program.)
+
+ Note that people who make modified versions of this file are not
+ obligated to grant this special exception for their modified
+ versions; it is their choice whether to do so. The GNU Lesser
+ General Public License gives permission to release a modified
+ version without this exception; this exception also makes it
+ possible to release a modified version which carries forward this
+ exception.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include "exit.h"
+
+
+/* This is defined by newer gcc version unique for each module. */
+extern void *__dso_handle __attribute__ ((__weak__));
+
+
+/* Register FUNC to be executed by `quick_exit'. */
+int
+attribute_hidden
+at_quick_exit (void (*func) (void))
+{
+ return __cxa_at_quick_exit ((void (*) (void *)) func,
+ &__dso_handle == NULL ? NULL : __dso_handle);
+}
diff --git a/REORG.TODO/stdlib/atexit.c b/REORG.TODO/stdlib/atexit.c
new file mode 100644
index 0000000000..f28b6ba1b7
--- /dev/null
+++ b/REORG.TODO/stdlib/atexit.c
@@ -0,0 +1,52 @@
+/* Copyright (C) 1991-2017 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.
+
+ In addition to the permissions in the GNU Lesser General Public
+ License, the Free Software Foundation gives you unlimited
+ permission to link the compiled version of this file with other
+ programs, and to distribute those programs without any restriction
+ coming from the use of this file. (The GNU Lesser General Public
+ License restrictions do apply in other respects; for example, they
+ cover modification of the file, and distribution when not linked
+ into another program.)
+
+ Note that people who make modified versions of this file are not
+ obligated to grant this special exception for their modified
+ versions; it is their choice whether to do so. The GNU Lesser
+ General Public License gives permission to release a modified
+ version without this exception; this exception also makes it
+ possible to release a modified version which carries forward this
+ exception.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include "exit.h"
+
+
+/* This is defined by newer gcc version unique for each module. */
+extern void *__dso_handle __attribute__ ((__weak__));
+
+
+/* Register FUNC to be executed by `exit'. */
+int
+#ifndef atexit
+attribute_hidden
+#endif
+atexit (void (*func) (void))
+{
+ return __cxa_atexit ((void (*) (void *)) func, NULL,
+ &__dso_handle == NULL ? NULL : __dso_handle);
+}
diff --git a/REORG.TODO/stdlib/atof.c b/REORG.TODO/stdlib/atof.c
new file mode 100644
index 0000000000..a21ce58924
--- /dev/null
+++ b/REORG.TODO/stdlib/atof.c
@@ -0,0 +1,28 @@
+/* Copyright (C) 1991-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+#undef atof
+
+
+/* Convert a string to a double. */
+double
+atof (const char *nptr)
+{
+ return strtod (nptr, (char **) NULL);
+}
diff --git a/REORG.TODO/stdlib/atoi.c b/REORG.TODO/stdlib/atoi.c
new file mode 100644
index 0000000000..f8593423a6
--- /dev/null
+++ b/REORG.TODO/stdlib/atoi.c
@@ -0,0 +1,28 @@
+/* Copyright (C) 1991-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+#undef atoi
+
+
+/* Convert a string to an int. */
+int
+atoi (const char *nptr)
+{
+ return (int) strtol (nptr, (char **) NULL, 10);
+}
diff --git a/REORG.TODO/stdlib/atol.c b/REORG.TODO/stdlib/atol.c
new file mode 100644
index 0000000000..8ca34c0803
--- /dev/null
+++ b/REORG.TODO/stdlib/atol.c
@@ -0,0 +1,28 @@
+/* Copyright (C) 1991-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+#undef atol
+
+
+/* Convert a string to a long int. */
+long int
+atol (const char *nptr)
+{
+ return strtol (nptr, (char **) NULL, 10);
+}
diff --git a/REORG.TODO/stdlib/atoll.c b/REORG.TODO/stdlib/atoll.c
new file mode 100644
index 0000000000..41b36a016e
--- /dev/null
+++ b/REORG.TODO/stdlib/atoll.c
@@ -0,0 +1,28 @@
+/* Copyright (C) 1991-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+#undef atoll
+
+
+/* Convert a string to a long long int. */
+long long int
+atoll (const char *nptr)
+{
+ return strtoll (nptr, (char **) NULL, 10);
+}
diff --git a/REORG.TODO/stdlib/bits/monetary-ldbl.h b/REORG.TODO/stdlib/bits/monetary-ldbl.h
new file mode 100644
index 0000000000..d042ac5af1
--- /dev/null
+++ b/REORG.TODO/stdlib/bits/monetary-ldbl.h
@@ -0,0 +1,27 @@
+/* -mlong-double-64 compatibility mode for monetary functions.
+ Copyright (C) 2006-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef _MONETARY_H
+# error "Never include <bits/monetary-ldbl.h> directly; use <monetary.h> instead."
+#endif
+
+__LDBL_REDIR_DECL (strfmon)
+
+#ifdef __USE_GNU
+__LDBL_REDIR_DECL (strfmon_l)
+#endif
diff --git a/REORG.TODO/stdlib/bits/stdlib-float.h b/REORG.TODO/stdlib/bits/stdlib-float.h
new file mode 100644
index 0000000000..aba8e94596
--- /dev/null
+++ b/REORG.TODO/stdlib/bits/stdlib-float.h
@@ -0,0 +1,29 @@
+/* Floating-point inline functions for stdlib.h.
+ Copyright (C) 2012-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef _STDLIB_H
+# error "Never use <bits/stdlib-float.h> directly; include <stdlib.h> instead."
+#endif
+
+#ifdef __USE_EXTERN_INLINES
+__extern_inline double
+__NTH (atof (const char *__nptr))
+{
+ return strtod (__nptr, (char **) NULL);
+}
+#endif /* Optimizing and Inlining. */
diff --git a/REORG.TODO/stdlib/bits/stdlib-ldbl.h b/REORG.TODO/stdlib/bits/stdlib-ldbl.h
new file mode 100644
index 0000000000..2f568db45a
--- /dev/null
+++ b/REORG.TODO/stdlib/bits/stdlib-ldbl.h
@@ -0,0 +1,41 @@
+/* -mlong-double-64 compatibility mode for <stdlib.h> functions.
+ Copyright (C) 2006-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef _STDLIB_H
+# error "Never include <bits/stdlib-ldbl.h> directly; use <stdlib.h> instead."
+#endif
+
+#ifdef __USE_ISOC99
+__LDBL_REDIR1_DECL (strtold, strtod)
+#endif
+
+#ifdef __USE_GNU
+__LDBL_REDIR1_DECL (strtold_l, strtod_l)
+#endif
+
+#if __GLIBC_USE (IEC_60559_BFP_EXT)
+__LDBL_REDIR1_DECL (strfroml, strfromd)
+#endif
+
+#ifdef __USE_MISC
+__LDBL_REDIR1_DECL (qecvt, ecvt)
+__LDBL_REDIR1_DECL (qfcvt, fcvt)
+__LDBL_REDIR1_DECL (qgcvt, gcvt)
+__LDBL_REDIR1_DECL (qecvt_r, ecvt_r)
+__LDBL_REDIR1_DECL (qfcvt_r, fcvt_r)
+#endif
diff --git a/REORG.TODO/stdlib/bits/stdlib.h b/REORG.TODO/stdlib/bits/stdlib.h
new file mode 100644
index 0000000000..864284fc74
--- /dev/null
+++ b/REORG.TODO/stdlib/bits/stdlib.h
@@ -0,0 +1,155 @@
+/* Checking macros for stdlib functions.
+ Copyright (C) 2005-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef _STDLIB_H
+# error "Never include <bits/stdlib.h> directly; use <stdlib.h> instead."
+#endif
+
+extern char *__realpath_chk (const char *__restrict __name,
+ char *__restrict __resolved,
+ size_t __resolvedlen) __THROW __wur;
+extern char *__REDIRECT_NTH (__realpath_alias,
+ (const char *__restrict __name,
+ char *__restrict __resolved), realpath) __wur;
+extern char *__REDIRECT_NTH (__realpath_chk_warn,
+ (const char *__restrict __name,
+ char *__restrict __resolved,
+ size_t __resolvedlen), __realpath_chk) __wur
+ __warnattr ("second argument of realpath must be either NULL or at "
+ "least PATH_MAX bytes long buffer");
+
+__fortify_function __wur char *
+__NTH (realpath (const char *__restrict __name, char *__restrict __resolved))
+{
+ if (__bos (__resolved) != (size_t) -1)
+ {
+#if defined _LIBC_LIMITS_H_ && defined PATH_MAX
+ if (__bos (__resolved) < PATH_MAX)
+ return __realpath_chk_warn (__name, __resolved, __bos (__resolved));
+#endif
+ return __realpath_chk (__name, __resolved, __bos (__resolved));
+ }
+
+ return __realpath_alias (__name, __resolved);
+}
+
+
+extern int __ptsname_r_chk (int __fd, char *__buf, size_t __buflen,
+ size_t __nreal) __THROW __nonnull ((2));
+extern int __REDIRECT_NTH (__ptsname_r_alias, (int __fd, char *__buf,
+ size_t __buflen), ptsname_r)
+ __nonnull ((2));
+extern int __REDIRECT_NTH (__ptsname_r_chk_warn,
+ (int __fd, char *__buf, size_t __buflen,
+ size_t __nreal), __ptsname_r_chk)
+ __nonnull ((2)) __warnattr ("ptsname_r called with buflen bigger than "
+ "size of buf");
+
+__fortify_function int
+__NTH (ptsname_r (int __fd, char *__buf, size_t __buflen))
+{
+ if (__bos (__buf) != (size_t) -1)
+ {
+ if (!__builtin_constant_p (__buflen))
+ return __ptsname_r_chk (__fd, __buf, __buflen, __bos (__buf));
+ if (__buflen > __bos (__buf))
+ return __ptsname_r_chk_warn (__fd, __buf, __buflen, __bos (__buf));
+ }
+ return __ptsname_r_alias (__fd, __buf, __buflen);
+}
+
+
+extern int __wctomb_chk (char *__s, wchar_t __wchar, size_t __buflen)
+ __THROW __wur;
+extern int __REDIRECT_NTH (__wctomb_alias, (char *__s, wchar_t __wchar),
+ wctomb) __wur;
+
+__fortify_function __wur int
+__NTH (wctomb (char *__s, wchar_t __wchar))
+{
+ /* 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
+ version here. */
+#define __STDLIB_MB_LEN_MAX 16
+#if defined MB_LEN_MAX && MB_LEN_MAX != __STDLIB_MB_LEN_MAX
+# error "Assumed value of MB_LEN_MAX wrong"
+#endif
+ if (__bos (__s) != (size_t) -1 && __STDLIB_MB_LEN_MAX > __bos (__s))
+ return __wctomb_chk (__s, __wchar, __bos (__s));
+ return __wctomb_alias (__s, __wchar);
+}
+
+
+extern size_t __mbstowcs_chk (wchar_t *__restrict __dst,
+ const char *__restrict __src,
+ size_t __len, size_t __dstlen) __THROW;
+extern size_t __REDIRECT_NTH (__mbstowcs_alias,
+ (wchar_t *__restrict __dst,
+ const char *__restrict __src,
+ size_t __len), mbstowcs);
+extern size_t __REDIRECT_NTH (__mbstowcs_chk_warn,
+ (wchar_t *__restrict __dst,
+ const char *__restrict __src,
+ size_t __len, size_t __dstlen), __mbstowcs_chk)
+ __warnattr ("mbstowcs called with dst buffer smaller than len "
+ "* sizeof (wchar_t)");
+
+__fortify_function size_t
+__NTH (mbstowcs (wchar_t *__restrict __dst, const char *__restrict __src,
+ size_t __len))
+{
+ if (__bos (__dst) != (size_t) -1)
+ {
+ if (!__builtin_constant_p (__len))
+ return __mbstowcs_chk (__dst, __src, __len,
+ __bos (__dst) / sizeof (wchar_t));
+
+ if (__len > __bos (__dst) / sizeof (wchar_t))
+ return __mbstowcs_chk_warn (__dst, __src, __len,
+ __bos (__dst) / sizeof (wchar_t));
+ }
+ return __mbstowcs_alias (__dst, __src, __len);
+}
+
+
+extern size_t __wcstombs_chk (char *__restrict __dst,
+ const wchar_t *__restrict __src,
+ size_t __len, size_t __dstlen) __THROW;
+extern size_t __REDIRECT_NTH (__wcstombs_alias,
+ (char *__restrict __dst,
+ const wchar_t *__restrict __src,
+ size_t __len), wcstombs);
+extern size_t __REDIRECT_NTH (__wcstombs_chk_warn,
+ (char *__restrict __dst,
+ const wchar_t *__restrict __src,
+ size_t __len, size_t __dstlen), __wcstombs_chk)
+ __warnattr ("wcstombs called with dst buffer smaller than len");
+
+__fortify_function size_t
+__NTH (wcstombs (char *__restrict __dst, const wchar_t *__restrict __src,
+ size_t __len))
+{
+ if (__bos (__dst) != (size_t) -1)
+ {
+ if (!__builtin_constant_p (__len))
+ return __wcstombs_chk (__dst, __src, __len, __bos (__dst));
+ if (__len > __bos (__dst))
+ return __wcstombs_chk_warn (__dst, __src, __len, __bos (__dst));
+ }
+ return __wcstombs_alias (__dst, __src, __len);
+}
diff --git a/REORG.TODO/stdlib/bsearch.c b/REORG.TODO/stdlib/bsearch.c
new file mode 100644
index 0000000000..e6aa407491
--- /dev/null
+++ b/REORG.TODO/stdlib/bsearch.c
@@ -0,0 +1,23 @@
+/* Copyright (C) 1991-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+#undef __extern_inline
+#define __extern_inline /* Empty, so we get a normal definition. */
+#include <bits/stdlib-bsearch.h>
+libc_hidden_def (bsearch)
diff --git a/REORG.TODO/stdlib/bug-fmtmsg1.c b/REORG.TODO/stdlib/bug-fmtmsg1.c
new file mode 100644
index 0000000000..04bfaea3ce
--- /dev/null
+++ b/REORG.TODO/stdlib/bug-fmtmsg1.c
@@ -0,0 +1,28 @@
+#include <fmtmsg.h>
+#include <stdio.h>
+
+
+static int
+do_test (void)
+{
+ /* Ugly, but fmtmsg would otherwise print to stderr which we do not
+ want. */
+ fclose (stderr);
+ stderr = stdout;
+
+ int e1;
+ e1 = fmtmsg (MM_PRINT, "label:part", MM_WARNING, "text", "action", "tag");
+
+ int e2;
+ e2 = fmtmsg (MM_PRINT, "label2:part2", 11, "text2", "action2", "tag2");
+
+ addseverity (10, "additional severity");
+
+ int e3;
+ e3 = fmtmsg (MM_PRINT, "label3:part3", 10, "text3", "action3", "tag3");
+
+ return e1 != 0 || e2 != 0 || e3 != 0;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/bug-getcontext.c b/REORG.TODO/stdlib/bug-getcontext.c
new file mode 100644
index 0000000000..163400acba
--- /dev/null
+++ b/REORG.TODO/stdlib/bug-getcontext.c
@@ -0,0 +1,76 @@
+/* BZ 12420 */
+
+#include <errno.h>
+#include <fenv.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <ucontext.h>
+#include <libc-diag.h>
+
+static int
+do_test (void)
+{
+ if (FE_ALL_EXCEPT == 0)
+ {
+ printf("Skipping test; no support for FP exceptions.\n");
+ return 0;
+ }
+
+ int except_mask = 0;
+#ifdef FE_DIVBYZERO
+ except_mask |= FE_DIVBYZERO;
+#endif
+#ifdef FE_INVALID
+ except_mask |= FE_INVALID;
+#endif
+#ifdef FE_OVERFLOW
+ except_mask |= FE_OVERFLOW;
+#endif
+#ifdef FE_UNDERFLOW
+ except_mask |= FE_UNDERFLOW;
+#endif
+ int status = feenableexcept (except_mask);
+
+ except_mask = fegetexcept ();
+ if (except_mask == -1)
+ {
+ printf("\nBefore getcontext(): fegetexcept returned: %d\n",
+ except_mask);
+ return 1;
+ }
+
+ ucontext_t ctx;
+ status = getcontext(&ctx);
+ if (status)
+ {
+ printf("\ngetcontext failed, errno: %d.\n", errno);
+ return 1;
+ }
+
+ printf ("\nDone with getcontext()!\n");
+ fflush (NULL);
+
+ /* On nios2 and tilepro, GCC 5 warns that except_mask may be used
+ uninitialized. Because it is always initialized and nothing in
+ this test ever calls setcontext (a setcontext call could result
+ in local variables being clobbered on the second return from
+ getcontext), in fact an uninitialized use is not possible. */
+ DIAG_PUSH_NEEDS_COMMENT;
+ DIAG_IGNORE_NEEDS_COMMENT (5, "-Wmaybe-uninitialized");
+ int mask = fegetexcept ();
+ if (mask != except_mask)
+ {
+ printf("\nAfter getcontext(): fegetexcept returned: %d, expected: %d.\n",
+ mask, except_mask);
+ return 1;
+ }
+
+ printf("\nAt end fegetexcept() returned %d, expected: %d.\n",
+ mask, except_mask);
+ DIAG_POP_NEEDS_COMMENT;
+
+ return 0;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/bug-strtod.c b/REORG.TODO/stdlib/bug-strtod.c
new file mode 100644
index 0000000000..b91f739104
--- /dev/null
+++ b/REORG.TODO/stdlib/bug-strtod.c
@@ -0,0 +1,67 @@
+/* Test to strtod etc for numbers like x000...0000.000e-nn.
+ This file is part of the GNU C Library.
+ Copyright (C) 2001-2017 Free Software Foundation, Inc.
+ Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "tst-strtod.h"
+
+#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \
+static int \
+test_strto ## FSUF (void) \
+{ \
+ char buf[300]; \
+ int cnt; \
+ int result = 0; \
+ \
+ for (cnt = 0; cnt < 200; ++cnt) \
+ { \
+ ssize_t n; \
+ FTYPE f; \
+ \
+ n = sprintf (buf, "%d", cnt); \
+ memset (buf + n, '0', cnt); \
+ sprintf (buf + n + cnt, ".000e-%d", cnt); \
+ f = strto ## FSUF (buf, NULL); \
+ \
+ if (f != (FTYPE) cnt) \
+ { \
+ char fstr[FSTRLENMAX]; \
+ char fcntstr[FSTRLENMAX]; \
+ FTOSTR (fstr, sizeof (fstr), "%g", f); \
+ FTOSTR (fcntstr, sizeof (fstr), "%g", (FTYPE) cnt); \
+ printf ("strto" #FSUF "(\"%s\") " \
+ "failed for cnt == %d (%s instead of %s)\n", \
+ buf, cnt, fstr, fcntstr); \
+ result = 1; \
+ } \
+ else \
+ printf ( "strto" #FSUF "() fine for cnt == %d\n", cnt); \
+ } \
+ return result; \
+}
+
+GEN_TEST_STRTOD_FOREACH (TEST_STRTOD)
+
+int
+main (void)
+{
+ return STRTOD_TEST_FOREACH (test_strto);
+}
diff --git a/REORG.TODO/stdlib/bug-strtod2.c b/REORG.TODO/stdlib/bug-strtod2.c
new file mode 100644
index 0000000000..6128f2dd56
--- /dev/null
+++ b/REORG.TODO/stdlib/bug-strtod2.c
@@ -0,0 +1,57 @@
+#include <locale.h>
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "tst-strtod.h"
+
+static const char *tests[] =
+ {
+ "inf", "Inf", "iNf", "inF", "INf", "iNF", "INF", "InF",
+ "infinity", "Infinity", "InfInity", "INFINITY"
+ };
+#define ntests (sizeof (tests) / sizeof (tests[0]))
+
+#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \
+static int \
+test_strto ## FSUF (void) \
+{ \
+ int res = 0; \
+ for (int i = 0; i < ntests; ++i) \
+ { \
+ char *endp; \
+ FTYPE d = strto ## FSUF (tests[i], &endp); \
+ if (*endp != '\0') \
+ { \
+ printf ("did not consume all of '%s'\n", tests[i]); \
+ res = 1; \
+ } \
+ if (!isinf (d)) \
+ { \
+ printf ("'%s' does not pass isinf\n", tests[i]); \
+ res = 1; \
+ } \
+ } \
+ \
+ return res; \
+}
+
+GEN_TEST_STRTOD_FOREACH (TEST_STRTOD)
+
+static int
+do_test (void)
+{
+ /* The Turkish locale is notorious because tolower() maps 'I' to the
+ dotless lowercase 'i' and toupper() maps 'i' to an 'I' with a dot
+ above. */
+ if (setlocale (LC_ALL, "tr_TR.UTF-8") == NULL)
+ {
+ puts ("cannot set locale");
+ return 0;
+ }
+
+ return STRTOD_TEST_FOREACH (test_strto);
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/canonicalize.c b/REORG.TODO/stdlib/canonicalize.c
new file mode 100644
index 0000000000..c3d892c862
--- /dev/null
+++ b/REORG.TODO/stdlib/canonicalize.c
@@ -0,0 +1,246 @@
+/* Return the canonical absolute name of a given file.
+ Copyright (C) 1996-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <limits.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <stddef.h>
+
+#include <eloop-threshold.h>
+#include <shlib-compat.h>
+
+/* Return the canonical absolute name of file NAME. A canonical name
+ does not contain any `.', `..' components nor any repeated path
+ separators ('/') or symlinks. All path components must exist. If
+ RESOLVED is null, the result is malloc'd; otherwise, if the
+ canonical name is PATH_MAX chars or more, returns null with `errno'
+ set to ENAMETOOLONG; if the name fits in fewer than PATH_MAX chars,
+ returns the name in RESOLVED. If the name cannot be resolved and
+ RESOLVED is non-NULL, it contains the path of the first component
+ that cannot be resolved. If the path can be resolved, RESOLVED
+ holds the same value as the value returned. */
+
+char *
+__realpath (const char *name, char *resolved)
+{
+ char *rpath, *dest, *extra_buf = NULL;
+ const char *start, *end, *rpath_limit;
+ long int path_max;
+ int num_links = 0;
+
+ if (name == NULL)
+ {
+ /* As per Single Unix Specification V2 we must return an error if
+ either parameter is a null pointer. We extend this to allow
+ the RESOLVED parameter to be NULL in case the we are expected to
+ allocate the room for the return value. */
+ __set_errno (EINVAL);
+ return NULL;
+ }
+
+ if (name[0] == '\0')
+ {
+ /* As per Single Unix Specification V2 we must return an error if
+ the name argument points to an empty string. */
+ __set_errno (ENOENT);
+ return NULL;
+ }
+
+#ifdef PATH_MAX
+ path_max = PATH_MAX;
+#else
+ path_max = pathconf (name, _PC_PATH_MAX);
+ if (path_max <= 0)
+ path_max = 1024;
+#endif
+
+ if (resolved == NULL)
+ {
+ rpath = malloc (path_max);
+ if (rpath == NULL)
+ return NULL;
+ }
+ else
+ rpath = resolved;
+ rpath_limit = rpath + path_max;
+
+ if (name[0] != '/')
+ {
+ if (!__getcwd (rpath, path_max))
+ {
+ rpath[0] = '\0';
+ goto error;
+ }
+ dest = __rawmemchr (rpath, '\0');
+ }
+ else
+ {
+ rpath[0] = '/';
+ dest = rpath + 1;
+ }
+
+ for (start = end = name; *start; start = end)
+ {
+ struct stat64 st;
+ int n;
+
+ /* Skip sequence of multiple path-separators. */
+ while (*start == '/')
+ ++start;
+
+ /* Find end of path component. */
+ for (end = start; *end && *end != '/'; ++end)
+ /* Nothing. */;
+
+ if (end - start == 0)
+ break;
+ else if (end - start == 1 && start[0] == '.')
+ /* nothing */;
+ else if (end - start == 2 && start[0] == '.' && start[1] == '.')
+ {
+ /* Back up to previous component, ignore if at root already. */
+ if (dest > rpath + 1)
+ while ((--dest)[-1] != '/');
+ }
+ else
+ {
+ size_t new_size;
+
+ if (dest[-1] != '/')
+ *dest++ = '/';
+
+ if (dest + (end - start) >= rpath_limit)
+ {
+ ptrdiff_t dest_offset = dest - rpath;
+ char *new_rpath;
+
+ if (resolved)
+ {
+ __set_errno (ENAMETOOLONG);
+ if (dest > rpath + 1)
+ dest--;
+ *dest = '\0';
+ goto error;
+ }
+ new_size = rpath_limit - rpath;
+ if (end - start + 1 > path_max)
+ new_size += end - start + 1;
+ else
+ new_size += path_max;
+ new_rpath = (char *) realloc (rpath, new_size);
+ if (new_rpath == NULL)
+ goto error;
+ rpath = new_rpath;
+ rpath_limit = rpath + new_size;
+
+ dest = rpath + dest_offset;
+ }
+
+ dest = __mempcpy (dest, start, end - start);
+ *dest = '\0';
+
+ if (__lxstat64 (_STAT_VER, rpath, &st) < 0)
+ goto error;
+
+ if (S_ISLNK (st.st_mode))
+ {
+ char *buf = __alloca (path_max);
+ size_t len;
+
+ if (++num_links > __eloop_threshold ())
+ {
+ __set_errno (ELOOP);
+ goto error;
+ }
+
+ n = __readlink (rpath, buf, path_max - 1);
+ if (n < 0)
+ goto error;
+ buf[n] = '\0';
+
+ if (!extra_buf)
+ extra_buf = __alloca (path_max);
+
+ len = strlen (end);
+ if ((long int) (n + len) >= path_max)
+ {
+ __set_errno (ENAMETOOLONG);
+ goto error;
+ }
+
+ /* Careful here, end may be a pointer into extra_buf... */
+ memmove (&extra_buf[n], end, len + 1);
+ name = end = memcpy (extra_buf, buf, n);
+
+ if (buf[0] == '/')
+ dest = rpath + 1; /* It's an absolute symlink */
+ else
+ /* Back up to previous component, ignore if at root already: */
+ if (dest > rpath + 1)
+ while ((--dest)[-1] != '/');
+ }
+ else if (!S_ISDIR (st.st_mode) && *end != '\0')
+ {
+ __set_errno (ENOTDIR);
+ goto error;
+ }
+ }
+ }
+ if (dest > rpath + 1 && dest[-1] == '/')
+ --dest;
+ *dest = '\0';
+
+ assert (resolved == NULL || resolved == rpath);
+ return rpath;
+
+error:
+ assert (resolved == NULL || resolved == rpath);
+ if (resolved == NULL)
+ free (rpath);
+ return NULL;
+}
+versioned_symbol (libc, __realpath, realpath, GLIBC_2_3);
+
+
+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3)
+char *
+attribute_compat_text_section
+__old_realpath (const char *name, char *resolved)
+{
+ if (resolved == NULL)
+ {
+ __set_errno (EINVAL);
+ return NULL;
+ }
+
+ return __realpath (name, resolved);
+}
+compat_symbol (libc, __old_realpath, realpath, GLIBC_2_0);
+#endif
+
+
+char *
+__canonicalize_file_name (const char *name)
+{
+ return __realpath (name, NULL);
+}
+weak_alias (__canonicalize_file_name, canonicalize_file_name)
diff --git a/REORG.TODO/stdlib/cmp.c b/REORG.TODO/stdlib/cmp.c
new file mode 100644
index 0000000000..1480a9b165
--- /dev/null
+++ b/REORG.TODO/stdlib/cmp.c
@@ -0,0 +1,48 @@
+/* mpn_cmp -- Compare two low-level natural-number integers.
+
+Copyright (C) 1991-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP 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 MP 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 MP Library; see the file COPYING.LIB. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+
+/* Compare OP1_PTR/OP1_SIZE with OP2_PTR/OP2_SIZE.
+ There are no restrictions on the relative sizes of
+ the two arguments.
+ Return 1 if OP1 > OP2, 0 if they are equal, and -1 if OP1 < OP2. */
+
+int
+mpn_cmp (mp_srcptr op1_ptr, mp_srcptr op2_ptr, mp_size_t size)
+{
+ mp_size_t i;
+ mp_limb_t op1_word, op2_word;
+
+ for (i = size - 1; i >= 0; i--)
+ {
+ op1_word = op1_ptr[i];
+ op2_word = op2_ptr[i];
+ if (op1_word != op2_word)
+ goto diff;
+ }
+ return 0;
+ diff:
+ /* This can *not* be simplified to
+ op2_word - op2_word
+ since that expression might give signed overflow. */
+ return (op1_word > op2_word) ? 1 : -1;
+}
diff --git a/REORG.TODO/stdlib/cxa_at_quick_exit.c b/REORG.TODO/stdlib/cxa_at_quick_exit.c
new file mode 100644
index 0000000000..ebebaf4bd7
--- /dev/null
+++ b/REORG.TODO/stdlib/cxa_at_quick_exit.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 2009-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include "exit.h"
+
+
+static struct exit_function_list initial_quick;
+struct exit_function_list *__quick_exit_funcs = &initial_quick;
+
+/* Register a function to be called by quick_exit. */
+int
+__cxa_at_quick_exit (void (*func) (void *), void *d)
+{
+ return __internal_atexit (func, NULL, d, &__quick_exit_funcs);
+}
diff --git a/REORG.TODO/stdlib/cxa_atexit.c b/REORG.TODO/stdlib/cxa_atexit.c
new file mode 100644
index 0000000000..ce5d9f22b4
--- /dev/null
+++ b/REORG.TODO/stdlib/cxa_atexit.c
@@ -0,0 +1,133 @@
+/* Copyright (C) 1999-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <assert.h>
+#include <stdlib.h>
+#include <stdint.h>
+
+#include <libc-lock.h>
+#include "exit.h"
+#include <atomic.h>
+#include <sysdep.h>
+
+#undef __cxa_atexit
+
+
+int
+attribute_hidden
+__internal_atexit (void (*func) (void *), void *arg, void *d,
+ struct exit_function_list **listp)
+{
+ struct exit_function *new = __new_exitfn (listp);
+
+ if (new == NULL)
+ return -1;
+
+#ifdef PTR_MANGLE
+ PTR_MANGLE (func);
+#endif
+ new->func.cxa.fn = (void (*) (void *, int)) func;
+ new->func.cxa.arg = arg;
+ new->func.cxa.dso_handle = d;
+ atomic_write_barrier ();
+ new->flavor = ef_cxa;
+ return 0;
+}
+
+
+/* Register a function to be called by exit or when a shared library
+ is unloaded. This function is only called from code generated by
+ the C++ compiler. */
+int
+__cxa_atexit (void (*func) (void *), void *arg, void *d)
+{
+ return __internal_atexit (func, arg, d, &__exit_funcs);
+}
+libc_hidden_def (__cxa_atexit)
+
+
+/* We change global data, so we need locking. */
+__libc_lock_define_initialized (static, lock)
+
+
+static struct exit_function_list initial;
+struct exit_function_list *__exit_funcs = &initial;
+uint64_t __new_exitfn_called;
+
+struct exit_function *
+__new_exitfn (struct exit_function_list **listp)
+{
+ struct exit_function_list *p = NULL;
+ struct exit_function_list *l;
+ struct exit_function *r = NULL;
+ size_t i = 0;
+
+ __libc_lock_lock (lock);
+
+ for (l = *listp; l != NULL; p = l, l = l->next)
+ {
+ for (i = l->idx; i > 0; --i)
+ if (l->fns[i - 1].flavor != ef_free)
+ break;
+
+ if (i > 0)
+ break;
+
+ /* This block is completely unused. */
+ l->idx = 0;
+ }
+
+ if (l == NULL || i == sizeof (l->fns) / sizeof (l->fns[0]))
+ {
+ /* The last entry in a block is used. Use the first entry in
+ the previous block if it exists. Otherwise create a new one. */
+ if (p == NULL)
+ {
+ assert (l != NULL);
+ p = (struct exit_function_list *)
+ calloc (1, sizeof (struct exit_function_list));
+ if (p != NULL)
+ {
+ p->next = *listp;
+ *listp = p;
+ }
+ }
+
+ if (p != NULL)
+ {
+ r = &p->fns[0];
+ p->idx = 1;
+ }
+ }
+ else
+ {
+ /* There is more room in the block. */
+ r = &l->fns[i];
+ l->idx = i + 1;
+ }
+
+ /* Mark entry as used, but we don't know the flavor now. */
+ if (r != NULL)
+ {
+ r->flavor = ef_us;
+ ++__new_exitfn_called;
+ }
+
+ __libc_lock_unlock (lock);
+
+ return r;
+}
diff --git a/REORG.TODO/stdlib/cxa_finalize.c b/REORG.TODO/stdlib/cxa_finalize.c
new file mode 100644
index 0000000000..aa0a70cb58
--- /dev/null
+++ b/REORG.TODO/stdlib/cxa_finalize.c
@@ -0,0 +1,82 @@
+/* Copyright (C) 1999-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <assert.h>
+#include <stdlib.h>
+#include <atomic.h>
+#include "exit.h"
+#include <fork.h>
+#include <sysdep.h>
+#include <stdint.h>
+
+/* If D is non-NULL, call all functions registered with `__cxa_atexit'
+ with the same dso handle. Otherwise, if D is NULL, call all of the
+ registered handlers. */
+void
+__cxa_finalize (void *d)
+{
+ struct exit_function_list *funcs;
+
+ restart:
+ for (funcs = __exit_funcs; funcs; funcs = funcs->next)
+ {
+ struct exit_function *f;
+
+ for (f = &funcs->fns[funcs->idx - 1]; f >= &funcs->fns[0]; --f)
+ {
+ void (*cxafn) (void *arg, int status);
+ void *cxaarg;
+
+ if ((d == NULL || d == f->func.cxa.dso_handle)
+ /* We don't want to run this cleanup more than once. */
+ && (cxafn = f->func.cxa.fn,
+ cxaarg = f->func.cxa.arg,
+ ! catomic_compare_and_exchange_bool_acq (&f->flavor, ef_free,
+ ef_cxa)))
+ {
+ uint64_t check = __new_exitfn_called;
+
+#ifdef PTR_DEMANGLE
+ PTR_DEMANGLE (cxafn);
+#endif
+ cxafn (cxaarg, 0);
+
+ /* It is possible that that last exit function registered
+ more exit functions. Start the loop over. */
+ if (__glibc_unlikely (check != __new_exitfn_called))
+ goto restart;
+ }
+ }
+ }
+
+ /* Also remove the quick_exit handlers, but do not call them. */
+ for (funcs = __quick_exit_funcs; funcs; funcs = funcs->next)
+ {
+ struct exit_function *f;
+
+ for (f = &funcs->fns[funcs->idx - 1]; f >= &funcs->fns[0]; --f)
+ if (d == NULL || d == f->func.cxa.dso_handle)
+ f->flavor = ef_free;
+ }
+
+ /* Remove the registered fork handlers. We do not have to
+ unregister anything if the program is going to terminate anyway. */
+#ifdef UNREGISTER_ATFORK
+ if (d != NULL)
+ UNREGISTER_ATFORK (d);
+#endif
+}
diff --git a/REORG.TODO/stdlib/cxa_thread_atexit_impl.c b/REORG.TODO/stdlib/cxa_thread_atexit_impl.c
new file mode 100644
index 0000000000..f9942255a3
--- /dev/null
+++ b/REORG.TODO/stdlib/cxa_thread_atexit_impl.c
@@ -0,0 +1,165 @@
+/* Register destructors for C++ TLS variables declared with thread_local.
+ Copyright (C) 2013-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+/* CONCURRENCY NOTES:
+
+ This documents concurrency for the non-POD TLS destructor registration,
+ calling and destruction. The functions __cxa_thread_atexit_impl,
+ _dl_close_worker and __call_tls_dtors are the three main routines that may
+ run concurrently and access shared data. The shared data in all possible
+ combinations of all three functions are the link map list, a link map for a
+ DSO and the link map member l_tls_dtor_count.
+
+ __cxa_thread_atexit_impl acquires the dl_load_lock before accessing any
+ shared state and hence multiple of its instances can safely execute
+ concurrently.
+
+ _dl_close_worker acquires the dl_load_lock before accessing any shared state
+ as well and hence can concurrently execute multiple of its own instances as
+ well as those of __cxa_thread_atexit_impl safely. Not all accesses to
+ l_tls_dtor_count are protected by the dl_load_lock, so we need to
+ synchronize using atomics.
+
+ __call_tls_dtors accesses the l_tls_dtor_count without taking the lock; it
+ decrements the value by one. It does not need the big lock because it does
+ not access any other shared state except for the current DSO link map and
+ its member l_tls_dtor_count.
+
+ Correspondingly, _dl_close_worker loads l_tls_dtor_count and if it is zero,
+ unloads the DSO, thus deallocating the current link map. This is the goal
+ of maintaining l_tls_dtor_count - to unload the DSO and free resources if
+ there are no pending destructors to be called.
+
+ We want to eliminate the inconsistent state where the DSO is unloaded in
+ _dl_close_worker before it is used in __call_tls_dtors. This could happen
+ if __call_tls_dtors uses the link map after it sets l_tls_dtor_count to 0,
+ since _dl_close_worker will conclude from the 0 l_tls_dtor_count value that
+ it is safe to unload the DSO. Hence, to ensure that this does not happen,
+ the following conditions must be met:
+
+ 1. In _dl_close_worker, the l_tls_dtor_count load happens before the DSO is
+ unloaded and its link map is freed
+ 2. The link map dereference in __call_tls_dtors happens before the
+ l_tls_dtor_count dereference.
+
+ To ensure this, the l_tls_dtor_count decrement in __call_tls_dtors should
+ have release semantics and the load in _dl_close_worker should have acquire
+ semantics.
+
+ Concurrent executions of __call_tls_dtors should only ensure that the value
+ is accessed atomically; no reordering constraints need to be considered.
+ Likewise for the increment of l_tls_dtor_count in __cxa_thread_atexit_impl.
+
+ There is still a possibility on concurrent execution of _dl_close_worker and
+ __call_tls_dtors where _dl_close_worker reads the value of l_tls_dtor_count
+ as 1, __call_tls_dtors decrements the value of l_tls_dtor_count but
+ _dl_close_worker does not unload the DSO, having read the old value. This
+ is not very different from a case where __call_tls_dtors is called after
+ _dl_close_worker on the DSO and hence is an accepted execution. */
+
+#include <stdlib.h>
+#include <ldsodefs.h>
+
+typedef void (*dtor_func) (void *);
+
+struct dtor_list
+{
+ dtor_func func;
+ void *obj;
+ struct link_map *map;
+ struct dtor_list *next;
+};
+
+static __thread struct dtor_list *tls_dtor_list;
+static __thread void *dso_symbol_cache;
+static __thread struct link_map *lm_cache;
+
+/* Register a destructor for TLS variables declared with the 'thread_local'
+ keyword. This function is only called from code generated by the C++
+ compiler. FUNC is the destructor function and OBJ is the object to be
+ passed to the destructor. DSO_SYMBOL is the __dso_handle symbol that each
+ DSO has at a unique address in its map, added from crtbegin.o during the
+ linking phase. */
+int
+__cxa_thread_atexit_impl (dtor_func func, void *obj, void *dso_symbol)
+{
+#ifdef PTR_MANGLE
+ PTR_MANGLE (func);
+#endif
+
+ /* Prepend. */
+ struct dtor_list *new = calloc (1, sizeof (struct dtor_list));
+ new->func = func;
+ new->obj = obj;
+ new->next = tls_dtor_list;
+ tls_dtor_list = new;
+
+ /* We have to acquire the big lock to prevent a racing dlclose from pulling
+ our DSO from underneath us while we're setting up our destructor. */
+ __rtld_lock_lock_recursive (GL(dl_load_lock));
+
+ /* See if we already encountered the DSO. */
+ if (__glibc_unlikely (dso_symbol_cache != dso_symbol))
+ {
+ ElfW(Addr) caller = (ElfW(Addr)) dso_symbol;
+
+ struct link_map *l = _dl_find_dso_for_object (caller);
+
+ /* If the address is not recognized the call comes from the main
+ program (we hope). */
+ lm_cache = l ? l : GL(dl_ns)[LM_ID_BASE]._ns_loaded;
+ }
+
+ /* This increment may only be concurrently observed either by the decrement
+ in __call_tls_dtors since the other l_tls_dtor_count access in
+ _dl_close_worker is protected by the dl_load_lock. The execution in
+ __call_tls_dtors does not really depend on this value beyond the fact that
+ it should be atomic, so Relaxed MO should be sufficient. */
+ atomic_fetch_add_relaxed (&lm_cache->l_tls_dtor_count, 1);
+ __rtld_lock_unlock_recursive (GL(dl_load_lock));
+
+ new->map = lm_cache;
+
+ return 0;
+}
+
+/* Call the destructors. This is called either when a thread returns from the
+ initial function or when the process exits via the exit function. */
+void
+__call_tls_dtors (void)
+{
+ while (tls_dtor_list)
+ {
+ struct dtor_list *cur = tls_dtor_list;
+ dtor_func func = cur->func;
+#ifdef PTR_DEMANGLE
+ PTR_DEMANGLE (func);
+#endif
+
+ tls_dtor_list = tls_dtor_list->next;
+ func (cur->obj);
+
+ /* Ensure that the MAP dereference happens before
+ l_tls_dtor_count decrement. That way, we protect this access from a
+ potential DSO unload in _dl_close_worker, which happens when
+ l_tls_dtor_count is 0. See CONCURRENCY NOTES for more detail. */
+ atomic_fetch_add_release (&cur->map->l_tls_dtor_count, -1);
+ free (cur);
+ }
+}
+libc_hidden_def (__call_tls_dtors)
diff --git a/REORG.TODO/stdlib/dbl2mpn.c b/REORG.TODO/stdlib/dbl2mpn.c
new file mode 100644
index 0000000000..3872db5c41
--- /dev/null
+++ b/REORG.TODO/stdlib/dbl2mpn.c
@@ -0,0 +1,31 @@
+/* Copyright (C) 1993-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+
+/* Convert a `double' to a multi-precision integer representing the
+ significand scaled up by the highest possible number of significant bits
+ of fraction (DBL_MANT_DIG), and an integral power of two (MPN frexp). */
+
+mp_size_t
+__mpn_extract_double (mp_ptr res_ptr, mp_size_t size,
+ int *expt, int *is_neg,
+ double value)
+{
+#error "__mpn_extract_double is not implemented for this floating point format"
+}
diff --git a/REORG.TODO/stdlib/div.c b/REORG.TODO/stdlib/div.c
new file mode 100644
index 0000000000..d525afa1ac
--- /dev/null
+++ b/REORG.TODO/stdlib/div.c
@@ -0,0 +1,62 @@
+/* Copyright (C) 1992-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+/*
+ * Copyright (c) 1990 Regents of the University of California.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Chris Torek.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <stdlib.h>
+
+/* Return the `div_t' representation of NUMER over DENOM. */
+div_t
+div (int numer, int denom)
+{
+ div_t result;
+
+ result.quot = numer / denom;
+ result.rem = numer % denom;
+
+ return result;
+}
diff --git a/REORG.TODO/stdlib/divmod_1.c b/REORG.TODO/stdlib/divmod_1.c
new file mode 100644
index 0000000000..1ef15d6a1e
--- /dev/null
+++ b/REORG.TODO/stdlib/divmod_1.c
@@ -0,0 +1,199 @@
+/* mpn_divmod_1(quot_ptr, dividend_ptr, dividend_size, divisor_limb) --
+ Divide (DIVIDEND_PTR,,DIVIDEND_SIZE) by DIVISOR_LIMB.
+ Write DIVIDEND_SIZE limbs of quotient at QUOT_PTR.
+ Return the single-limb remainder.
+ There are no constraints on the value of the divisor.
+
+ QUOT_PTR and DIVIDEND_PTR might point to the same limb.
+
+Copyright (C) 1991-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP 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 MP 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 MP Library; see the file COPYING.LIB. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+#include "longlong.h"
+
+#ifndef UMUL_TIME
+#define UMUL_TIME 1
+#endif
+
+#ifndef UDIV_TIME
+#define UDIV_TIME UMUL_TIME
+#endif
+
+/* FIXME: We should be using invert_limb (or invert_normalized_limb)
+ here (not udiv_qrnnd). */
+
+mp_limb_t
+mpn_divmod_1 (mp_ptr quot_ptr,
+ mp_srcptr dividend_ptr, mp_size_t dividend_size,
+ mp_limb_t divisor_limb)
+{
+ mp_size_t i;
+ mp_limb_t n1, n0, r;
+ mp_limb_t dummy __attribute__ ((unused));
+
+ /* ??? Should this be handled at all? Rely on callers? */
+ if (dividend_size == 0)
+ return 0;
+
+ /* If multiplication is much faster than division, and the
+ dividend is large, pre-invert the divisor, and use
+ only multiplications in the inner loop. */
+
+ /* This test should be read:
+ Does it ever help to use udiv_qrnnd_preinv?
+ && Does what we save compensate for the inversion overhead? */
+ if (UDIV_TIME > (2 * UMUL_TIME + 6)
+ && (UDIV_TIME - (2 * UMUL_TIME + 6)) * dividend_size > UDIV_TIME)
+ {
+ int normalization_steps;
+
+ count_leading_zeros (normalization_steps, divisor_limb);
+ if (normalization_steps != 0)
+ {
+ mp_limb_t divisor_limb_inverted;
+
+ divisor_limb <<= normalization_steps;
+
+ /* Compute (2**2N - 2**N * DIVISOR_LIMB) / DIVISOR_LIMB. The
+ result is a (N+1)-bit approximation to 1/DIVISOR_LIMB, with the
+ most significant bit (with weight 2**N) implicit. */
+
+ /* Special case for DIVISOR_LIMB == 100...000. */
+ if (divisor_limb << 1 == 0)
+ divisor_limb_inverted = ~(mp_limb_t) 0;
+ else
+ udiv_qrnnd (divisor_limb_inverted, dummy,
+ -divisor_limb, 0, divisor_limb);
+
+ n1 = dividend_ptr[dividend_size - 1];
+ r = n1 >> (BITS_PER_MP_LIMB - normalization_steps);
+
+ /* Possible optimization:
+ if (r == 0
+ && divisor_limb > ((n1 << normalization_steps)
+ | (dividend_ptr[dividend_size - 2] >> ...)))
+ ...one division less... */
+
+ for (i = dividend_size - 2; i >= 0; i--)
+ {
+ n0 = dividend_ptr[i];
+ udiv_qrnnd_preinv (quot_ptr[i + 1], r, r,
+ ((n1 << normalization_steps)
+ | (n0 >> (BITS_PER_MP_LIMB - normalization_steps))),
+ divisor_limb, divisor_limb_inverted);
+ n1 = n0;
+ }
+ udiv_qrnnd_preinv (quot_ptr[0], r, r,
+ n1 << normalization_steps,
+ divisor_limb, divisor_limb_inverted);
+ return r >> normalization_steps;
+ }
+ else
+ {
+ mp_limb_t divisor_limb_inverted;
+
+ /* Compute (2**2N - 2**N * DIVISOR_LIMB) / DIVISOR_LIMB. The
+ result is a (N+1)-bit approximation to 1/DIVISOR_LIMB, with the
+ most significant bit (with weight 2**N) implicit. */
+
+ /* Special case for DIVISOR_LIMB == 100...000. */
+ if (divisor_limb << 1 == 0)
+ divisor_limb_inverted = ~(mp_limb_t) 0;
+ else
+ udiv_qrnnd (divisor_limb_inverted, dummy,
+ -divisor_limb, 0, divisor_limb);
+
+ i = dividend_size - 1;
+ r = dividend_ptr[i];
+
+ if (r >= divisor_limb)
+ r = 0;
+ else
+ {
+ quot_ptr[i] = 0;
+ i--;
+ }
+
+ for (; i >= 0; i--)
+ {
+ n0 = dividend_ptr[i];
+ udiv_qrnnd_preinv (quot_ptr[i], r, r,
+ n0, divisor_limb, divisor_limb_inverted);
+ }
+ return r;
+ }
+ }
+ else
+ {
+ if (UDIV_NEEDS_NORMALIZATION)
+ {
+ int normalization_steps;
+
+ count_leading_zeros (normalization_steps, divisor_limb);
+ if (normalization_steps != 0)
+ {
+ divisor_limb <<= normalization_steps;
+
+ n1 = dividend_ptr[dividend_size - 1];
+ r = n1 >> (BITS_PER_MP_LIMB - normalization_steps);
+
+ /* Possible optimization:
+ if (r == 0
+ && divisor_limb > ((n1 << normalization_steps)
+ | (dividend_ptr[dividend_size - 2] >> ...)))
+ ...one division less... */
+
+ for (i = dividend_size - 2; i >= 0; i--)
+ {
+ n0 = dividend_ptr[i];
+ udiv_qrnnd (quot_ptr[i + 1], r, r,
+ ((n1 << normalization_steps)
+ | (n0 >> (BITS_PER_MP_LIMB - normalization_steps))),
+ divisor_limb);
+ n1 = n0;
+ }
+ udiv_qrnnd (quot_ptr[0], r, r,
+ n1 << normalization_steps,
+ divisor_limb);
+ return r >> normalization_steps;
+ }
+ }
+ /* No normalization needed, either because udiv_qrnnd doesn't require
+ it, or because DIVISOR_LIMB is already normalized. */
+
+ i = dividend_size - 1;
+ r = dividend_ptr[i];
+
+ if (r >= divisor_limb)
+ r = 0;
+ else
+ {
+ quot_ptr[i] = 0;
+ i--;
+ }
+
+ for (; i >= 0; i--)
+ {
+ n0 = dividend_ptr[i];
+ udiv_qrnnd (quot_ptr[i], r, r, n0, divisor_limb);
+ }
+ return r;
+ }
+}
diff --git a/REORG.TODO/stdlib/divrem.c b/REORG.TODO/stdlib/divrem.c
new file mode 100644
index 0000000000..984d945dee
--- /dev/null
+++ b/REORG.TODO/stdlib/divrem.c
@@ -0,0 +1,234 @@
+/* mpn_divrem -- Divide natural numbers, producing both remainder and
+ quotient.
+
+Copyright (C) 1993-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP 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 MP 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 MP Library; see the file COPYING.LIB. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+#include "longlong.h"
+
+/* Divide num (NP/NSIZE) by den (DP/DSIZE) and write
+ the NSIZE-DSIZE least significant quotient limbs at QP
+ and the DSIZE long remainder at NP. If QEXTRA_LIMBS is
+ non-zero, generate that many fraction bits and append them after the
+ other quotient limbs.
+ Return the most significant limb of the quotient, this is always 0 or 1.
+
+ Preconditions:
+ 0. NSIZE >= DSIZE.
+ 1. The most significant bit of the divisor must be set.
+ 2. QP must either not overlap with the input operands at all, or
+ QP + DSIZE >= NP must hold true. (This means that it's
+ possible to put the quotient in the high part of NUM, right after the
+ remainder in NUM.
+ 3. NSIZE >= DSIZE, even if QEXTRA_LIMBS is non-zero. */
+
+mp_limb_t
+mpn_divrem (mp_ptr qp, mp_size_t qextra_limbs,
+ mp_ptr np, mp_size_t nsize,
+ mp_srcptr dp, mp_size_t dsize)
+{
+ mp_limb_t most_significant_q_limb = 0;
+
+ switch (dsize)
+ {
+ case 0:
+ /* We are asked to divide by zero, so go ahead and do it! (To make
+ the compiler not remove this statement, return the value.) */
+ return 1 / dsize;
+
+ case 1:
+ {
+ mp_size_t i;
+ mp_limb_t n1;
+ mp_limb_t d;
+
+ d = dp[0];
+ n1 = np[nsize - 1];
+
+ if (n1 >= d)
+ {
+ n1 -= d;
+ most_significant_q_limb = 1;
+ }
+
+ qp += qextra_limbs;
+ for (i = nsize - 2; i >= 0; i--)
+ udiv_qrnnd (qp[i], n1, n1, np[i], d);
+ qp -= qextra_limbs;
+
+ for (i = qextra_limbs - 1; i >= 0; i--)
+ udiv_qrnnd (qp[i], n1, n1, 0, d);
+
+ np[0] = n1;
+ }
+ break;
+
+ case 2:
+ {
+ mp_size_t i;
+ mp_limb_t n1, n0, n2;
+ mp_limb_t d1, d0;
+
+ np += nsize - 2;
+ d1 = dp[1];
+ d0 = dp[0];
+ n1 = np[1];
+ n0 = np[0];
+
+ if (n1 >= d1 && (n1 > d1 || n0 >= d0))
+ {
+ sub_ddmmss (n1, n0, n1, n0, d1, d0);
+ most_significant_q_limb = 1;
+ }
+
+ for (i = qextra_limbs + nsize - 2 - 1; i >= 0; i--)
+ {
+ mp_limb_t q;
+ mp_limb_t r;
+
+ if (i >= qextra_limbs)
+ np--;
+ else
+ np[0] = 0;
+
+ if (n1 == d1)
+ {
+ /* Q should be either 111..111 or 111..110. Need special
+ treatment of this rare case as normal division would
+ give overflow. */
+ q = ~(mp_limb_t) 0;
+
+ r = n0 + d1;
+ if (r < d1) /* Carry in the addition? */
+ {
+ add_ssaaaa (n1, n0, r - d0, np[0], 0, d0);
+ qp[i] = q;
+ continue;
+ }
+ n1 = d0 - (d0 != 0);
+ n0 = -d0;
+ }
+ else
+ {
+ udiv_qrnnd (q, r, n1, n0, d1);
+ umul_ppmm (n1, n0, d0, q);
+ }
+
+ n2 = np[0];
+ q_test:
+ if (n1 > r || (n1 == r && n0 > n2))
+ {
+ /* The estimated Q was too large. */
+ q--;
+
+ sub_ddmmss (n1, n0, n1, n0, 0, d0);
+ r += d1;
+ if (r >= d1) /* If not carry, test Q again. */
+ goto q_test;
+ }
+
+ qp[i] = q;
+ sub_ddmmss (n1, n0, r, n2, n1, n0);
+ }
+ np[1] = n1;
+ np[0] = n0;
+ }
+ break;
+
+ default:
+ {
+ mp_size_t i;
+ mp_limb_t dX, d1, n0;
+
+ np += nsize - dsize;
+ dX = dp[dsize - 1];
+ d1 = dp[dsize - 2];
+ n0 = np[dsize - 1];
+
+ if (n0 >= dX)
+ {
+ if (n0 > dX || mpn_cmp (np, dp, dsize - 1) >= 0)
+ {
+ mpn_sub_n (np, np, dp, dsize);
+ n0 = np[dsize - 1];
+ most_significant_q_limb = 1;
+ }
+ }
+
+ for (i = qextra_limbs + nsize - dsize - 1; i >= 0; i--)
+ {
+ mp_limb_t q;
+ mp_limb_t n1, n2;
+ mp_limb_t cy_limb;
+
+ if (i >= qextra_limbs)
+ {
+ np--;
+ n2 = np[dsize];
+ }
+ else
+ {
+ n2 = np[dsize - 1];
+ MPN_COPY_DECR (np + 1, np, dsize);
+ np[0] = 0;
+ }
+
+ if (n0 == dX)
+ /* This might over-estimate q, but it's probably not worth
+ the extra code here to find out. */
+ q = ~(mp_limb_t) 0;
+ else
+ {
+ mp_limb_t r;
+
+ udiv_qrnnd (q, r, n0, np[dsize - 1], dX);
+ umul_ppmm (n1, n0, d1, q);
+
+ while (n1 > r || (n1 == r && n0 > np[dsize - 2]))
+ {
+ q--;
+ r += dX;
+ if (r < dX) /* I.e. "carry in previous addition?" */
+ break;
+ n1 -= n0 < d1;
+ n0 -= d1;
+ }
+ }
+
+ /* Possible optimization: We already have (q * n0) and (1 * n1)
+ after the calculation of q. Taking advantage of that, we
+ could make this loop make two iterations less. */
+
+ cy_limb = mpn_submul_1 (np, dp, dsize, q);
+
+ if (n2 != cy_limb)
+ {
+ mpn_add_n (np, np, dp, dsize);
+ q--;
+ }
+
+ qp[i] = q;
+ n0 = np[dsize - 1];
+ }
+ }
+ }
+
+ return most_significant_q_limb;
+}
diff --git a/REORG.TODO/stdlib/drand48-iter.c b/REORG.TODO/stdlib/drand48-iter.c
new file mode 100644
index 0000000000..f59c803138
--- /dev/null
+++ b/REORG.TODO/stdlib/drand48-iter.c
@@ -0,0 +1,56 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <stdlib.h>
+#include <limits.h>
+#include <stdint.h>
+#include <sys/types.h>
+
+/* Global state for non-reentrant functions. */
+struct drand48_data __libc_drand48_data;
+
+
+int
+__drand48_iterate (unsigned short int xsubi[3], struct drand48_data *buffer)
+{
+ uint64_t X;
+ uint64_t result;
+
+ /* Initialize buffer, if not yet done. */
+ if (__glibc_unlikely (!buffer->__init))
+ {
+ buffer->__a = 0x5deece66dull;
+ buffer->__c = 0xb;
+ buffer->__init = 1;
+ }
+
+ /* Do the real work. We choose a data type which contains at least
+ 48 bits. Because we compute the modulus it does not care how
+ many bits really are computed. */
+
+ X = (uint64_t) xsubi[2] << 32 | (uint32_t) xsubi[1] << 16 | xsubi[0];
+
+ result = X * buffer->__a + buffer->__c;
+
+ xsubi[0] = result & 0xffff;
+ xsubi[1] = (result >> 16) & 0xffff;
+ xsubi[2] = (result >> 32) & 0xffff;
+
+ return 0;
+}
diff --git a/REORG.TODO/stdlib/drand48.c b/REORG.TODO/stdlib/drand48.c
new file mode 100644
index 0000000000..b98759a32e
--- /dev/null
+++ b/REORG.TODO/stdlib/drand48.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+
+double
+drand48 (void)
+{
+ double result;
+
+ (void) __erand48_r (__libc_drand48_data.__x, &__libc_drand48_data, &result);
+
+ return result;
+}
diff --git a/REORG.TODO/stdlib/drand48_r.c b/REORG.TODO/stdlib/drand48_r.c
new file mode 100644
index 0000000000..801edf43a0
--- /dev/null
+++ b/REORG.TODO/stdlib/drand48_r.c
@@ -0,0 +1,27 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <math.h>
+#include <stdlib.h>
+
+int
+drand48_r (struct drand48_data *buffer, double *result)
+{
+ return __erand48_r (buffer->__x, buffer, result);
+}
diff --git a/REORG.TODO/stdlib/erand48.c b/REORG.TODO/stdlib/erand48.c
new file mode 100644
index 0000000000..b209189ba3
--- /dev/null
+++ b/REORG.TODO/stdlib/erand48.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+
+double
+erand48 (unsigned short int xsubi[3])
+{
+ double result;
+
+ (void) __erand48_r (xsubi, &__libc_drand48_data, &result);
+
+ return result;
+}
diff --git a/REORG.TODO/stdlib/erand48_r.c b/REORG.TODO/stdlib/erand48_r.c
new file mode 100644
index 0000000000..8f6d3fad61
--- /dev/null
+++ b/REORG.TODO/stdlib/erand48_r.c
@@ -0,0 +1,47 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <ieee754.h>
+#include <stdlib.h>
+#include <limits.h>
+
+
+int
+__erand48_r (unsigned short int xsubi[3], struct drand48_data *buffer,
+ double *result)
+{
+ union ieee754_double temp;
+
+ /* Compute next state. */
+ if (__drand48_iterate (xsubi, buffer) < 0)
+ return -1;
+
+ /* Construct a positive double with the 48 random bits distributed over
+ its fractional part so the resulting FP number is [0.0,1.0). */
+
+ temp.ieee.negative = 0;
+ temp.ieee.exponent = IEEE754_DOUBLE_BIAS;
+ temp.ieee.mantissa0 = (xsubi[2] << 4) | (xsubi[1] >> 12);
+ temp.ieee.mantissa1 = ((xsubi[1] & 0xfff) << 20) | (xsubi[0] << 4);
+
+ /* Please note the lower 4 bits of mantissa1 are always 0. */
+ *result = temp.d - 1.0;
+
+ return 0;
+}
+weak_alias (__erand48_r, erand48_r)
diff --git a/REORG.TODO/stdlib/errno.h b/REORG.TODO/stdlib/errno.h
new file mode 100644
index 0000000000..65f2f4570c
--- /dev/null
+++ b/REORG.TODO/stdlib/errno.h
@@ -0,0 +1,72 @@
+/* Copyright (C) 1991-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+/*
+ * ISO C99 Standard: 7.5 Errors <errno.h>
+ */
+
+#ifndef _ERRNO_H
+
+/* The includer defined __need_Emath if he wants only the definitions
+ of EDOM and ERANGE, and not everything else. */
+#ifndef __need_Emath
+# define _ERRNO_H 1
+# include <features.h>
+#endif
+
+__BEGIN_DECLS
+
+/* Get the error number constants from the system-specific file.
+ This file will test __need_Emath and _ERRNO_H. */
+#include <bits/errno.h>
+#undef __need_Emath
+
+#ifdef _ERRNO_H
+
+/* Declare the `errno' variable, unless it's defined as a macro by
+ bits/errno.h. This is the case in GNU, where it is a per-thread
+ variable. This redeclaration using the macro still works, but it
+ will be a function declaration without a prototype and may trigger
+ a -Wstrict-prototypes warning. */
+#ifndef errno
+extern int errno;
+#endif
+
+#ifdef __USE_GNU
+
+/* The full and simple forms of the name with which the program was
+ invoked. These variables are set up automatically at startup based on
+ the value of ARGV[0] (this works only if you use GNU ld). */
+extern char *program_invocation_name, *program_invocation_short_name;
+#endif /* __USE_GNU */
+#endif /* _ERRNO_H */
+
+__END_DECLS
+
+#endif /* _ERRNO_H */
+
+/* The Hurd <bits/errno.h> defines `error_t' as an enumerated type so
+ that printing `error_t' values in the debugger shows the names. We
+ might need this definition sometimes even if this file was included
+ before. */
+#if defined __USE_GNU || defined __need_error_t
+# ifndef __error_t_defined
+typedef int error_t;
+# define __error_t_defined 1
+# endif
+# undef __need_error_t
+#endif
diff --git a/REORG.TODO/stdlib/exit.c b/REORG.TODO/stdlib/exit.c
new file mode 100644
index 0000000000..c0b6d666c7
--- /dev/null
+++ b/REORG.TODO/stdlib/exit.c
@@ -0,0 +1,107 @@
+/* Copyright (C) 1991-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sysdep.h>
+#include "exit.h"
+
+#include "set-hooks.h"
+DEFINE_HOOK (__libc_atexit, (void))
+
+
+/* Call all functions registered with `atexit' and `on_exit',
+ in the reverse of the order in which they were registered
+ perform stdio cleanup, and terminate program execution with STATUS. */
+void
+attribute_hidden
+__run_exit_handlers (int status, struct exit_function_list **listp,
+ bool run_list_atexit, bool run_dtors)
+{
+ /* First, call the TLS destructors. */
+#ifndef SHARED
+ if (&__call_tls_dtors != NULL)
+#endif
+ if (run_dtors)
+ __call_tls_dtors ();
+
+ /* We do it this way to handle recursive calls to exit () made by
+ the functions registered with `atexit' and `on_exit'. We call
+ everyone on the list and use the status value in the last
+ exit (). */
+ while (*listp != NULL)
+ {
+ struct exit_function_list *cur = *listp;
+
+ while (cur->idx > 0)
+ {
+ const struct exit_function *const f =
+ &cur->fns[--cur->idx];
+ switch (f->flavor)
+ {
+ void (*atfct) (void);
+ void (*onfct) (int status, void *arg);
+ void (*cxafct) (void *arg, int status);
+
+ case ef_free:
+ case ef_us:
+ break;
+ case ef_on:
+ onfct = f->func.on.fn;
+#ifdef PTR_DEMANGLE
+ PTR_DEMANGLE (onfct);
+#endif
+ onfct (status, f->func.on.arg);
+ break;
+ case ef_at:
+ atfct = f->func.at;
+#ifdef PTR_DEMANGLE
+ PTR_DEMANGLE (atfct);
+#endif
+ atfct ();
+ break;
+ case ef_cxa:
+ cxafct = f->func.cxa.fn;
+#ifdef PTR_DEMANGLE
+ PTR_DEMANGLE (cxafct);
+#endif
+ cxafct (f->func.cxa.arg, status);
+ break;
+ }
+ }
+
+ *listp = cur->next;
+ if (*listp != NULL)
+ /* Don't free the last element in the chain, this is the statically
+ allocate element. */
+ free (cur);
+ }
+
+ if (run_list_atexit)
+ RUN_HOOK (__libc_atexit, ());
+
+ _exit (status);
+}
+
+
+void
+exit (int status)
+{
+ __run_exit_handlers (status, &__exit_funcs, true, true);
+}
+libc_hidden_def (exit)
diff --git a/REORG.TODO/stdlib/exit.h b/REORG.TODO/stdlib/exit.h
new file mode 100644
index 0000000000..7f2e679246
--- /dev/null
+++ b/REORG.TODO/stdlib/exit.h
@@ -0,0 +1,77 @@
+/* Copyright (C) 1991-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef _EXIT_H
+#define _EXIT_H 1
+
+#include <stdbool.h>
+#include <stdint.h>
+
+enum
+{
+ ef_free, /* `ef_free' MUST be zero! */
+ ef_us,
+ ef_on,
+ ef_at,
+ ef_cxa
+};
+
+struct exit_function
+ {
+ /* `flavour' should be of type of the `enum' above but since we need
+ this element in an atomic operation we have to use `long int'. */
+ long int flavor;
+ union
+ {
+ void (*at) (void);
+ struct
+ {
+ void (*fn) (int status, void *arg);
+ void *arg;
+ } on;
+ struct
+ {
+ void (*fn) (void *arg, int status);
+ void *arg;
+ void *dso_handle;
+ } cxa;
+ } func;
+ };
+struct exit_function_list
+ {
+ struct exit_function_list *next;
+ size_t idx;
+ struct exit_function fns[32];
+ };
+extern struct exit_function_list *__exit_funcs attribute_hidden;
+extern struct exit_function_list *__quick_exit_funcs attribute_hidden;
+
+extern struct exit_function *__new_exitfn (struct exit_function_list **listp);
+extern uint64_t __new_exitfn_called attribute_hidden;
+
+extern void __run_exit_handlers (int status,
+ struct exit_function_list **listp,
+ bool run_list_atexit, bool run_dtors)
+ attribute_hidden __attribute__ ((__noreturn__));
+
+extern int __internal_atexit (void (*func) (void *), void *arg, void *d,
+ struct exit_function_list **listp)
+ attribute_hidden;
+extern int __cxa_at_quick_exit (void (*func) (void *), void *d);
+
+
+#endif /* exit.h */
diff --git a/REORG.TODO/stdlib/fmtmsg.c b/REORG.TODO/stdlib/fmtmsg.c
new file mode 100644
index 0000000000..ac0c3aa28a
--- /dev/null
+++ b/REORG.TODO/stdlib/fmtmsg.c
@@ -0,0 +1,386 @@
+/* Copyright (C) 1997-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <fmtmsg.h>
+#include <libc-lock.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/syslog.h>
+#include <wchar.h>
+
+
+/* We have global data, protect the modification. */
+__libc_lock_define_initialized (static, lock)
+
+
+enum
+{
+ label_mask = 0x01,
+ severity_mask = 0x02,
+ text_mask = 0x04,
+ action_mask = 0x08,
+ tag_mask = 0x10,
+ all_mask = label_mask | severity_mask | text_mask | action_mask | tag_mask
+};
+
+static const struct
+{
+ uint32_t len;
+ /* Adjust the size if new elements are added. */
+ const char name[12];
+} keywords[] =
+ {
+ { 5, "label" },
+ { 8, "severity" },
+ { 4, "text" },
+ { 6, "action"},
+ { 3, "tag" }
+ };
+#define NKEYWORDS (sizeof( keywords) / sizeof (keywords[0]))
+
+
+struct severity_info
+{
+ int severity;
+ const char *string;
+ struct severity_info *next;
+};
+
+
+/* List of known severities. */
+static const struct severity_info nosev =
+{
+ MM_NOSEV, "", NULL
+};
+static const struct severity_info haltsev =
+{
+ MM_HALT, "HALT", (struct severity_info *) &nosev
+};
+static const struct severity_info errorsev =
+{
+ MM_ERROR, "ERROR", (struct severity_info *) &haltsev
+};
+static const struct severity_info warningsev =
+{
+ MM_WARNING, "WARNING", (struct severity_info *) &errorsev
+};
+static const struct severity_info infosev =
+{
+ MM_INFO, "INFO", (struct severity_info *) &warningsev
+};
+
+/* Start of the list. */
+static struct severity_info *severity_list = (struct severity_info *) &infosev;
+
+/* Mask of values we will print. */
+static int print;
+
+/* Prototypes for local functions. */
+static void init (void);
+static int internal_addseverity (int severity, const char *string)
+ internal_function;
+
+
+int
+fmtmsg (long int classification, const char *label, int severity,
+ const char *text, const char *action, const char *tag)
+{
+ __libc_once_define (static, once);
+ struct severity_info *severity_rec;
+
+ /* Make sure everything is initialized. */
+ __libc_once (once, init);
+
+ /* Start the real work. First check whether the input is ok. */
+ if (label != MM_NULLLBL)
+ {
+ /* Must be two fields, separated by a colon. */
+ const char *cp = strchr (label, ':');
+ if (cp == NULL)
+ return MM_NOTOK;
+
+ /* The first field must not contain more than 10 bytes. */
+ if (cp - label > 10
+ /* The second field must not have more than 14 bytes. */
+ || strlen (cp + 1) > 14)
+ return MM_NOTOK;
+ }
+
+#ifdef __libc_ptf_call
+ /* We do not want this call to be cut short by a thread
+ cancellation. Therefore disable cancellation for now. */
+ int state = PTHREAD_CANCEL_ENABLE;
+ __libc_ptf_call (__pthread_setcancelstate,
+ (PTHREAD_CANCEL_DISABLE, &state), 0);
+#endif
+
+ __libc_lock_lock (lock);
+
+ for (severity_rec = severity_list; severity_rec != NULL;
+ severity_rec = severity_rec->next)
+ if (severity == severity_rec->severity)
+ /* Bingo. */
+ break;
+
+ /* If we don't know anything about the severity level return an error. */
+ int result = MM_NOTOK;
+ if (severity_rec != NULL)
+ {
+ result = MM_OK;
+
+ /* Now we can print. */
+ if (classification & MM_PRINT)
+ {
+ int do_label = (print & label_mask) && label != MM_NULLLBL;
+ int do_severity = (print & severity_mask) && severity != MM_NULLSEV;
+ int do_text = (print & text_mask) && text != MM_NULLTXT;
+ int do_action = (print & action_mask) && action != MM_NULLACT;
+ int do_tag = (print & tag_mask) && tag != MM_NULLTAG;
+ int need_colon = (do_label
+ && (do_severity | do_text | do_action | do_tag));
+
+ if (__fxprintf (stderr, "%s%s%s%s%s%s%s%s%s%s\n",
+ do_label ? label : "",
+ need_colon ? ": " : "",
+ do_severity ? severity_rec->string : "",
+ do_severity && (do_text | do_action | do_tag)
+ ? ": " : "",
+ do_text ? text : "",
+ do_text && (do_action | do_tag) ? "\n" : "",
+ do_action ? "TO FIX: " : "",
+ do_action ? action : "",
+ do_action && do_tag ? " " : "",
+ do_tag ? tag : "") < 0)
+ /* Oh, oh. An error occurred during the output. */
+ result = MM_NOMSG;
+ }
+
+ if (classification & MM_CONSOLE)
+ {
+ int do_label = label != MM_NULLLBL;
+ int do_severity = severity != MM_NULLSEV;
+ int do_text = text != MM_NULLTXT;
+ int do_action = action != MM_NULLACT;
+ int do_tag = tag != MM_NULLTAG;
+ int need_colon = (do_label
+ && (do_severity | do_text | do_action | do_tag));
+
+ syslog (LOG_ERR, "%s%s%s%s%s%s%s%s%s%s\n",
+ do_label ? label : "",
+ need_colon ? ": " : "",
+ do_severity ? severity_rec->string : "",
+ do_severity && (do_text | do_action | do_tag) ? ": " : "",
+ do_text ? text : "",
+ do_text && (do_action | do_tag) ? "\n" : "",
+ do_action ? "TO FIX: " : "",
+ do_action ? action : "",
+ do_action && do_tag ? " " : "",
+ do_tag ? tag : "");
+ }
+ }
+
+ __libc_lock_unlock (lock);
+
+#ifdef __libc_ptf_call
+ __libc_ptf_call (__pthread_setcancelstate, (state, NULL), 0);
+#endif
+
+ return result;
+}
+
+
+/* Initialize from environment variable content. */
+static void
+init (void)
+{
+ const char *msgverb_var = getenv ("MSGVERB");
+ const char *sevlevel_var = getenv ("SEV_LEVEL");
+
+ if (msgverb_var != NULL && msgverb_var[0] != '\0')
+ {
+ /* Using this extra variable allows us to work without locking. */
+ do
+ {
+ size_t cnt;
+
+ for (cnt = 0; cnt < NKEYWORDS; ++cnt)
+ if (memcmp (msgverb_var,
+ keywords[cnt].name, keywords[cnt].len) == 0
+ && (msgverb_var[keywords[cnt].len] == ':'
+ || msgverb_var[keywords[cnt].len] == '\0'))
+ break;
+
+ if (cnt < NKEYWORDS)
+ {
+ print |= 1 << cnt;
+
+ msgverb_var += keywords[cnt].len;
+ if (msgverb_var[0] == ':')
+ ++msgverb_var;
+ }
+ else
+ {
+ /* We found an illegal keyword in the environment
+ variable. The specifications say that we print all
+ fields. */
+ print = all_mask;
+ break;
+ }
+ }
+ while (msgverb_var[0] != '\0');
+ }
+ else
+ print = all_mask;
+
+
+ if (sevlevel_var != NULL)
+ {
+ __libc_lock_lock (lock);
+
+ while (sevlevel_var[0] != '\0')
+ {
+ const char *end = __strchrnul (sevlevel_var, ':');
+ int level;
+
+ /* First field: keyword. This is not used here but it must be
+ present. */
+ while (sevlevel_var < end)
+ if (*sevlevel_var++ == ',')
+ break;
+
+ if (sevlevel_var < end)
+ {
+ /* Second field: severity level, a number. */
+ char *cp;
+
+ level = strtol (sevlevel_var, &cp, 0);
+ if (cp != sevlevel_var && cp < end && *cp++ == ','
+ && level > MM_INFO)
+ {
+ const char *new_string;
+
+ new_string = __strndup (cp, end - cp);
+
+ if (new_string != NULL
+ && (internal_addseverity (level, new_string)
+ != MM_OK))
+ free ((char *) new_string);
+ }
+ }
+
+ sevlevel_var = end + (*end == ':' ? 1 : 0);
+ }
+
+ __libc_lock_unlock (lock);
+ }
+}
+
+
+/* Add the new entry to the list. */
+static int
+internal_function
+internal_addseverity (int severity, const char *string)
+{
+ struct severity_info *runp, *lastp;
+ int result = MM_OK;
+
+ /* First see if there is already a record for the severity level. */
+ for (runp = severity_list, lastp = NULL; runp != NULL; runp = runp->next)
+ if (runp->severity == severity)
+ break;
+ else
+ lastp = runp;
+
+ if (runp != NULL)
+ {
+ if (string != NULL)
+ /* Change the string. */
+ runp->string = string;
+ else
+ {
+ /* Remove the severity class. */
+ if (lastp == NULL)
+ severity_list = runp->next;
+ else
+ lastp->next = runp->next;
+
+ free (runp);
+ }
+ }
+ else if (string != NULL)
+ {
+ runp = malloc (sizeof (*runp));
+ if (runp == NULL)
+ result = MM_NOTOK;
+ else
+ {
+ runp->severity = severity;
+ runp->next = severity_list;
+ runp->string = string;
+ severity_list = runp;
+ }
+ }
+ else
+ /* We tried to remove a non-existing severity class. */
+ result = MM_NOTOK;
+
+ return result;
+}
+
+
+/* Add new severity level or remove old one. */
+int
+__addseverity (int severity, const char *string)
+{
+ int result;
+
+ /* Prevent illegal SEVERITY values. */
+ if (severity <= MM_INFO)
+ return MM_NOTOK;
+
+ /* Protect the global data. */
+ __libc_lock_lock (lock);
+
+ /* Do the real work. */
+ result = internal_addseverity (severity, string);
+
+ /* Release the lock. */
+ __libc_lock_unlock (lock);
+
+ return result;
+}
+weak_alias (__addseverity, addseverity)
+
+
+libc_freeres_fn (free_mem)
+{
+ struct severity_info *runp = severity_list;
+
+ while (runp != NULL)
+ if (runp->severity > MM_INFO)
+ {
+ /* This is data we have to release. */
+ struct severity_info *here = runp;
+ runp = runp->next;
+ free (here);
+ }
+ else
+ runp = runp->next;
+}
diff --git a/REORG.TODO/stdlib/fmtmsg.h b/REORG.TODO/stdlib/fmtmsg.h
new file mode 100644
index 0000000000..0b9069ca10
--- /dev/null
+++ b/REORG.TODO/stdlib/fmtmsg.h
@@ -0,0 +1,105 @@
+/* Message display handling.
+ Copyright (C) 1997-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef __FMTMSG_H
+#define __FMTMSG_H 1
+
+#include <features.h>
+
+
+__BEGIN_DECLS
+
+/* Values to control `fmtmsg' function. */
+enum
+{
+ MM_HARD = 0x001, /* Source of the condition is hardware. */
+#define MM_HARD MM_HARD
+ MM_SOFT = 0x002, /* Source of the condition is software. */
+#define MM_SOFT MM_SOFT
+ MM_FIRM = 0x004, /* Source of the condition is firmware. */
+#define MM_FIRM MM_FIRM
+ MM_APPL = 0x008, /* Condition detected by application. */
+#define MM_APPL MM_APPL
+ MM_UTIL = 0x010, /* Condition detected by utility. */
+#define MM_UTIL MM_UTIL
+ MM_OPSYS = 0x020, /* Condition detected by operating system. */
+#define MM_OPSYS MM_OPSYS
+ MM_RECOVER = 0x040, /* Recoverable error. */
+#define MM_RECOVER MM_RECOVER
+ MM_NRECOV = 0x080, /* Non-recoverable error. */
+#define MM_NRECOV MM_NRECOV
+ MM_PRINT = 0x100, /* Display message in standard error. */
+#define MM_PRINT MM_PRINT
+ MM_CONSOLE = 0x200 /* Display message on system console. */
+#define MM_CONSOLE MM_CONSOLE
+};
+
+/* Values to be for SEVERITY parameter of `fmtmsg'. */
+enum
+{
+ MM_NOSEV = 0, /* No severity level provided for the message. */
+#define MM_NOSEV MM_NOSEV
+ MM_HALT, /* Error causing application to halt. */
+#define MM_HALT MM_HALT
+ MM_ERROR, /* Application has encountered a non-fatal fault. */
+#define MM_ERROR MM_ERROR
+ MM_WARNING, /* Application has detected unusual non-error
+ condition. */
+#define MM_WARNING MM_WARNING
+ MM_INFO /* Informative message. */
+#define MM_INFO MM_INFO
+};
+
+
+/* Macros which can be used as null values for the arguments of `fmtmsg'. */
+#define MM_NULLLBL ((char *) 0)
+#define MM_NULLSEV 0
+#define MM_NULLMC ((long int) 0)
+#define MM_NULLTXT ((char *) 0)
+#define MM_NULLACT ((char *) 0)
+#define MM_NULLTAG ((char *) 0)
+
+
+/* Possible return values of `fmtmsg'. */
+enum
+{
+ MM_NOTOK = -1,
+#define MM_NOTOK MM_NOTOK
+ MM_OK = 0,
+#define MM_OK MM_OK
+ MM_NOMSG = 1,
+#define MM_NOMSG MM_NOMSG
+ MM_NOCON = 4
+#define MM_NOCON MM_NOCON
+};
+
+
+/* Print message with given CLASSIFICATION, LABEL, SEVERITY, TEXT, ACTION
+ and TAG to console or standard error. */
+extern int fmtmsg (long int __classification, const char *__label,
+ int __severity, const char *__text,
+ const char *__action, const char *__tag);
+
+#ifdef __USE_MISC
+/* Add or remove severity level. */
+extern int addseverity (int __severity, const char *__string) __THROW;
+#endif
+
+__END_DECLS
+
+#endif /* fmtmsg.h */
diff --git a/REORG.TODO/stdlib/fpioconst.c b/REORG.TODO/stdlib/fpioconst.c
new file mode 100644
index 0000000000..a0563b9676
--- /dev/null
+++ b/REORG.TODO/stdlib/fpioconst.c
@@ -0,0 +1,1329 @@
+/* Table of MP integer constants 10^(2^i), used for floating point <-> decimal.
+ Copyright (C) 1995-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include "fpioconst.h"
+#include <gmp-mparam.h> /* This defines BITS_PER_MP_LIMB. */
+
+/* First page : 32-bit limbs
+ Second page : 64-bit limbs
+ Last page : table of pointers
+
+ The tables (apart from internal #if conditions) may be generated
+ with gen-fpioconst.c.
+ */
+
+#if BITS_PER_MP_LIMB == 32
+
+/* Table with constants of 10^(2^i), i=0..12 for 32-bit limbs. */
+
+const mp_limb_t __tens[] =
+{
+#define TENS_P0_IDX 0
+#define TENS_P0_SIZE 3
+ [TENS_P0_IDX] = 0x00000000, 0x00000000, 0x0000000a,
+
+#define TENS_P1_IDX (TENS_P0_IDX + TENS_P0_SIZE)
+#define TENS_P1_SIZE 3
+ [TENS_P1_IDX] = 0x00000000, 0x00000000, 0x00000064,
+
+#define TENS_P2_IDX (TENS_P1_IDX + TENS_P1_SIZE)
+#define TENS_P2_SIZE 3
+ [TENS_P2_IDX] = 0x00000000, 0x00000000, 0x00002710,
+
+#define TENS_P3_IDX (TENS_P2_IDX + TENS_P2_SIZE)
+#define TENS_P3_SIZE 3
+ [TENS_P3_IDX] = 0x00000000, 0x00000000, 0x05f5e100,
+
+#define TENS_P4_IDX (TENS_P3_IDX + TENS_P3_SIZE)
+#define TENS_P4_SIZE 4
+ [TENS_P4_IDX] = 0x00000000, 0x00000000, 0x6fc10000, 0x002386f2,
+
+#define TENS_P5_IDX (TENS_P4_IDX + TENS_P4_SIZE)
+#define TENS_P5_SIZE 6
+ [TENS_P5_IDX] = 0x00000000, 0x00000000, 0x00000000, 0x85acef81, 0x2d6d415b,
+ 0x000004ee,
+
+#define TENS_P6_IDX (TENS_P5_IDX + TENS_P5_SIZE)
+#define TENS_P6_SIZE 9
+ [TENS_P6_IDX] = 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xbf6a1f01,
+ 0x6e38ed64, 0xdaa797ed, 0xe93ff9f4, 0x00184f03,
+
+#define TENS_P7_IDX (TENS_P6_IDX + TENS_P6_SIZE)
+#define TENS_P7_SIZE 16
+ [TENS_P7_IDX] = 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x2e953e01, 0x03df9909, 0x0f1538fd, 0x2374e42f, 0xd3cff5ec,
+ 0xc404dc08, 0xbccdb0da, 0xa6337f19, 0xe91f2603, 0x0000024e,
+
+#define TENS_P8_IDX (TENS_P7_IDX + TENS_P7_SIZE)
+#define TENS_P8_SIZE 29
+ [TENS_P8_IDX] = 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x982e7c01,
+ 0xbed3875b, 0xd8d99f72, 0x12152f87, 0x6bde50c6, 0xcf4a6e70, 0xd595d80f,
+ 0x26b2716e, 0xadc666b0, 0x1d153624, 0x3c42d35a, 0x63ff540e, 0xcc5573c0,
+ 0x65f9ef17, 0x55bc28f2, 0x80dcc7f7, 0xf46eeddc, 0x5fdcefce, 0x000553f7,
+
+#define TENS_P9_IDX (TENS_P8_IDX + TENS_P8_SIZE)
+#define TENS_P9_SIZE 56
+ [TENS_P9_IDX] = 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0xfc6cf801, 0x77f27267, 0x8f9546dc, 0x5d96976f, 0xb83a8a97,
+ 0xc31e1ad9, 0x46c40513, 0x94e65747, 0xc88976c1, 0x4475b579, 0x28f8733b,
+ 0xaa1da1bf, 0x703ed321, 0x1e25cfea, 0xb21a2f22, 0xbc51fb2e, 0x96e14f5d,
+ 0xbfa3edac, 0x329c57ae, 0xe7fc7153, 0xc3fc0695, 0x85a91924, 0xf95f635e,
+ 0xb2908ee0, 0x93abade4, 0x1366732a, 0x9449775c, 0x69be5b0e, 0x7343afac,
+ 0xb099bc81, 0x45a71d46, 0xa2699748, 0x8cb07303, 0x8a0b1f13, 0x8cab8a97,
+ 0xc1d238d9, 0x633415d4, 0x0000001c,
+
+#define TENS_P10_IDX (TENS_P9_IDX + TENS_P9_SIZE)
+#define TENS_P10_SIZE 109
+ [TENS_P10_IDX] = 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x2919f001,
+ 0xf55b2b72, 0x6e7c215b, 0x1ec29f86, 0x991c4e87, 0x15c51a88, 0x140ac535,
+ 0x4c7d1e1a, 0xcc2cd819, 0x0ed1440e, 0x896634ee, 0x7de16cfb, 0x1e43f61f,
+ 0x9fce837d, 0x231d2b9c, 0x233e55c7, 0x65dc60d7, 0xf451218b, 0x1c5cd134,
+ 0xc9635986, 0x922bbb9f, 0xa7e89431, 0x9f9f2a07, 0x62be695a, 0x8e1042c4,
+ 0x045b7a74, 0x1abe1de3, 0x8ad822a5, 0xba34c411, 0xd814b505, 0xbf3fdeb3,
+ 0x8fc51a16, 0xb1b896bc, 0xf56deeec, 0x31fb6bfd, 0xb6f4654b, 0x101a3616,
+ 0x6b7595fb, 0xdc1a47fe, 0x80d98089, 0x80bda5a5, 0x9a202882, 0x31eb0f66,
+ 0xfc8f1f90, 0x976a3310, 0xe26a7b7e, 0xdf68368a, 0x3ce3a0b8, 0x8e4262ce,
+ 0x75a351a2, 0x6cb0b6c9, 0x44597583, 0x31b5653f, 0xc356e38a, 0x35faaba6,
+ 0x0190fba0, 0x9fc4ed52, 0x88bc491b, 0x1640114a, 0x005b8041, 0xf4f3235e,
+ 0x1e8d4649, 0x36a8de06, 0x73c55349, 0xa7e6bd2a, 0xc1a6970c, 0x47187094,
+ 0xd2db49ef, 0x926c3f5b, 0xae6209d4, 0x2d433949, 0x34f4a3c6, 0xd4305d94,
+ 0xd9d61a05, 0x00000325,
+
+#if FPIOCONST_HAVE_EXTENDED_RANGE
+# define TENS_P11_IDX (TENS_P10_IDX + TENS_P10_SIZE)
+# define TENS_P11_SIZE 215
+ [TENS_P11_IDX] = 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x1333e001, 0xe3096865, 0xb27d4d3f, 0x49e28dcf, 0xec2e4721,
+ 0xee87e354, 0xb6067584, 0x368b8abb, 0xa5e5a191, 0x2ed56d55, 0xfd827773,
+ 0xea50d142, 0x51b78db2, 0x98342c9e, 0xc850dabc, 0x866ed6f1, 0x19342c12,
+ 0x92794987, 0xd2f869c2, 0x66912e4a, 0x71c7fd8f, 0x57a7842d, 0x235552eb,
+ 0xfb7fedcc, 0xf3861ce0, 0x38209ce1, 0x9713b449, 0x34c10134, 0x8c6c54de,
+ 0xa7a8289c, 0x2dbb6643, 0xe3cb64f3, 0x8074ff01, 0xe3892ee9, 0x10c17f94,
+ 0xa8f16f92, 0xa8281ed6, 0x967abbb3, 0x5a151440, 0x9952fbed, 0x13b41e44,
+ 0xafe609c3, 0xa2bca416, 0xf111821f, 0xfb1264b4, 0x91bac974, 0xd6c7d6ab,
+ 0x8e48ff35, 0x4419bd43, 0xc4a65665, 0x685e5510, 0x33554c36, 0xab498697,
+ 0x0dbd21fe, 0x3cfe491d, 0x982da466, 0xcbea4ca7, 0x9e110c7b, 0x79c56b8a,
+ 0x5fc5a047, 0x84d80e2e, 0x1aa9f444, 0x730f203c, 0x6a57b1ab, 0xd752f7a6,
+ 0x87a7dc62, 0x944545ff, 0x40660460, 0x77c1a42f, 0xc9ac375d, 0xe866d7ef,
+ 0x744695f0, 0x81428c85, 0xa1fc6b96, 0xd7917c7b, 0x7bf03c19, 0x5b33eb41,
+ 0x5715f791, 0x8f6cae5f, 0xdb0708fd, 0xb125ac8e, 0x785ce6b7, 0x56c6815b,
+ 0x6f46eadb, 0x4eeebeee, 0x195355d8, 0xa244de3c, 0x9d7389c0, 0x53761abd,
+ 0xcf99d019, 0xde9ec24b, 0x0d76ce39, 0x70beb181, 0x2e55ecee, 0xd5f86079,
+ 0xf56d9d4b, 0xfb8886fb, 0x13ef5a83, 0x408f43c5, 0x3f3389a4, 0xfad37943,
+ 0x58ccf45c, 0xf82df846, 0x415c7f3e, 0x2915e818, 0x8b3d5cf4, 0x6a445f27,
+ 0xf8dbb57a, 0xca8f0070, 0x8ad803ec, 0xb2e87c34, 0x038f9245, 0xbedd8a6c,
+ 0xc7c9dee0, 0x0eac7d56, 0x2ad3fa14, 0xe0de0840, 0xf775677c, 0xf1bd0ad5,
+ 0x92be221e, 0x87fa1fb9, 0xce9d04a4, 0xd2c36fa9, 0x3f6f7024, 0xb028af62,
+ 0x907855ee, 0xd83e49d6, 0x4efac5dc, 0xe7151aab, 0x77cd8c6b, 0x0a753b7d,
+ 0x0af908b4, 0x8c983623, 0xe50f3027, 0x94222771, 0x1d08e2d6, 0xf7e928e6,
+ 0xf2ee5ca6, 0x1b61b93c, 0x11eb962b, 0x9648b21c, 0xce2bcba1, 0x34f77154,
+ 0x7bbebe30, 0xe526a319, 0x8ce329ac, 0xde4a74d2, 0xb5dc53d5, 0x0009e8b3,
+
+# define TENS_P12_IDX (TENS_P11_IDX + TENS_P11_SIZE)
+# define TENS_P12_SIZE 428
+ [TENS_P12_IDX] = 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x2a67c001,
+ 0xd4724e8d, 0x8efe7ae7, 0xf89a1e90, 0xef084117, 0x54e05154, 0x13b1bb51,
+ 0x506be829, 0xfb29b172, 0xe599574e, 0xf0da6146, 0x806c0ed3, 0xb86ae5be,
+ 0x45155e93, 0xc0591cc2, 0x7e1e7c34, 0x7c4823da, 0x1d1f4cce, 0x9b8ba1e8,
+ 0xd6bfdf75, 0xe341be10, 0xc2dfae78, 0x016b67b2, 0x0f237f1a, 0x3dbeabcd,
+ 0xaf6a2574, 0xcab3e6d7, 0x142e0e80, 0x61959127, 0x2c234811, 0x87009701,
+ 0xcb4bf982, 0xf8169c84, 0x88052f8c, 0x68dde6d4, 0xbc131761, 0xff0b0905,
+ 0x54ab9c41, 0x7613b224, 0x1a1c304e, 0x3bfe167b, 0x441c2d47, 0x4f6cea9c,
+ 0x78f06181, 0xeb659fb8, 0x30c7ae41, 0x947e0d0e, 0xa1ebcad7, 0xd97d9556,
+ 0x2130504d, 0x1a8309cb, 0xf2acd507, 0x3f8ec72a, 0xfd82373a, 0x95a842bc,
+ 0x280f4d32, 0xf3618ac0, 0x811a4f04, 0x6dc3a5b4, 0xd3967a1b, 0x15b8c898,
+ 0xdcfe388f, 0x454eb2a0, 0x8738b909, 0x10c4e996, 0x2bd9cc11, 0x3297cd0c,
+ 0x655fec30, 0xae0725b1, 0xf4090ee8, 0x037d19ee, 0x398c6fed, 0x3b9af26b,
+ 0xc994a450, 0xb5341743, 0x75a697b2, 0xac50b9c1, 0x3ccb5b92, 0xffe06205,
+ 0xa8329761, 0xdfea5242, 0xeb83cadb, 0xe79dadf7, 0x3c20ee69, 0x1e0a6817,
+ 0x7021b97a, 0x743074fa, 0x176ca776, 0x77fb8af6, 0xeca19beb, 0x92baf1de,
+ 0xaf63b712, 0xde35c88b, 0xa4eb8f8c, 0xe137d5e9, 0x40b464a0, 0x87d1cde8,
+ 0x42923bbd, 0xcd8f62ff, 0x2e2690f3, 0x095edc16, 0x59c89f1b, 0x1fa8fd5d,
+ 0x5138753d, 0x390a2b29, 0x80152f18, 0x2dd8d925, 0xf984d83e, 0x7a872e74,
+ 0xc19e1faf, 0xed4d542d, 0xecf9b5d0, 0x9462ea75, 0xc53c0adf, 0x0caea134,
+ 0x37a2d439, 0xc8fa2e8a, 0x2181327e, 0x6e7bb827, 0x2d240820, 0x50be10e0,
+ 0x5893d4b8, 0xab312bb9, 0x1f2b2322, 0x440b3f25, 0xbf627ede, 0x72dac789,
+ 0xb608b895, 0x78787e2a, 0x86deb3f0, 0x6fee7aab, 0xbb9373f4, 0x27ecf57b,
+ 0xf7d8b57e, 0xfca26a9f, 0x3d04e8d2, 0xc9df13cb, 0x3172826a, 0xcd9e8d7c,
+ 0xa8fcd8e0, 0xb2c39497, 0x307641d9, 0x1cc939c1, 0x2608c4cf, 0xb6d1c7bf,
+ 0x3d326a7e, 0xeeaf19e6, 0x8e13e25f, 0xee63302b, 0x2dfe6d97, 0x25971d58,
+ 0xe41d3cc4, 0x0a80627c, 0xab8db59a, 0x9eea37c8, 0xe90afb77, 0x90ca19cf,
+ 0x9ee3352c, 0x3613c850, 0xfe78d682, 0x788f6e50, 0x5b060904, 0xb71bd1a4,
+ 0x3fecb534, 0xb32c450c, 0x20c33857, 0xa6e9cfda, 0x0239f4ce, 0x48497187,
+ 0xa19adb95, 0xb492ed8a, 0x95aca6a8, 0x4dcd6cd9, 0xcf1b2350, 0xfbe8b12a,
+ 0x1a67778c, 0x38eb3acc, 0xc32da383, 0xfb126ab1, 0xa03f40a8, 0xed5bf546,
+ 0xe9ce4724, 0x4c4a74fd, 0x73a130d8, 0xd9960e2d, 0xa2ebd6c1, 0x94ab6feb,
+ 0x6f233b7c, 0x49126080, 0x8e7b9a73, 0x4b8c9091, 0xd298f999, 0x35e836b5,
+ 0xa96ddeff, 0x96119b31, 0x6b0dd9bc, 0xc6cc3f8d, 0x282566fb, 0x72b882e7,
+ 0xd6769f3b, 0xa674343d, 0x00fc509b, 0xdcbf7789, 0xd6266a3f, 0xae9641fd,
+ 0x4e89541b, 0x11953407, 0x53400d03, 0x8e0dd75a, 0xe5b53345, 0x108f19ad,
+ 0x108b89bc, 0x41a4c954, 0xe03b2b63, 0x437b3d7f, 0x97aced8e, 0xcbd66670,
+ 0x2c5508c2, 0x650ebc69, 0x5c4f2ef0, 0x904ff6bf, 0x9985a2df, 0x9faddd9e,
+ 0x5ed8d239, 0x25585832, 0xe3e51cb9, 0x0ff4f1d4, 0x56c02d9a, 0x8c4ef804,
+ 0xc1a08a13, 0x13fd01c8, 0xe6d27671, 0xa7c234f4, 0x9d0176cc, 0xd0d73df2,
+ 0x4d8bfa89, 0x544f10cd, 0x2b17e0b2, 0xb70a5c7d, 0xfd86fe49, 0xdf373f41,
+ 0x214495bb, 0x84e857fd, 0x00d313d5, 0x0496fcbe, 0xa4ba4744, 0xe8cac982,
+ 0xaec29e6e, 0x87ec7038, 0x7000a519, 0xaeee333b, 0xff66e42c, 0x8afd6b25,
+ 0x03b4f63b, 0xbd7991dc, 0x5ab8d9c7, 0x2ed4684e, 0x48741a6c, 0xaf06940d,
+ 0x2fdc6349, 0xb03d7ecd, 0xe974996f, 0xac7867f9, 0x52ec8721, 0xbcdd9d4a,
+ 0x8edd2d00, 0x3557de06, 0x41c759f8, 0x3956d4b9, 0xa75409f2, 0x123cd8a1,
+ 0xb6100fab, 0x3e7b21e2, 0x2e8d623b, 0x92959da2, 0xbca35f77, 0x200c03a5,
+ 0x35fcb457, 0x1bb6c6e4, 0xf74eb928, 0x3d5d0b54, 0x87cc1d21, 0x4964046f,
+ 0x18ae4240, 0xd868b275, 0x8bd2b496, 0x1c5563f4, 0xc234d8f5, 0xf868e970,
+ 0xf9151fff, 0xae7be4a2, 0x271133ee, 0xbb0fd922, 0x25254932, 0xa60a9fc0,
+ 0x104bcd64, 0x30290145, 0x00000062,
+
+# define TENS_P13_IDX (TENS_P12_IDX + TENS_P12_SIZE)
+# define TENS_P13_SIZE 853
+ [TENS_P13_IDX] = 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x64cf8001, 0x9f345226, 0x644963e5, 0x7b8d5053, 0x49f0aa29,
+ 0xb945c82f, 0x430ff478, 0x933b6bb8, 0x5ff82d0a, 0x64c501d4, 0x73bbf174,
+ 0x9ec1e1b3, 0x3bfbe803, 0xe9010689, 0xf7390d8e, 0x3fef8d80, 0xf31d1325,
+ 0x2c73446b, 0xf5ca7a92, 0x1c19e379, 0x270af2be, 0xf52d9d9c, 0xeb2bed48,
+ 0x3abf72e1, 0x4ac4ffc2, 0x7ecf3508, 0x22019a82, 0x38597a5a, 0xbe6a7b3c,
+ 0x9a51ff6e, 0xa2d28437, 0x0c0abe9d, 0x7c9ec6ea, 0xc79887ff, 0x5851c899,
+ 0x436420d0, 0xefead581, 0x72b5547f, 0x99b1d2b5, 0x077ad8f8, 0x5cddbf5b,
+ 0x3b4305ed, 0xe3861ac7, 0x2d88f3fd, 0x3d6b43be, 0x393220aa, 0xe5382405,
+ 0x1cd62095, 0x61a10c96, 0x87a0d1e1, 0xca95a55d, 0x68c933e6, 0x9ee082e2,
+ 0x778089bb, 0x41429ee9, 0xfbb6d8d4, 0xc529500d, 0x26cf5471, 0x68b9be29,
+ 0xd6c9b140, 0x07be635a, 0x84151852, 0xb5572182, 0x83730335, 0xeb2300b4,
+ 0xdd312d31, 0x05d6dd9b, 0x488da59c, 0x37784d25, 0xda2c2e40, 0x6a8d92fa,
+ 0x6a57d720, 0x950b41ac, 0xf07a8632, 0xcd55f062, 0x2ecad06a, 0xe6a3dfe7,
+ 0x34c98bb0, 0x9c767d8f, 0xb60521b1, 0x752aafd1, 0xe87d16be, 0x9de1d728,
+ 0xe58a8b0c, 0xc6013830, 0x2fa2c119, 0x3c4f9156, 0x519b40c8, 0x5058fc8f,
+ 0xab78701b, 0xadc59c47, 0xc502a554, 0x0fb3286f, 0x6647f04c, 0x9db4076e,
+ 0x5ea495c8, 0x9c74fab1, 0xb4f00f8b, 0x897c7a3c, 0xd092b4c6, 0x283e0340,
+ 0x32f31fa8, 0xeeb708cc, 0x67b63de2, 0x4f7b3c8b, 0xef2bc02b, 0xda14bfe3,
+ 0xc49344c0, 0xaabc85be, 0xb6c4e69e, 0x2ece8aa6, 0x63a11016, 0x19cfba4d,
+ 0x726ae4d9, 0x0fc90b42, 0xee6ae707, 0x4290b04a, 0x4d9aabc5, 0xfb2b070e,
+ 0xf34906cd, 0x1ff54b0a, 0x52ca9709, 0x0b42bfe1, 0x16431570, 0x980f3076,
+ 0x6b5565bb, 0xeb8c4c4a, 0x9ce63c76, 0xb9e4c771, 0x3da24c53, 0x6f0266fa,
+ 0xb50e3c66, 0x76e34f79, 0x01bb4b96, 0x9948cf3e, 0x0fbea124, 0x86bead12,
+ 0xa1fa4edc, 0xd11e901c, 0xc3b97bf9, 0x71730e03, 0x370ca58e, 0x48b19715,
+ 0x886467e2, 0xdb237497, 0x3c727e24, 0x2116ccd2, 0x8e67d76e, 0xf973aecf,
+ 0x34bdedd3, 0x31d680ec, 0xb042ab05, 0x770e96a0, 0xfc5c3c17, 0xab6f1874,
+ 0xb8204ece, 0x5843f3a5, 0x416c0ced, 0x11dd112f, 0x95780183, 0xb1c74bd8,
+ 0x7e0e8613, 0x96c6453b, 0xa79ffc10, 0xb2157651, 0xfcd6da0a, 0x836a34a7,
+ 0x3dd0ccac, 0x316e5a36, 0x496049ed, 0x0322bcb2, 0xdea1a97d, 0xcdf2aa5a,
+ 0x39578d53, 0x1d1aa931, 0x030565c9, 0xd198cbed, 0x324e0a27, 0x5db83e8a,
+ 0x28432534, 0x90bf23e8, 0x5cb134c0, 0xdd0adab6, 0x009e5051, 0xf8ad61da,
+ 0x7e36a6d7, 0x84c75e57, 0xbdffe6aa, 0xb5d5532e, 0x138d680e, 0xbd84ddac,
+ 0x4a5f74a1, 0xccff00d1, 0x55538cfa, 0xb0948b8c, 0x48528011, 0xe345f82e,
+ 0x9e047ad7, 0x6ee770ff, 0xea77bef0, 0x0fc13669, 0x2f162567, 0x869426ac,
+ 0x0614686c, 0x3a3ff464, 0x4263ed82, 0xb3589b47, 0x57205a7a, 0x213f24ad,
+ 0xae6fc46b, 0x3de03e4e, 0xd92b133f, 0x315a589b, 0x1b49c24a, 0x73381bcb,
+ 0x1641c138, 0x7bc99425, 0xbc680ada, 0xa5cfbc9a, 0x962e9884, 0x0a960d70,
+ 0xfc8d12f6, 0xed18ef4c, 0x60acc868, 0x9aea5d14, 0x13113036, 0xc747c87e,
+ 0x2d99a5b0, 0x3a369bb3, 0x006b3658, 0x118a5135, 0xe43fa6e6, 0xb4947190,
+ 0xa13dc05e, 0xd7733db8, 0x0dbd7170, 0xc3fb67d1, 0x117ed7e7, 0xe2d72a49,
+ 0xc05fe99e, 0x9638db40, 0xd971a25b, 0x4239d468, 0x1a159559, 0x850a223c,
+ 0xc1117392, 0x22d2dbd8, 0x567b5fc0, 0x92c5b4eb, 0xc051007a, 0x11cc0099,
+ 0xfb355720, 0x6907810d, 0x39848161, 0x5e8534f4, 0x61d19ef2, 0x2ee8c466,
+ 0x8a0ab03c, 0xc234af76, 0x879aa514, 0x9774a235, 0x59e5da57, 0x9bc466b3,
+ 0xf339bd5a, 0x44ab026d, 0xbbb5fd67, 0x2b977202, 0x3685c9f2, 0x03e5dc00,
+ 0x7054359e, 0x5239cfb0, 0x9ba11f08, 0xf8237562, 0x9c258687, 0xa3b510dd,
+ 0x52c7bf8f, 0xb31ed0cf, 0x3245e079, 0xff9ff8d3, 0xbaee38c7, 0xf17d5562,
+ 0xf702b3b9, 0xcc4c8563, 0xcbca275d, 0xe005d9d1, 0xe817dbac, 0x05c6920a,
+ 0x62cee350, 0x0f1deac0, 0x19e049b9, 0x59599f74, 0xb2a27a16, 0xf0911d5a,
+ 0x7dcef00d, 0x3603dd66, 0x37552251, 0x97813735, 0x5fa022da, 0x0d849416,
+ 0xefbe57c2, 0x30a0e592, 0x57619296, 0xc953cc47, 0x11735043, 0xa83526ad,
+ 0xc0444be0, 0xb5f8463c, 0x16ff5136, 0x2a0a6631, 0xf037572c, 0xd30464da,
+ 0xb1bf8daa, 0x7f5718f7, 0x0f3e9e7e, 0xe5a4cfe7, 0xc26f2624, 0x8c9b5ae4,
+ 0xdfe8f485, 0xf6fa82e3, 0xc64a1509, 0xacb24aea, 0x3024b220, 0xddb02ac0,
+ 0xddcdfedd, 0xd834c574, 0x384c86c3, 0xd904e099, 0xdd48a571, 0x4550a05f,
+ 0x77b35c74, 0x81e85f71, 0xaaebdc6d, 0x0f9bb0b1, 0xd4cdc054, 0x7af4df85,
+ 0x845786af, 0xe5e53887, 0xdf2a91ca, 0xf6a58211, 0x5689a3c4, 0x8cf6aa15,
+ 0xa705983a, 0x9fbf2f52, 0x2ce7fef0, 0x48e84a62, 0x4a3b5365, 0xf8281a47,
+ 0xd48a0872, 0x8423dcf6, 0xf0929c3e, 0x044a5049, 0xe9ec071b, 0x17decc36,
+ 0x20e30c1b, 0x45fc2813, 0x3342196a, 0x46afb7f9, 0x6601e337, 0x30754439,
+ 0xf18094d1, 0xd38b4112, 0x61410dd1, 0xd8796b36, 0xd97d4dd8, 0x47e9bc0b,
+ 0x80805191, 0x1584e2da, 0xcde438c1, 0x955d24f1, 0x409659a1, 0x1b0950b1,
+ 0x5a09635f, 0x65b1febe, 0x615472b9, 0x525dc00a, 0x6308e067, 0x4089e2d4,
+ 0xd4e705a4, 0x43fc9209, 0x32c18b26, 0x4447a5fa, 0xaf271153, 0x3617cadc,
+ 0x4dc4f0d2, 0x692eb386, 0x6aa116ef, 0x655991bc, 0x0641dc0b, 0x54469597,
+ 0xc6559664, 0x749c0fe8, 0x4bdc0d1a, 0xa7d3381e, 0xc5292a61, 0x4eb65fdc,
+ 0x42474cc2, 0xf2c6b173, 0x19dfc9ee, 0x0a19a199, 0xbece2ee3, 0xc68b778d,
+ 0xaa03aa7c, 0xc8db86f0, 0xae54d2be, 0xb92a01e0, 0xdee3f48f, 0x6023c0a9,
+ 0xf6ae2852, 0xa233763b, 0xa441cb9e, 0x3246dddd, 0x3a8bb4b7, 0x44faa3c3,
+ 0x308ef2c8, 0xfd1c8516, 0xd2862534, 0x3b25ebe7, 0x62336f6f, 0x0c336a45,
+ 0x0b8e2ce6, 0xe867f171, 0x11eea1f2, 0x523972ec, 0x68df4903, 0x50c05824,
+ 0x51ef4cb7, 0xcb4df2a8, 0x3ffae115, 0xb51aca2f, 0x3ed1635f, 0xd6ff1cc6,
+ 0x0a5ac09f, 0xde8ed9d6, 0x0a3dc76f, 0x5dc2d8dd, 0x37991dde, 0xf95bacb2,
+ 0x80ad6e13, 0x163005ee, 0xd4f8c7a6, 0x3225d180, 0xa4760f08, 0x5fff004d,
+ 0x9b2b1a87, 0xe7ea8576, 0x5cd00b66, 0xec478452, 0x285dd80d, 0x20112439,
+ 0x4301b3a1, 0xff879fc8, 0xfacbb68c, 0xaf6af6b8, 0xb17fdf84, 0xc208d9f1,
+ 0xf4489576, 0x8794a6e9, 0xadcc862c, 0x0e83e54c, 0x931685a4, 0xab01c580,
+ 0x1e40293b, 0xcad784fa, 0x1f1ddf7f, 0x6b856084, 0xcee722b2, 0x1c39938b,
+ 0x74254eb4, 0xc7ccebf4, 0xb9c26d9a, 0x6b08dfb9, 0x2e3ece24, 0x981455ec,
+ 0xdff60410, 0xbc804e2b, 0xe06fa38b, 0xb534540c, 0x72e53c52, 0x02dfb2ef,
+ 0xb2a5c05a, 0x5002a2a5, 0x97313338, 0x597c53ff, 0xd61df455, 0x34e5261a,
+ 0x39ac2ec5, 0xc6bc0cab, 0x388b7539, 0x3f732fc0, 0x00eac704, 0x92fb21d9,
+ 0xc089971e, 0xb4ffa503, 0x7af93f8f, 0x72e353b6, 0xa8311b23, 0x8266c9af,
+ 0x1de496ca, 0xdbdb16b0, 0xd6fa0b51, 0x9991a5ef, 0xbd563089, 0x168cbe0f,
+ 0x0954a1e3, 0x537b9245, 0x53d09723, 0x2867272d, 0x86558cb9, 0x0b83f026,
+ 0xfac85d10, 0xf8562951, 0x1e5ddb95, 0xad3668c8, 0x48d27b92, 0xc930b7e6,
+ 0x19b58a99, 0xa3de74e3, 0xa9cda917, 0xcb6e35ee, 0x7a4dd16e, 0x4c80e9d5,
+ 0x4d84073f, 0x74a95ba8, 0x9cffcfc0, 0xd28485eb, 0x15796372, 0x5717e9cd,
+ 0x77eda8df, 0xab473c4e, 0xadb965e1, 0xffad6959, 0x5bc05659, 0x6ed63880,
+ 0xfb240227, 0x2014850b, 0xd15fdddf, 0xfdd74592, 0xb538f37d, 0x3a8e2e82,
+ 0x1473396f, 0xf6a5edf8, 0x3ce41a21, 0x0cc4351a, 0x754e8264, 0xaab95e73,
+ 0xc7821b96, 0xf42ff463, 0xc242faaa, 0xdd00ac65, 0x087e260e, 0x17d193f5,
+ 0x0dbe0328, 0x844a63c9, 0xf9d10f96, 0x85aa91dd, 0xbaf127ec, 0x0ab6dabb,
+ 0xce85e6a5, 0x1af5d24f, 0xe7b56a16, 0xcd6c5a19, 0x57d1d79f, 0x5dfc2b28,
+ 0xec4dd2f0, 0x18fe64a1, 0x8d72216a, 0x5f222077, 0x72f14a08, 0xd8b09b11,
+ 0x3bf038ab, 0xc6cf1f44, 0xc4265d7c, 0xdab1b0e7, 0x46398d2c, 0x7dcfdc68,
+ 0xb6e705d3, 0x4aafd1e6, 0x362c1183, 0xd8701107, 0xf6ac98b7, 0xad114d7e,
+ 0xd6649424, 0xc40ab551, 0xddd1c6e4, 0xa132030f, 0xc9d284c8, 0xdb1f662a,
+ 0x824069ee, 0x4157904b, 0xc846b3ad, 0xd38481ca, 0x0a248c17, 0xc846831f,
+ 0xe8745feb, 0x000025a8,
+
+# define TENS_P14_IDX (TENS_P13_IDX + TENS_P13_SIZE)
+# define TENS_P14_SIZE 1703
+ [TENS_P14_IDX] = 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x099f0001,
+ 0x41b5687d, 0xcbfd1b6e, 0x8c75ee63, 0x4b191cea, 0xd75296ad, 0x2394d80a,
+ 0x1eb5da9b, 0x18a004ed, 0x5c79fed9, 0x37e3b01c, 0xed67a1b8, 0x78d9a714,
+ 0x2a1a34d5, 0x8fbe7f0d, 0x6b1d3516, 0xe57c43ea, 0xa7825681, 0xc81d32e8,
+ 0xd3e716e1, 0x58860b00, 0xa6d93d65, 0x83159c97, 0x0113232f, 0xd6122269,
+ 0x7321c3a0, 0xbe6a92f3, 0xca4ca9d3, 0xd1e276a5, 0xc0e55163, 0xb05915d6,
+ 0x7b7a78c1, 0x0fae0ca4, 0x62a3df4b, 0x08abec6f, 0x13030d11, 0xd446338a,
+ 0x60dcc8f2, 0x5f05d1d5, 0x25e1f9f6, 0x04a40bee, 0x7f8c7113, 0x88f47ec0,
+ 0x589ff59a, 0x308c3661, 0xea5068a1, 0x95fb108f, 0x06e87dff, 0x1559e741,
+ 0xd4d4abdc, 0x01e092e4, 0xee16907c, 0x5a7b78e6, 0xe73aabcb, 0x146bb7e0,
+ 0xad372889, 0x4f6b43c5, 0xfd49fc1d, 0x0f29f589, 0xd3739253, 0xc4745a56,
+ 0xe2acfcc2, 0xd75ccbc7, 0xedd016cd, 0xac5a63e0, 0xef82ccd3, 0xb352496e,
+ 0x2bdabfc4, 0x5b3d0401, 0x01b0197f, 0xade96d3c, 0x29d9253d, 0x19bebdba,
+ 0x73c56b1b, 0x255e7b25, 0x1f2b7f1e, 0xa56a457e, 0x6299c836, 0x5c63cc78,
+ 0xa2ca74c6, 0x5c85fe93, 0xee571bea, 0x508e2561, 0x2db5f1d0, 0xb1fde6a9,
+ 0xa9b87b99, 0x4fb90a37, 0xf7260f07, 0xff58c5fd, 0x56ee7e97, 0xbab9fa46,
+ 0x42e6f9ce, 0x78816f73, 0x1b76d267, 0xfdb2c728, 0x4566519c, 0xae17dd8d,
+ 0xb9f6a95f, 0x1cd533a1, 0x67160dea, 0x14534bac, 0xfcd8f8f9, 0xf3f2901d,
+ 0x708b1f0a, 0x8829063b, 0x9457a1df, 0x8f872aa1, 0x36bb9335, 0xb5672c0e,
+ 0xd889d109, 0x7ec63a6a, 0x93306672, 0x39b6d457, 0x8239ab68, 0xef2e2506,
+ 0xbe0d7a1f, 0x4251b635, 0x05f65522, 0x0ef0bd55, 0x03286891, 0x2c42b664,
+ 0x9815fbac, 0x471fd611, 0x814e379c, 0x7dd8349d, 0xa4a25bda, 0x9886b84c,
+ 0x01b9e39d, 0x5a7ce1a2, 0xae31cbc9, 0x86d07f32, 0x83ef8faf, 0xb66b5b76,
+ 0x58470fdf, 0x96d59b73, 0x51618889, 0xdc400cf7, 0xfc8e0fc6, 0xaf693670,
+ 0x09a08e56, 0x91737de6, 0x74f682e1, 0x0e03923f, 0x7f8ac56d, 0x7400cfd4,
+ 0x8e05e49a, 0x4cebea3c, 0x384e1164, 0xb2e43d8c, 0xb50ae05e, 0x0f0b3ed9,
+ 0xa4006123, 0x64137137, 0x4e9a1934, 0x05404100, 0xd9621be6, 0x9329a255,
+ 0x5c347ebb, 0x75cbeb1b, 0xe684346b, 0x840fee55, 0xba6a9753, 0xf43836f6,
+ 0x60505b7b, 0x334a9278, 0xfd6d475d, 0x5db94761, 0x267375aa, 0xc110e160,
+ 0x024f6d63, 0x2ec96610, 0xa99b4c19, 0xb915c9f4, 0x338cfd90, 0xf02ea846,
+ 0xb9e51a09, 0xae928fb1, 0xfae31d88, 0x1a3db721, 0x8475dd26, 0x5769489d,
+ 0x7ad4c407, 0x0a49e9f0, 0x34e275c8, 0x3d075d83, 0x1d63114a, 0x72a96415,
+ 0x6b98e947, 0x1d500b5f, 0xd50fdc36, 0x141e5085, 0x87751275, 0xe7843834,
+ 0x2278809e, 0xb15c52ee, 0x947aead2, 0xfedb7b02, 0x5197b744, 0x64e09ba8,
+ 0x8849d0a6, 0x23beaa85, 0x11ecb913, 0x0f7ed667, 0x5d984848, 0x9f6331ea,
+ 0x588290e9, 0xa24d64d1, 0x7e09e9e5, 0x32592033, 0x03a501df, 0x27c270a6,
+ 0xbb3df738, 0x3c7c5a70, 0x4190833c, 0x7d4bf9f4, 0x80e5d89b, 0xa7fc6194,
+ 0xfaefb663, 0x62e52b49, 0xd3b6adcd, 0x809646fc, 0x1f2cf73a, 0xb765ed4f,
+ 0x531e4bfb, 0x92cd05f2, 0xaf12d1a6, 0x22ee30f3, 0x38da1074, 0xed6447bb,
+ 0x1a725608, 0xaff222d3, 0x7a3c6f54, 0xbca79a56, 0x7b0e8d12, 0x1c4660c5,
+ 0x6e34d6fb, 0x6f481a9f, 0xfe9dc99c, 0xf888db82, 0xd8489ea0, 0x84b4c0fa,
+ 0xc0dea281, 0x977a8583, 0xae30e887, 0x8c1cbcec, 0x1d4848cb, 0x0ee0d137,
+ 0xd011b0fc, 0x94b5fd49, 0x478d7dd4, 0x3d67f2e7, 0xacab62ad, 0x0ab4e62a,
+ 0x1dfc7df5, 0xd22e4553, 0x870b0e75, 0x49b7b001, 0x1b73bf6d, 0x12807ffd,
+ 0xdc9f0737, 0x6f3e5852, 0xc0e2f250, 0x93e62e4a, 0x4d96a55a, 0xc1d0e185,
+ 0x83a126db, 0x190b917b, 0xefbfd043, 0xc7df1669, 0x8f25b6dd, 0x2062eac9,
+ 0x476c17a6, 0xcb60f278, 0x25460383, 0x0e85e996, 0xda8c05be, 0x6f678a34,
+ 0x69206234, 0xf59be929, 0x1947b69a, 0x0ebfa11b, 0x90fd8322, 0x15c1e9bf,
+ 0xd699b1ec, 0xb2f0343f, 0x7001d002, 0xcf76eaaa, 0xc0778ab5, 0x5173eda8,
+ 0xb7b008e2, 0x4e00e4c6, 0x505d3f4d, 0x99dd341a, 0x1c9d4e12, 0x4ffb6978,
+ 0x474c5e95, 0x6e9ca6dd, 0xda19f938, 0xe2dda6e0, 0x98dc318e, 0xda455e54,
+ 0x3f67b836, 0x21e4181c, 0xa97e9a64, 0x1e17f655, 0x527a08bb, 0x1712dc21,
+ 0x682972ad, 0x0042d256, 0xccbeadf1, 0xca497b96, 0x861e99e0, 0x0d8aa585,
+ 0xeeb0f650, 0xdcc3c3da, 0x506af77e, 0x5deb9768, 0x7c9d60be, 0xe9d978b7,
+ 0x37b37e95, 0x77ad0b94, 0x42747f75, 0x07be42c4, 0x6d5fd2fe, 0x4c8c5da9,
+ 0x0d8fc27d, 0x0f2fd50f, 0x0ccf6023, 0x5b56053f, 0x3b1101bd, 0x56d34906,
+ 0xc0feca27, 0x7602a150, 0xc4888da4, 0x419abe54, 0x56d10633, 0xc76120ed,
+ 0x8db14123, 0xb656e675, 0x741e8f76, 0xd297b94e, 0x96be6f21, 0x3662439d,
+ 0x9b409e27, 0x6626574d, 0x35fff92a, 0xbf558205, 0x69e02439, 0xbe6838b7,
+ 0x6400fd4c, 0xa00f64ca, 0x1f4b158a, 0x9e2052ae, 0x04cca558, 0xfb5ee69e,
+ 0x58da644c, 0x96f26e1f, 0x8ab19401, 0xbee1e16b, 0xed8bf908, 0x2f2809a4,
+ 0xd50babab, 0x6e57f7e6, 0x6b0a8929, 0xf7356431, 0xb54a4cfc, 0x9a1d0ac4,
+ 0x6f9fd6cb, 0x836bfbf8, 0x3b42f469, 0x8bd32129, 0x40111b6b, 0x7c278fb1,
+ 0xb345d955, 0xff1fd188, 0xd32cd13c, 0xf7ec3aa0, 0x3789f792, 0xab707fa4,
+ 0x4d79a4bf, 0xb3a28ceb, 0xd9c24d8e, 0x7134dadc, 0x06e2eb3e, 0xd7c04f76,
+ 0xb379d811, 0x2b3b0ebc, 0x8c94fc33, 0xa28b53ab, 0xc06c5d01, 0xd900432a,
+ 0x7fea91ca, 0x6d30b008, 0x64845f08, 0x796f5349, 0xfde4687d, 0xf888fe67,
+ 0xe0046c56, 0xae482177, 0xce98cb11, 0x84590c46, 0x1feb4400, 0x6e1ba29b,
+ 0xff2f1611, 0xf73f3e9c, 0x3159ca8c, 0x34845918, 0x56f0ed46, 0xb7d10c32,
+ 0xd9a16a01, 0x405b9e91, 0x3cee3e24, 0x8739e4a6, 0x2ab396b4, 0x3f1b7871,
+ 0x09835dfd, 0x8c7a489f, 0x1592b74a, 0x05df7c81, 0x0e8d3f37, 0xa61ff273,
+ 0x68b29622, 0x259cd337, 0x43ff84a6, 0x81cf8fe9, 0x566ed883, 0x48427fc6,
+ 0x35c79428, 0xcfd2fb59, 0xa97e8c8b, 0x750aaed8, 0x32ddca23, 0xaa8108ef,
+ 0x96fbfff9, 0xa1d039aa, 0xe3cdf588, 0x47e77e00, 0xcd6b3fdb, 0xe72a9a80,
+ 0x9a522152, 0xeda06283, 0xef175610, 0xa670cfa1, 0x339fe6c4, 0x2dfbf3ee,
+ 0xc2d7f53b, 0x92a44e27, 0xcc47e4b0, 0xdfa212bc, 0xd64f83c9, 0x997e5475,
+ 0xb51319bf, 0x9fffe599, 0x1fc2c7b6, 0xef5605e7, 0x832169dd, 0xfeb6be4e,
+ 0xbf921dc8, 0x60bdfb1d, 0x72759f8d, 0x3546efa0, 0x020eebed, 0xcaab3d64,
+ 0xdb20a2fe, 0xba1218f6, 0xb2b62bdd, 0x3101eff0, 0x8fde5cfa, 0x2e319213,
+ 0xa52114d2, 0x87eead3f, 0xdf08b1dd, 0xa5387642, 0x746f34d0, 0xd76c4844,
+ 0x4cc40317, 0xe4f689c9, 0xb7d76071, 0x5fe0b4a2, 0x6e1c7915, 0xc7d43f53,
+ 0x3efb7d71, 0x068dd906, 0x35a75f5f, 0x652d7770, 0x750f4607, 0x64a1656c,
+ 0x36c2cf8e, 0x214d758b, 0x9348ef93, 0xe4058978, 0x9674b7f3, 0x10570b0b,
+ 0xbdfaba8f, 0xcef09dd7, 0xa92b261f, 0x071c21b6, 0xcbebb81f, 0xf427ed6c,
+ 0x44228cd6, 0x65e56fcf, 0x5036c460, 0xad919def, 0xccfd848b, 0x61d158a6,
+ 0x7527dca3, 0x4cf30459, 0x50855075, 0xa70dfd09, 0x3540f5aa, 0x35577adb,
+ 0xb5ba3d4e, 0x35736c4f, 0xcdfb689f, 0xefe8fa82, 0x97ab0dca, 0x51bd2ff3,
+ 0x77a7fe9c, 0x3107846c, 0x3d618b81, 0xbca797a4, 0xfc5e9651, 0xe2e08fbc,
+ 0xf7e8791f, 0x772f1cc0, 0x7c426f9d, 0x08d56f88, 0x0080c3ab, 0x0deea663,
+ 0xe6d46ec6, 0x7dca4eb7, 0x6b681d9d, 0xda06730b, 0x4af0e0f2, 0x038bf468,
+ 0x52097463, 0xca19d302, 0xbc09bb9a, 0xaa55aeb1, 0x3ded4433, 0xf27938ba,
+ 0x3e4b7865, 0x28296be7, 0x7ef96314, 0x7a1d55cc, 0xdf0b6b47, 0xcde11852,
+ 0xcedda5bd, 0xf00a0eb3, 0x72ca1a8b, 0x5241b572, 0xb002fdcc, 0xff8898b3,
+ 0xc4878862, 0xb3e85372, 0xbf4bca29, 0x7e1fef45, 0xf2d83189, 0x0f5427af,
+ 0x3cdf9e05, 0x75bae885, 0xf65c06ac, 0x9c71a700, 0xa3145eac, 0xde63bab2,
+ 0x76255bbf, 0x6e817be6, 0x4c6ad3d0, 0x25ab9935, 0xe95ef2f8, 0x11cd095a,
+ 0xd54f78de, 0xa001ae7e, 0xb3829dcb, 0x5abd18bd, 0x18eb9c9e, 0xada3c504,
+ 0xe3e3556c, 0xd35479aa, 0x5191ac5f, 0x221821ac, 0xc8d1d9d3, 0x313a8c51,
+ 0x088c3fc8, 0xc146a264, 0xb154abed, 0x92755bc5, 0x349ec093, 0xf94aba57,
+ 0x41d5886c, 0x0a5ad8b2, 0x36aba94b, 0x883a6758, 0xa9ad229f, 0x5d64069a,
+ 0x0546172f, 0x0366da16, 0xc3808ea4, 0x0b172403, 0x70f0a235, 0xfa816e66,
+ 0x4fceb827, 0xa65fcfea, 0x167b56d5, 0xfe2b9fb2, 0xfec36bcd, 0xa84c4cc9,
+ 0xcd96320f, 0x3e128584, 0x09eda8b8, 0x91eca525, 0x7ec7e17b, 0xbc45bedc,
+ 0xc14032f4, 0x9be689a7, 0x2eb20bc0, 0xffdf1efc, 0x14ef835f, 0xc6966c59,
+ 0xcd778dd8, 0x5feb0f3b, 0x23d47715, 0xd64b87c8, 0x5722a550, 0x62883198,
+ 0x315a1a8b, 0x648e17e6, 0x4b7e9d7a, 0x2ba43d28, 0x67caca84, 0x741f0398,
+ 0x6e660159, 0x3e16e1a9, 0x3dde3c45, 0xa53e56ae, 0xc7eb0aef, 0x3f39f33e,
+ 0x78751d73, 0x45816df8, 0x626770f7, 0xcb17d28d, 0x909e87f4, 0x93a86aba,
+ 0xc1dcf328, 0x1a1e4ce2, 0xd895d042, 0xb9f6dd69, 0xbb00eaf5, 0xacc37687,
+ 0xca609578, 0x5b490d39, 0xf8b86d4c, 0xf2737ef0, 0x39419f6d, 0x69267bc0,
+ 0x72524a03, 0x6eb060c4, 0xdbc01e93, 0x291035b1, 0x83984d54, 0xf673ad85,
+ 0xe08cbc20, 0x1fb24915, 0x584803a6, 0xe15bbcd7, 0x4088ddb5, 0xd4c22542,
+ 0x2c18041a, 0xa51372d1, 0xb2ba69b4, 0x2299283f, 0xcd11c296, 0x25dcd6f3,
+ 0xac54df23, 0x24a3a55e, 0x77e16e1d, 0xb3cd415b, 0xb99d85c0, 0x497befc7,
+ 0xe91154e3, 0x7365cd8b, 0xb55100aa, 0x0ee699eb, 0xfc0927a6, 0xefb374de,
+ 0x8acaa910, 0x83b40e3d, 0xda3f0006, 0x8590a089, 0xc6ce1b75, 0x54f6ff20,
+ 0xfda2f7f3, 0xd2ab58f6, 0xd0763b6d, 0x6caf2515, 0x2519622d, 0xc3714057,
+ 0x9863638f, 0xea00bb4f, 0x09ea4a4d, 0xe69de96d, 0x6b01fe5f, 0x960161a5,
+ 0x529e32ec, 0xf8260ae9, 0x01a37eea, 0x69710577, 0x5aa0716f, 0xcb3fb1da,
+ 0x4260feda, 0xa33fb790, 0x76012f75, 0x24c0e5be, 0x130f09ae, 0x2e8323dc,
+ 0x5c8ecb76, 0x17cb8f12, 0x401b5f5c, 0x5f0a63e0, 0x47e1560a, 0xdc57a786,
+ 0xee1377d4, 0x228e7ee5, 0x0aa294b9, 0xaea6c534, 0x55b0fe2f, 0x922d318a,
+ 0xf108b772, 0xf15bddf6, 0xdfb69702, 0xcd438a4e, 0x90e1db66, 0x584ce4a1,
+ 0x568ef6cb, 0x69e55f9d, 0x6da376ba, 0x5ca6c109, 0x45c7e294, 0xc977b3e9,
+ 0xcf5b6c0c, 0x1d694499, 0x11b487ae, 0xcf8339ac, 0xbcb3cc6e, 0x50b828e0,
+ 0x046b1071, 0x5703ed0d, 0x2c615946, 0x720d1610, 0xa908dbd0, 0x742bbe33,
+ 0x22c076e2, 0x48966a66, 0x1d0cefa4, 0x1dde819f, 0x601352bf, 0xb9370c39,
+ 0xa585cc4a, 0xeb857f94, 0x5a2f7206, 0x3fae6b58, 0x49cd0f1f, 0x78e5fb3d,
+ 0x1b89d476, 0x74e9e65b, 0xed82945b, 0xb74e6483, 0x2941c4d9, 0x7e087acc,
+ 0x565c18dc, 0x1a09f2e5, 0xbf4ccd3d, 0xd304e977, 0xa522631d, 0x6123378e,
+ 0x4517109b, 0xb7e4285a, 0x4bf1a506, 0x625803c2, 0x683172f8, 0xc84e7354,
+ 0x3f8a2b11, 0x7dd12b89, 0xed420491, 0x8c698b0b, 0x9853fb97, 0x9631777b,
+ 0xb697e1c9, 0x5f028f05, 0x51038110, 0x9055f055, 0x30e255e3, 0xe2d0c1b6,
+ 0xb990321e, 0xa8fdf4d1, 0xff4dc144, 0x521a3056, 0x148999e0, 0xa8111c66,
+ 0xa9c96852, 0x8157f508, 0x4b394a94, 0xa0dc4df1, 0x94ec2e93, 0x6e6afa56,
+ 0x8fc28377, 0xf72ffa04, 0xc435186f, 0xf91488b7, 0x8d037f6f, 0xa899ec1e,
+ 0x48757727, 0x4101b612, 0xb8cf377d, 0xa5a54e68, 0xb4570569, 0x2ac5a0a0,
+ 0x063d9cfd, 0x7c504c74, 0xf1a5884c, 0x0a9b1955, 0x8d0b91bf, 0xe5f6862f,
+ 0x79ff5361, 0x0ed3d38f, 0xc6fd31fb, 0x9fe131c7, 0x85b9c648, 0x8febf2b4,
+ 0x8e77e86b, 0x992ba80e, 0x56429986, 0x6848879a, 0x608cdda5, 0x3e0d106e,
+ 0x754b300e, 0x25200576, 0xafd5195b, 0x5d37aad9, 0xe81f0939, 0xe00a390e,
+ 0xdeeea20a, 0xf5fef0be, 0xb5d51155, 0x6e27d173, 0x9e72ebcf, 0xb776e978,
+ 0xb966f7ba, 0x09520238, 0x726c8408, 0x3347ebc5, 0x65dce5a2, 0x3ec78337,
+ 0x8c92d740, 0x3cdde3fe, 0x32caec93, 0xd20379ae, 0x411be811, 0x41756580,
+ 0x72fa1bbd, 0xa92125b3, 0x84c42f04, 0xdd4ee5fe, 0x3a25922c, 0x96446853,
+ 0x49ad3be0, 0x2880366d, 0x1c841afe, 0xf1e09019, 0xfb905fe1, 0xa451ad59,
+ 0x3ba9d0c9, 0x56db2e9c, 0xa42419f2, 0xe921e7a0, 0x3c9a3ca5, 0xad8ea375,
+ 0xcec7d091, 0x99bdb940, 0x477ef58f, 0x8a4933c7, 0xb2598b8d, 0xf5659df7,
+ 0xcfac1e1c, 0x339f8748, 0xe2a04aab, 0xe122b03f, 0x45bc6f37, 0xc9feeb30,
+ 0x9c75aaa0, 0xc13c174e, 0x0ea0585d, 0xdc58bbb4, 0x3a96bd5a, 0x20251482,
+ 0x3c7a714d, 0x696897eb, 0x6cb83b6b, 0xa37de406, 0x3b496b5f, 0x37e75d6a,
+ 0x380dd382, 0x0e1a513c, 0xda26fac9, 0xf2458364, 0x12b5c6ea, 0x79ce9e47,
+ 0x1ff1fcbf, 0xbe7c6e86, 0x59a6a7ba, 0x8d70f515, 0x94761453, 0x6b04e425,
+ 0x8768ffb2, 0x1ca5f425, 0x3f9e8407, 0x3b641184, 0x5f8f6756, 0x62b1a5a5,
+ 0x56bc2120, 0xd1e5da68, 0x17f2fa18, 0x8cce5e2d, 0xa1bc9c06, 0x8e290fb1,
+ 0x892df1af, 0xad10b8c8, 0xb43e5517, 0xd0597409, 0x4407c38f, 0x4a020d81,
+ 0xfea9c9b6, 0xd8e0e7d6, 0xd5b2aaf9, 0xde5e9b40, 0xda44ed4a, 0x45d6bf41,
+ 0x87aa3ca0, 0xc62d12fc, 0x4708acc8, 0x10212e26, 0x0d1227ff, 0xfeeb5742,
+ 0x5da02550, 0xd66668e7, 0x1d56e5e1, 0x32c215ec, 0xae1e0bef, 0x7f048b7e,
+ 0x58c0e922, 0x2aea8619, 0x58251aac, 0xbbe10425, 0xa1fea536, 0x2e1d9667,
+ 0xd233eb7d, 0xcf435c0b, 0xb0693c67, 0x61d918ea, 0x903ec9f0, 0xd6c4e8ac,
+ 0x0efb1788, 0xb0098f5b, 0x1709d878, 0x3c12b35e, 0x3f6ce1b7, 0xa1b3ff54,
+ 0x8a8f7dbb, 0x37608d6a, 0x73e8563e, 0xa3330540, 0x64e00749, 0xebbfcab9,
+ 0x8d5caaf9, 0x3bc87c7e, 0xedb2bd94, 0x22f8f62d, 0xe656dec3, 0xc5683222,
+ 0x670c1626, 0x94089e7f, 0x4237542f, 0x47d29440, 0x2fc4e530, 0x8419441e,
+ 0x8b288dac, 0x7f9245f9, 0xa7afb4e9, 0x8a15650d, 0x082adef7, 0x3104ef19,
+ 0x043c62de, 0x0aff3dc5, 0x7ecd0635, 0xe7e80a8b, 0xe0600fad, 0x4d8e81cc,
+ 0x81ebf4e0, 0xf587e30f, 0x7b372af7, 0x2d8f8ca0, 0xdee11c6f, 0xd3624b1c,
+ 0xf8adc426, 0xca9debed, 0x5c22de4f, 0x3634f778, 0xfae3186b, 0xacf8b595,
+ 0xd7bfa75f, 0x003cd316, 0xbbfe3cf6, 0xb023cb50, 0xc51055a1, 0x0063cffd,
+ 0x93869a77, 0x51e022d4, 0xfbceeb10, 0x5187457e, 0x109defc9, 0x673892d8,
+ 0xe13cfde2, 0xd4aa3272, 0xc09c8134, 0xbf89ad5b, 0x0327181b, 0x09511ec7,
+ 0xaa21b632, 0xd7e72186, 0xe41885b5, 0x46713f9c, 0x493d2789, 0x1386c526,
+ 0xd5d22a5c, 0xcefddfc4, 0xcf59281c, 0x92973ea6, 0x4ebe43f6, 0xeac5c6ad,
+ 0x6cf4897d, 0xd95082a0, 0x82ce562a, 0x28e5e9bd, 0x28d8f0db, 0xddf06e81,
+ 0x707b0166, 0x7dae3f00, 0xfbf5756a, 0x035a4680, 0x4f114102, 0xe7ba4b33,
+ 0x5190fedf, 0x106a7594, 0xe5f1bc49, 0xaae3ad67, 0xd7a1a766, 0x040ee971,
+ 0x9120a214, 0xf415b374, 0x1edc87ea, 0x17aab43c, 0xc6ad637d, 0x885858c1,
+ 0xd90303c7, 0xbfd4b70b, 0x3ff4eb0e, 0x344a9a88, 0xd81eea30, 0x95925446,
+ 0x5adef0ec, 0xabb5f5e7, 0x20bbd8c3, 0xc1c22cce, 0xe6944262, 0xc5acdb23,
+ 0x80024021, 0x2232c635, 0x94b30c81, 0x55f07648, 0x78569acd, 0x9696ea39,
+ 0x4dd6b528, 0x1c3e1b40, 0xde5853b3, 0x8a2c3679, 0x6eb5a7d8, 0x56bda89a,
+ 0x8f9cf096, 0xfda86d5b, 0x6481c7e7, 0x50a6a7d5, 0x15bfb45d, 0x4f9a5381,
+ 0xc057d45d, 0x4fb10024, 0xa0009f00, 0x5e1ca0dd, 0xac420f74, 0xcfbb38bd,
+ 0xf0d4a615, 0x19bf0318, 0x0e3aef84, 0xcb3d7b20, 0x166c1e3e, 0x58272fdd,
+ 0x3bfacf9f, 0xc0f5ce46, 0x63a13528, 0xea59e333, 0xa020ca8c, 0xaadd116b,
+ 0x3dbb5a3d, 0xe5523f47, 0x747f55ea, 0x0922171e, 0x64d520fb, 0x6c709e84,
+ 0x07ce951b, 0x35fdc402, 0x7508eb6d, 0xc495a8fa, 0xb0d11c39, 0x81313d65,
+ 0x57447ef0, 0xa7b61e26, 0xf72301f3, 0xbb096315, 0x45a3a7c5, 0xa903a44b,
+ 0x00432f88, 0x19081987, 0xeb4e1b66, 0xbb7b66bd, 0x6d245171, 0xde4182f5,
+ 0x0d89bd0b, 0x87f4de6c, 0xf70d8a60, 0x9a87855b, 0x08a27449, 0x4ac7720a,
+ 0xd4964017, 0xb0d9ddac, 0x4db3488c, 0xfe397d44, 0xd07b745b, 0x197dcb7b,
+ 0x6e9d567d, 0xe3b90812, 0x9143fef1, 0xb9e002ac, 0x115ff96d, 0xf60a2201,
+ 0x5b61c9c8, 0x09abab2f, 0xb14a44a7, 0x0ca19c73, 0x843c7997, 0xe3a9bbe6,
+ 0x5e3fc18c, 0x0c0404ee, 0x764df59d, 0x990ec2c2, 0x4ad0ba3c, 0x05e8be0f,
+ 0xe599647d, 0xc19d365d, 0x4d0c2990, 0xe5a9d9ac, 0xb680a72d, 0x4ce2e5dd,
+ 0x6d6c0267, 0x06f9c25b, 0xbd6078e0, 0xb5fcdc81, 0xd742fa41, 0xcccc2399,
+ 0xc691adc0, 0x215ad82c, 0xea73b0c3, 0xa511e5b0, 0xf499e0a6, 0x53e27ab0,
+ 0xd94440a2, 0x47752521, 0x9a6e3644, 0xab113708, 0x8f8b301d, 0x058a42a3,
+#endif /* FPIOCONST_HAVE_EXTENDED_RANGE */
+};
+
+#elif BITS_PER_MP_LIMB == 64
+
+/* Table with constants of 10^(2^i), i=0..12 for 64-bit limbs. */
+
+const mp_limb_t __tens[] =
+{
+#define TENS_P0_IDX 0
+#define TENS_P0_SIZE 2
+ [TENS_P0_IDX] = 0x0000000000000000ull, 0x000000000000000aull,
+
+#define TENS_P1_IDX (TENS_P0_IDX + TENS_P0_SIZE)
+#define TENS_P1_SIZE 2
+ [TENS_P1_IDX] = 0x0000000000000000ull, 0x0000000000000064ull,
+
+#define TENS_P2_IDX (TENS_P1_IDX + TENS_P1_SIZE)
+#define TENS_P2_SIZE 2
+ [TENS_P2_IDX] = 0x0000000000000000ull, 0x0000000000002710ull,
+
+#define TENS_P3_IDX (TENS_P2_IDX + TENS_P2_SIZE)
+#define TENS_P3_SIZE 2
+ [TENS_P3_IDX] = 0x0000000000000000ull, 0x0000000005f5e100ull,
+
+#define TENS_P4_IDX (TENS_P3_IDX + TENS_P3_SIZE)
+#define TENS_P4_SIZE 2
+ [TENS_P4_IDX] = 0x0000000000000000ull, 0x002386f26fc10000ull,
+
+#define TENS_P5_IDX (TENS_P4_IDX + TENS_P4_SIZE)
+#define TENS_P5_SIZE 3
+ [TENS_P5_IDX] = 0x0000000000000000ull, 0x85acef8100000000ull,
+ 0x000004ee2d6d415bull,
+
+#define TENS_P6_IDX (TENS_P5_IDX + TENS_P5_SIZE)
+#define TENS_P6_SIZE 5
+ [TENS_P6_IDX] = 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x6e38ed64bf6a1f01ull, 0xe93ff9f4daa797edull, 0x0000000000184f03ull,
+
+#define TENS_P7_IDX (TENS_P6_IDX + TENS_P6_SIZE)
+#define TENS_P7_SIZE 8
+ [TENS_P7_IDX] = 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x03df99092e953e01ull, 0x2374e42f0f1538fdull,
+ 0xc404dc08d3cff5ecull, 0xa6337f19bccdb0daull, 0x0000024ee91f2603ull,
+
+#define TENS_P8_IDX (TENS_P7_IDX + TENS_P7_SIZE)
+#define TENS_P8_SIZE 15
+ [TENS_P8_IDX] = 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0xbed3875b982e7c01ull, 0x12152f87d8d99f72ull, 0xcf4a6e706bde50c6ull,
+ 0x26b2716ed595d80full, 0x1d153624adc666b0ull, 0x63ff540e3c42d35aull,
+ 0x65f9ef17cc5573c0ull, 0x80dcc7f755bc28f2ull, 0x5fdcefcef46eeddcull,
+ 0x00000000000553f7ull,
+
+#define TENS_P9_IDX (TENS_P8_IDX + TENS_P8_SIZE)
+#define TENS_P9_SIZE 28
+ [TENS_P9_IDX] = 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x77f27267fc6cf801ull, 0x5d96976f8f9546dcull,
+ 0xc31e1ad9b83a8a97ull, 0x94e6574746c40513ull, 0x4475b579c88976c1ull,
+ 0xaa1da1bf28f8733bull, 0x1e25cfea703ed321ull, 0xbc51fb2eb21a2f22ull,
+ 0xbfa3edac96e14f5dull, 0xe7fc7153329c57aeull, 0x85a91924c3fc0695ull,
+ 0xb2908ee0f95f635eull, 0x1366732a93abade4ull, 0x69be5b0e9449775cull,
+ 0xb099bc817343afacull, 0xa269974845a71d46ull, 0x8a0b1f138cb07303ull,
+ 0xc1d238d98cab8a97ull, 0x0000001c633415d4ull,
+
+#define TENS_P10_IDX (TENS_P9_IDX + TENS_P9_SIZE)
+#define TENS_P10_SIZE 55
+ [TENS_P10_IDX] = 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0xf55b2b722919f001ull, 0x1ec29f866e7c215bull, 0x15c51a88991c4e87ull,
+ 0x4c7d1e1a140ac535ull, 0x0ed1440ecc2cd819ull, 0x7de16cfb896634eeull,
+ 0x9fce837d1e43f61full, 0x233e55c7231d2b9cull, 0xf451218b65dc60d7ull,
+ 0xc96359861c5cd134ull, 0xa7e89431922bbb9full, 0x62be695a9f9f2a07ull,
+ 0x045b7a748e1042c4ull, 0x8ad822a51abe1de3ull, 0xd814b505ba34c411ull,
+ 0x8fc51a16bf3fdeb3ull, 0xf56deeecb1b896bcull, 0xb6f4654b31fb6bfdull,
+ 0x6b7595fb101a3616ull, 0x80d98089dc1a47feull, 0x9a20288280bda5a5ull,
+ 0xfc8f1f9031eb0f66ull, 0xe26a7b7e976a3310ull, 0x3ce3a0b8df68368aull,
+ 0x75a351a28e4262ceull, 0x445975836cb0b6c9ull, 0xc356e38a31b5653full,
+ 0x0190fba035faaba6ull, 0x88bc491b9fc4ed52ull, 0x005b80411640114aull,
+ 0x1e8d4649f4f3235eull, 0x73c5534936a8de06ull, 0xc1a6970ca7e6bd2aull,
+ 0xd2db49ef47187094ull, 0xae6209d4926c3f5bull, 0x34f4a3c62d433949ull,
+ 0xd9d61a05d4305d94ull, 0x0000000000000325ull,
+
+#if FPIOCONST_HAVE_EXTENDED_RANGE
+# define TENS_P11_IDX (TENS_P10_IDX + TENS_P10_SIZE)
+# define TENS_P11_SIZE 108
+ [TENS_P11_IDX] = 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0xe30968651333e001ull, 0x49e28dcfb27d4d3full,
+ 0xee87e354ec2e4721ull, 0x368b8abbb6067584ull, 0x2ed56d55a5e5a191ull,
+ 0xea50d142fd827773ull, 0x98342c9e51b78db2ull, 0x866ed6f1c850dabcull,
+ 0x9279498719342c12ull, 0x66912e4ad2f869c2ull, 0x57a7842d71c7fd8full,
+ 0xfb7fedcc235552ebull, 0x38209ce1f3861ce0ull, 0x34c101349713b449ull,
+ 0xa7a8289c8c6c54deull, 0xe3cb64f32dbb6643ull, 0xe3892ee98074ff01ull,
+ 0xa8f16f9210c17f94ull, 0x967abbb3a8281ed6ull, 0x9952fbed5a151440ull,
+ 0xafe609c313b41e44ull, 0xf111821fa2bca416ull, 0x91bac974fb1264b4ull,
+ 0x8e48ff35d6c7d6abull, 0xc4a656654419bd43ull, 0x33554c36685e5510ull,
+ 0x0dbd21feab498697ull, 0x982da4663cfe491dull, 0x9e110c7bcbea4ca7ull,
+ 0x5fc5a04779c56b8aull, 0x1aa9f44484d80e2eull, 0x6a57b1ab730f203cull,
+ 0x87a7dc62d752f7a6ull, 0x40660460944545ffull, 0xc9ac375d77c1a42full,
+ 0x744695f0e866d7efull, 0xa1fc6b9681428c85ull, 0x7bf03c19d7917c7bull,
+ 0x5715f7915b33eb41ull, 0xdb0708fd8f6cae5full, 0x785ce6b7b125ac8eull,
+ 0x6f46eadb56c6815bull, 0x195355d84eeebeeeull, 0x9d7389c0a244de3cull,
+ 0xcf99d01953761abdull, 0x0d76ce39de9ec24bull, 0x2e55ecee70beb181ull,
+ 0xf56d9d4bd5f86079ull, 0x13ef5a83fb8886fbull, 0x3f3389a4408f43c5ull,
+ 0x58ccf45cfad37943ull, 0x415c7f3ef82df846ull, 0x8b3d5cf42915e818ull,
+ 0xf8dbb57a6a445f27ull, 0x8ad803ecca8f0070ull, 0x038f9245b2e87c34ull,
+ 0xc7c9dee0bedd8a6cull, 0x2ad3fa140eac7d56ull, 0xf775677ce0de0840ull,
+ 0x92be221ef1bd0ad5ull, 0xce9d04a487fa1fb9ull, 0x3f6f7024d2c36fa9ull,
+ 0x907855eeb028af62ull, 0x4efac5dcd83e49d6ull, 0x77cd8c6be7151aabull,
+ 0x0af908b40a753b7dull, 0xe50f30278c983623ull, 0x1d08e2d694222771ull,
+ 0xf2ee5ca6f7e928e6ull, 0x11eb962b1b61b93cull, 0xce2bcba19648b21cull,
+ 0x7bbebe3034f77154ull, 0x8ce329ace526a319ull, 0xb5dc53d5de4a74d2ull,
+ 0x000000000009e8b3ull,
+
+# define TENS_P12_IDX (TENS_P11_IDX + TENS_P11_SIZE)
+# define TENS_P12_SIZE 214
+ [TENS_P12_IDX] = 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0xd4724e8d2a67c001ull, 0xf89a1e908efe7ae7ull, 0x54e05154ef084117ull,
+ 0x506be82913b1bb51ull, 0xe599574efb29b172ull, 0x806c0ed3f0da6146ull,
+ 0x45155e93b86ae5beull, 0x7e1e7c34c0591cc2ull, 0x1d1f4cce7c4823daull,
+ 0xd6bfdf759b8ba1e8ull, 0xc2dfae78e341be10ull, 0x0f237f1a016b67b2ull,
+ 0xaf6a25743dbeabcdull, 0x142e0e80cab3e6d7ull, 0x2c23481161959127ull,
+ 0xcb4bf98287009701ull, 0x88052f8cf8169c84ull, 0xbc13176168dde6d4ull,
+ 0x54ab9c41ff0b0905ull, 0x1a1c304e7613b224ull, 0x441c2d473bfe167bull,
+ 0x78f061814f6cea9cull, 0x30c7ae41eb659fb8ull, 0xa1ebcad7947e0d0eull,
+ 0x2130504dd97d9556ull, 0xf2acd5071a8309cbull, 0xfd82373a3f8ec72aull,
+ 0x280f4d3295a842bcull, 0x811a4f04f3618ac0ull, 0xd3967a1b6dc3a5b4ull,
+ 0xdcfe388f15b8c898ull, 0x8738b909454eb2a0ull, 0x2bd9cc1110c4e996ull,
+ 0x655fec303297cd0cull, 0xf4090ee8ae0725b1ull, 0x398c6fed037d19eeull,
+ 0xc994a4503b9af26bull, 0x75a697b2b5341743ull, 0x3ccb5b92ac50b9c1ull,
+ 0xa8329761ffe06205ull, 0xeb83cadbdfea5242ull, 0x3c20ee69e79dadf7ull,
+ 0x7021b97a1e0a6817ull, 0x176ca776743074faull, 0xeca19beb77fb8af6ull,
+ 0xaf63b71292baf1deull, 0xa4eb8f8cde35c88bull, 0x40b464a0e137d5e9ull,
+ 0x42923bbd87d1cde8ull, 0x2e2690f3cd8f62ffull, 0x59c89f1b095edc16ull,
+ 0x5138753d1fa8fd5dull, 0x80152f18390a2b29ull, 0xf984d83e2dd8d925ull,
+ 0xc19e1faf7a872e74ull, 0xecf9b5d0ed4d542dull, 0xc53c0adf9462ea75ull,
+ 0x37a2d4390caea134ull, 0x2181327ec8fa2e8aull, 0x2d2408206e7bb827ull,
+ 0x5893d4b850be10e0ull, 0x1f2b2322ab312bb9ull, 0xbf627ede440b3f25ull,
+ 0xb608b89572dac789ull, 0x86deb3f078787e2aull, 0xbb9373f46fee7aabull,
+ 0xf7d8b57e27ecf57bull, 0x3d04e8d2fca26a9full, 0x3172826ac9df13cbull,
+ 0xa8fcd8e0cd9e8d7cull, 0x307641d9b2c39497ull, 0x2608c4cf1cc939c1ull,
+ 0x3d326a7eb6d1c7bfull, 0x8e13e25feeaf19e6ull, 0x2dfe6d97ee63302bull,
+ 0xe41d3cc425971d58ull, 0xab8db59a0a80627cull, 0xe90afb779eea37c8ull,
+ 0x9ee3352c90ca19cfull, 0xfe78d6823613c850ull, 0x5b060904788f6e50ull,
+ 0x3fecb534b71bd1a4ull, 0x20c33857b32c450cull, 0x0239f4cea6e9cfdaull,
+ 0xa19adb9548497187ull, 0x95aca6a8b492ed8aull, 0xcf1b23504dcd6cd9ull,
+ 0x1a67778cfbe8b12aull, 0xc32da38338eb3accull, 0xa03f40a8fb126ab1ull,
+ 0xe9ce4724ed5bf546ull, 0x73a130d84c4a74fdull, 0xa2ebd6c1d9960e2dull,
+ 0x6f233b7c94ab6febull, 0x8e7b9a7349126080ull, 0xd298f9994b8c9091ull,
+ 0xa96ddeff35e836b5ull, 0x6b0dd9bc96119b31ull, 0x282566fbc6cc3f8dull,
+ 0xd6769f3b72b882e7ull, 0x00fc509ba674343dull, 0xd6266a3fdcbf7789ull,
+ 0x4e89541bae9641fdull, 0x53400d0311953407ull, 0xe5b533458e0dd75aull,
+ 0x108b89bc108f19adull, 0xe03b2b6341a4c954ull, 0x97aced8e437b3d7full,
+ 0x2c5508c2cbd66670ull, 0x5c4f2ef0650ebc69ull, 0x9985a2df904ff6bfull,
+ 0x5ed8d2399faddd9eull, 0xe3e51cb925585832ull, 0x56c02d9a0ff4f1d4ull,
+ 0xc1a08a138c4ef804ull, 0xe6d2767113fd01c8ull, 0x9d0176cca7c234f4ull,
+ 0x4d8bfa89d0d73df2ull, 0x2b17e0b2544f10cdull, 0xfd86fe49b70a5c7dull,
+ 0x214495bbdf373f41ull, 0x00d313d584e857fdull, 0xa4ba47440496fcbeull,
+ 0xaec29e6ee8cac982ull, 0x7000a51987ec7038ull, 0xff66e42caeee333bull,
+ 0x03b4f63b8afd6b25ull, 0x5ab8d9c7bd7991dcull, 0x48741a6c2ed4684eull,
+ 0x2fdc6349af06940dull, 0xe974996fb03d7ecdull, 0x52ec8721ac7867f9ull,
+ 0x8edd2d00bcdd9d4aull, 0x41c759f83557de06ull, 0xa75409f23956d4b9ull,
+ 0xb6100fab123cd8a1ull, 0x2e8d623b3e7b21e2ull, 0xbca35f7792959da2ull,
+ 0x35fcb457200c03a5ull, 0xf74eb9281bb6c6e4ull, 0x87cc1d213d5d0b54ull,
+ 0x18ae42404964046full, 0x8bd2b496d868b275ull, 0xc234d8f51c5563f4ull,
+ 0xf9151ffff868e970ull, 0x271133eeae7be4a2ull, 0x25254932bb0fd922ull,
+ 0x104bcd64a60a9fc0ull, 0x0000006230290145ull,
+
+# define TENS_P13_IDX (TENS_P12_IDX + TENS_P12_SIZE)
+# define TENS_P13_SIZE 427
+ [TENS_P13_IDX] = 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x9f34522664cf8001ull, 0x7b8d5053644963e5ull,
+ 0xb945c82f49f0aa29ull, 0x933b6bb8430ff478ull, 0x64c501d45ff82d0aull,
+ 0x9ec1e1b373bbf174ull, 0xe90106893bfbe803ull, 0x3fef8d80f7390d8eull,
+ 0x2c73446bf31d1325ull, 0x1c19e379f5ca7a92ull, 0xf52d9d9c270af2beull,
+ 0x3abf72e1eb2bed48ull, 0x7ecf35084ac4ffc2ull, 0x38597a5a22019a82ull,
+ 0x9a51ff6ebe6a7b3cull, 0x0c0abe9da2d28437ull, 0xc79887ff7c9ec6eaull,
+ 0x436420d05851c899ull, 0x72b5547fefead581ull, 0x077ad8f899b1d2b5ull,
+ 0x3b4305ed5cddbf5bull, 0x2d88f3fde3861ac7ull, 0x393220aa3d6b43beull,
+ 0x1cd62095e5382405ull, 0x87a0d1e161a10c96ull, 0x68c933e6ca95a55dull,
+ 0x778089bb9ee082e2ull, 0xfbb6d8d441429ee9ull, 0x26cf5471c529500dull,
+ 0xd6c9b14068b9be29ull, 0x8415185207be635aull, 0x83730335b5572182ull,
+ 0xdd312d31eb2300b4ull, 0x488da59c05d6dd9bull, 0xda2c2e4037784d25ull,
+ 0x6a57d7206a8d92faull, 0xf07a8632950b41acull, 0x2ecad06acd55f062ull,
+ 0x34c98bb0e6a3dfe7ull, 0xb60521b19c767d8full, 0xe87d16be752aafd1ull,
+ 0xe58a8b0c9de1d728ull, 0x2fa2c119c6013830ull, 0x519b40c83c4f9156ull,
+ 0xab78701b5058fc8full, 0xc502a554adc59c47ull, 0x6647f04c0fb3286full,
+ 0x5ea495c89db4076eull, 0xb4f00f8b9c74fab1ull, 0xd092b4c6897c7a3cull,
+ 0x32f31fa8283e0340ull, 0x67b63de2eeb708ccull, 0xef2bc02b4f7b3c8bull,
+ 0xc49344c0da14bfe3ull, 0xb6c4e69eaabc85beull, 0x63a110162ece8aa6ull,
+ 0x726ae4d919cfba4dull, 0xee6ae7070fc90b42ull, 0x4d9aabc54290b04aull,
+ 0xf34906cdfb2b070eull, 0x52ca97091ff54b0aull, 0x164315700b42bfe1ull,
+ 0x6b5565bb980f3076ull, 0x9ce63c76eb8c4c4aull, 0x3da24c53b9e4c771ull,
+ 0xb50e3c666f0266faull, 0x01bb4b9676e34f79ull, 0x0fbea1249948cf3eull,
+ 0xa1fa4edc86bead12ull, 0xc3b97bf9d11e901cull, 0x370ca58e71730e03ull,
+ 0x886467e248b19715ull, 0x3c727e24db237497ull, 0x8e67d76e2116ccd2ull,
+ 0x34bdedd3f973aecfull, 0xb042ab0531d680ecull, 0xfc5c3c17770e96a0ull,
+ 0xb8204eceab6f1874ull, 0x416c0ced5843f3a5ull, 0x9578018311dd112full,
+ 0x7e0e8613b1c74bd8ull, 0xa79ffc1096c6453bull, 0xfcd6da0ab2157651ull,
+ 0x3dd0ccac836a34a7ull, 0x496049ed316e5a36ull, 0xdea1a97d0322bcb2ull,
+ 0x39578d53cdf2aa5aull, 0x030565c91d1aa931ull, 0x324e0a27d198cbedull,
+ 0x284325345db83e8aull, 0x5cb134c090bf23e8ull, 0x009e5051dd0adab6ull,
+ 0x7e36a6d7f8ad61daull, 0xbdffe6aa84c75e57ull, 0x138d680eb5d5532eull,
+ 0x4a5f74a1bd84ddacull, 0x55538cfaccff00d1ull, 0x48528011b0948b8cull,
+ 0x9e047ad7e345f82eull, 0xea77bef06ee770ffull, 0x2f1625670fc13669ull,
+ 0x0614686c869426acull, 0x4263ed823a3ff464ull, 0x57205a7ab3589b47ull,
+ 0xae6fc46b213f24adull, 0xd92b133f3de03e4eull, 0x1b49c24a315a589bull,
+ 0x1641c13873381bcbull, 0xbc680ada7bc99425ull, 0x962e9884a5cfbc9aull,
+ 0xfc8d12f60a960d70ull, 0x60acc868ed18ef4cull, 0x131130369aea5d14ull,
+ 0x2d99a5b0c747c87eull, 0x006b36583a369bb3ull, 0xe43fa6e6118a5135ull,
+ 0xa13dc05eb4947190ull, 0x0dbd7170d7733db8ull, 0x117ed7e7c3fb67d1ull,
+ 0xc05fe99ee2d72a49ull, 0xd971a25b9638db40ull, 0x1a1595594239d468ull,
+ 0xc1117392850a223cull, 0x567b5fc022d2dbd8ull, 0xc051007a92c5b4ebull,
+ 0xfb35572011cc0099ull, 0x398481616907810dull, 0x61d19ef25e8534f4ull,
+ 0x8a0ab03c2ee8c466ull, 0x879aa514c234af76ull, 0x59e5da579774a235ull,
+ 0xf339bd5a9bc466b3ull, 0xbbb5fd6744ab026dull, 0x3685c9f22b977202ull,
+ 0x7054359e03e5dc00ull, 0x9ba11f085239cfb0ull, 0x9c258687f8237562ull,
+ 0x52c7bf8fa3b510ddull, 0x3245e079b31ed0cfull, 0xbaee38c7ff9ff8d3ull,
+ 0xf702b3b9f17d5562ull, 0xcbca275dcc4c8563ull, 0xe817dbace005d9d1ull,
+ 0x62cee35005c6920aull, 0x19e049b90f1deac0ull, 0xb2a27a1659599f74ull,
+ 0x7dcef00df0911d5aull, 0x375522513603dd66ull, 0x5fa022da97813735ull,
+ 0xefbe57c20d849416ull, 0x5761929630a0e592ull, 0x11735043c953cc47ull,
+ 0xc0444be0a83526adull, 0x16ff5136b5f8463cull, 0xf037572c2a0a6631ull,
+ 0xb1bf8daad30464daull, 0x0f3e9e7e7f5718f7ull, 0xc26f2624e5a4cfe7ull,
+ 0xdfe8f4858c9b5ae4ull, 0xc64a1509f6fa82e3ull, 0x3024b220acb24aeaull,
+ 0xddcdfeddddb02ac0ull, 0x384c86c3d834c574ull, 0xdd48a571d904e099ull,
+ 0x77b35c744550a05full, 0xaaebdc6d81e85f71ull, 0xd4cdc0540f9bb0b1ull,
+ 0x845786af7af4df85ull, 0xdf2a91cae5e53887ull, 0x5689a3c4f6a58211ull,
+ 0xa705983a8cf6aa15ull, 0x2ce7fef09fbf2f52ull, 0x4a3b536548e84a62ull,
+ 0xd48a0872f8281a47ull, 0xf0929c3e8423dcf6ull, 0xe9ec071b044a5049ull,
+ 0x20e30c1b17decc36ull, 0x3342196a45fc2813ull, 0x6601e33746afb7f9ull,
+ 0xf18094d130754439ull, 0x61410dd1d38b4112ull, 0xd97d4dd8d8796b36ull,
+ 0x8080519147e9bc0bull, 0xcde438c11584e2daull, 0x409659a1955d24f1ull,
+ 0x5a09635f1b0950b1ull, 0x615472b965b1febeull, 0x6308e067525dc00aull,
+ 0xd4e705a44089e2d4ull, 0x32c18b2643fc9209ull, 0xaf2711534447a5faull,
+ 0x4dc4f0d23617cadcull, 0x6aa116ef692eb386ull, 0x0641dc0b655991bcull,
+ 0xc655966454469597ull, 0x4bdc0d1a749c0fe8ull, 0xc5292a61a7d3381eull,
+ 0x42474cc24eb65fdcull, 0x19dfc9eef2c6b173ull, 0xbece2ee30a19a199ull,
+ 0xaa03aa7cc68b778dull, 0xae54d2bec8db86f0ull, 0xdee3f48fb92a01e0ull,
+ 0xf6ae28526023c0a9ull, 0xa441cb9ea233763bull, 0x3a8bb4b73246ddddull,
+ 0x308ef2c844faa3c3ull, 0xd2862534fd1c8516ull, 0x62336f6f3b25ebe7ull,
+ 0x0b8e2ce60c336a45ull, 0x11eea1f2e867f171ull, 0x68df4903523972ecull,
+ 0x51ef4cb750c05824ull, 0x3ffae115cb4df2a8ull, 0x3ed1635fb51aca2full,
+ 0x0a5ac09fd6ff1cc6ull, 0x0a3dc76fde8ed9d6ull, 0x37991dde5dc2d8ddull,
+ 0x80ad6e13f95bacb2ull, 0xd4f8c7a6163005eeull, 0xa4760f083225d180ull,
+ 0x9b2b1a875fff004dull, 0x5cd00b66e7ea8576ull, 0x285dd80dec478452ull,
+ 0x4301b3a120112439ull, 0xfacbb68cff879fc8ull, 0xb17fdf84af6af6b8ull,
+ 0xf4489576c208d9f1ull, 0xadcc862c8794a6e9ull, 0x931685a40e83e54cull,
+ 0x1e40293bab01c580ull, 0x1f1ddf7fcad784faull, 0xcee722b26b856084ull,
+ 0x74254eb41c39938bull, 0xb9c26d9ac7ccebf4ull, 0x2e3ece246b08dfb9ull,
+ 0xdff60410981455ecull, 0xe06fa38bbc804e2bull, 0x72e53c52b534540cull,
+ 0xb2a5c05a02dfb2efull, 0x973133385002a2a5ull, 0xd61df455597c53ffull,
+ 0x39ac2ec534e5261aull, 0x388b7539c6bc0cabull, 0x00eac7043f732fc0ull,
+ 0xc089971e92fb21d9ull, 0x7af93f8fb4ffa503ull, 0xa8311b2372e353b6ull,
+ 0x1de496ca8266c9afull, 0xd6fa0b51dbdb16b0ull, 0xbd5630899991a5efull,
+ 0x0954a1e3168cbe0full, 0x53d09723537b9245ull, 0x86558cb92867272dull,
+ 0xfac85d100b83f026ull, 0x1e5ddb95f8562951ull, 0x48d27b92ad3668c8ull,
+ 0x19b58a99c930b7e6ull, 0xa9cda917a3de74e3ull, 0x7a4dd16ecb6e35eeull,
+ 0x4d84073f4c80e9d5ull, 0x9cffcfc074a95ba8ull, 0x15796372d28485ebull,
+ 0x77eda8df5717e9cdull, 0xadb965e1ab473c4eull, 0x5bc05659ffad6959ull,
+ 0xfb2402276ed63880ull, 0xd15fdddf2014850bull, 0xb538f37dfdd74592ull,
+ 0x1473396f3a8e2e82ull, 0x3ce41a21f6a5edf8ull, 0x754e82640cc4351aull,
+ 0xc7821b96aab95e73ull, 0xc242faaaf42ff463ull, 0x087e260edd00ac65ull,
+ 0x0dbe032817d193f5ull, 0xf9d10f96844a63c9ull, 0xbaf127ec85aa91ddull,
+ 0xce85e6a50ab6dabbull, 0xe7b56a161af5d24full, 0x57d1d79fcd6c5a19ull,
+ 0xec4dd2f05dfc2b28ull, 0x8d72216a18fe64a1ull, 0x72f14a085f222077ull,
+ 0x3bf038abd8b09b11ull, 0xc4265d7cc6cf1f44ull, 0x46398d2cdab1b0e7ull,
+ 0xb6e705d37dcfdc68ull, 0x362c11834aafd1e6ull, 0xf6ac98b7d8701107ull,
+ 0xd6649424ad114d7eull, 0xddd1c6e4c40ab551ull, 0xc9d284c8a132030full,
+ 0x824069eedb1f662aull, 0xc846b3ad4157904bull, 0x0a248c17d38481caull,
+ 0xe8745febc846831full, 0x00000000000025a8ull,
+
+# define TENS_P14_IDX (TENS_P13_IDX + TENS_P13_SIZE)
+# define TENS_P14_SIZE 852
+ [TENS_P14_IDX] = 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull,
+ 0x41b5687d099f0001ull, 0x8c75ee63cbfd1b6eull, 0xd75296ad4b191ceaull,
+ 0x1eb5da9b2394d80aull, 0x5c79fed918a004edull, 0xed67a1b837e3b01cull,
+ 0x2a1a34d578d9a714ull, 0x6b1d35168fbe7f0dull, 0xa7825681e57c43eaull,
+ 0xd3e716e1c81d32e8ull, 0xa6d93d6558860b00ull, 0x0113232f83159c97ull,
+ 0x7321c3a0d6122269ull, 0xca4ca9d3be6a92f3ull, 0xc0e55163d1e276a5ull,
+ 0x7b7a78c1b05915d6ull, 0x62a3df4b0fae0ca4ull, 0x13030d1108abec6full,
+ 0x60dcc8f2d446338aull, 0x25e1f9f65f05d1d5ull, 0x7f8c711304a40beeull,
+ 0x589ff59a88f47ec0ull, 0xea5068a1308c3661ull, 0x06e87dff95fb108full,
+ 0xd4d4abdc1559e741ull, 0xee16907c01e092e4ull, 0xe73aabcb5a7b78e6ull,
+ 0xad372889146bb7e0ull, 0xfd49fc1d4f6b43c5ull, 0xd37392530f29f589ull,
+ 0xe2acfcc2c4745a56ull, 0xedd016cdd75ccbc7ull, 0xef82ccd3ac5a63e0ull,
+ 0x2bdabfc4b352496eull, 0x01b0197f5b3d0401ull, 0x29d9253dade96d3cull,
+ 0x73c56b1b19bebdbaull, 0x1f2b7f1e255e7b25ull, 0x6299c836a56a457eull,
+ 0xa2ca74c65c63cc78ull, 0xee571bea5c85fe93ull, 0x2db5f1d0508e2561ull,
+ 0xa9b87b99b1fde6a9ull, 0xf7260f074fb90a37ull, 0x56ee7e97ff58c5fdull,
+ 0x42e6f9cebab9fa46ull, 0x1b76d26778816f73ull, 0x4566519cfdb2c728ull,
+ 0xb9f6a95fae17dd8dull, 0x67160dea1cd533a1ull, 0xfcd8f8f914534bacull,
+ 0x708b1f0af3f2901dull, 0x9457a1df8829063bull, 0x36bb93358f872aa1ull,
+ 0xd889d109b5672c0eull, 0x933066727ec63a6aull, 0x8239ab6839b6d457ull,
+ 0xbe0d7a1fef2e2506ull, 0x05f655224251b635ull, 0x032868910ef0bd55ull,
+ 0x9815fbac2c42b664ull, 0x814e379c471fd611ull, 0xa4a25bda7dd8349dull,
+ 0x01b9e39d9886b84cull, 0xae31cbc95a7ce1a2ull, 0x83ef8faf86d07f32ull,
+ 0x58470fdfb66b5b76ull, 0x5161888996d59b73ull, 0xfc8e0fc6dc400cf7ull,
+ 0x09a08e56af693670ull, 0x74f682e191737de6ull, 0x7f8ac56d0e03923full,
+ 0x8e05e49a7400cfd4ull, 0x384e11644cebea3cull, 0xb50ae05eb2e43d8cull,
+ 0xa40061230f0b3ed9ull, 0x4e9a193464137137ull, 0xd9621be605404100ull,
+ 0x5c347ebb9329a255ull, 0xe684346b75cbeb1bull, 0xba6a9753840fee55ull,
+ 0x60505b7bf43836f6ull, 0xfd6d475d334a9278ull, 0x267375aa5db94761ull,
+ 0x024f6d63c110e160ull, 0xa99b4c192ec96610ull, 0x338cfd90b915c9f4ull,
+ 0xb9e51a09f02ea846ull, 0xfae31d88ae928fb1ull, 0x8475dd261a3db721ull,
+ 0x7ad4c4075769489dull, 0x34e275c80a49e9f0ull, 0x1d63114a3d075d83ull,
+ 0x6b98e94772a96415ull, 0xd50fdc361d500b5full, 0x87751275141e5085ull,
+ 0x2278809ee7843834ull, 0x947aead2b15c52eeull, 0x5197b744fedb7b02ull,
+ 0x8849d0a664e09ba8ull, 0x11ecb91323beaa85ull, 0x5d9848480f7ed667ull,
+ 0x588290e99f6331eaull, 0x7e09e9e5a24d64d1ull, 0x03a501df32592033ull,
+ 0xbb3df73827c270a6ull, 0x4190833c3c7c5a70ull, 0x80e5d89b7d4bf9f4ull,
+ 0xfaefb663a7fc6194ull, 0xd3b6adcd62e52b49ull, 0x1f2cf73a809646fcull,
+ 0x531e4bfbb765ed4full, 0xaf12d1a692cd05f2ull, 0x38da107422ee30f3ull,
+ 0x1a725608ed6447bbull, 0x7a3c6f54aff222d3ull, 0x7b0e8d12bca79a56ull,
+ 0x6e34d6fb1c4660c5ull, 0xfe9dc99c6f481a9full, 0xd8489ea0f888db82ull,
+ 0xc0dea28184b4c0faull, 0xae30e887977a8583ull, 0x1d4848cb8c1cbcecull,
+ 0xd011b0fc0ee0d137ull, 0x478d7dd494b5fd49ull, 0xacab62ad3d67f2e7ull,
+ 0x1dfc7df50ab4e62aull, 0x870b0e75d22e4553ull, 0x1b73bf6d49b7b001ull,
+ 0xdc9f073712807ffdull, 0xc0e2f2506f3e5852ull, 0x4d96a55a93e62e4aull,
+ 0x83a126dbc1d0e185ull, 0xefbfd043190b917bull, 0x8f25b6ddc7df1669ull,
+ 0x476c17a62062eac9ull, 0x25460383cb60f278ull, 0xda8c05be0e85e996ull,
+ 0x692062346f678a34ull, 0x1947b69af59be929ull, 0x90fd83220ebfa11bull,
+ 0xd699b1ec15c1e9bfull, 0x7001d002b2f0343full, 0xc0778ab5cf76eaaaull,
+ 0xb7b008e25173eda8ull, 0x505d3f4d4e00e4c6ull, 0x1c9d4e1299dd341aull,
+ 0x474c5e954ffb6978ull, 0xda19f9386e9ca6ddull, 0x98dc318ee2dda6e0ull,
+ 0x3f67b836da455e54ull, 0xa97e9a6421e4181cull, 0x527a08bb1e17f655ull,
+ 0x682972ad1712dc21ull, 0xccbeadf10042d256ull, 0x861e99e0ca497b96ull,
+ 0xeeb0f6500d8aa585ull, 0x506af77edcc3c3daull, 0x7c9d60be5deb9768ull,
+ 0x37b37e95e9d978b7ull, 0x42747f7577ad0b94ull, 0x6d5fd2fe07be42c4ull,
+ 0x0d8fc27d4c8c5da9ull, 0x0ccf60230f2fd50full, 0x3b1101bd5b56053full,
+ 0xc0feca2756d34906ull, 0xc4888da47602a150ull, 0x56d10633419abe54ull,
+ 0x8db14123c76120edull, 0x741e8f76b656e675ull, 0x96be6f21d297b94eull,
+ 0x9b409e273662439dull, 0x35fff92a6626574dull, 0x69e02439bf558205ull,
+ 0x6400fd4cbe6838b7ull, 0x1f4b158aa00f64caull, 0x04cca5589e2052aeull,
+ 0x58da644cfb5ee69eull, 0x8ab1940196f26e1full, 0xed8bf908bee1e16bull,
+ 0xd50babab2f2809a4ull, 0x6b0a89296e57f7e6ull, 0xb54a4cfcf7356431ull,
+ 0x6f9fd6cb9a1d0ac4ull, 0x3b42f469836bfbf8ull, 0x40111b6b8bd32129ull,
+ 0xb345d9557c278fb1ull, 0xd32cd13cff1fd188ull, 0x3789f792f7ec3aa0ull,
+ 0x4d79a4bfab707fa4ull, 0xd9c24d8eb3a28cebull, 0x06e2eb3e7134dadcull,
+ 0xb379d811d7c04f76ull, 0x8c94fc332b3b0ebcull, 0xc06c5d01a28b53abull,
+ 0x7fea91cad900432aull, 0x64845f086d30b008ull, 0xfde4687d796f5349ull,
+ 0xe0046c56f888fe67ull, 0xce98cb11ae482177ull, 0x1feb440084590c46ull,
+ 0xff2f16116e1ba29bull, 0x3159ca8cf73f3e9cull, 0x56f0ed4634845918ull,
+ 0xd9a16a01b7d10c32ull, 0x3cee3e24405b9e91ull, 0x2ab396b48739e4a6ull,
+ 0x09835dfd3f1b7871ull, 0x1592b74a8c7a489full, 0x0e8d3f3705df7c81ull,
+ 0x68b29622a61ff273ull, 0x43ff84a6259cd337ull, 0x566ed88381cf8fe9ull,
+ 0x35c7942848427fc6ull, 0xa97e8c8bcfd2fb59ull, 0x32ddca23750aaed8ull,
+ 0x96fbfff9aa8108efull, 0xe3cdf588a1d039aaull, 0xcd6b3fdb47e77e00ull,
+ 0x9a522152e72a9a80ull, 0xef175610eda06283ull, 0x339fe6c4a670cfa1ull,
+ 0xc2d7f53b2dfbf3eeull, 0xcc47e4b092a44e27ull, 0xd64f83c9dfa212bcull,
+ 0xb51319bf997e5475ull, 0x1fc2c7b69fffe599ull, 0x832169ddef5605e7ull,
+ 0xbf921dc8feb6be4eull, 0x72759f8d60bdfb1dull, 0x020eebed3546efa0ull,
+ 0xdb20a2fecaab3d64ull, 0xb2b62bddba1218f6ull, 0x8fde5cfa3101eff0ull,
+ 0xa52114d22e319213ull, 0xdf08b1dd87eead3full, 0x746f34d0a5387642ull,
+ 0x4cc40317d76c4844ull, 0xb7d76071e4f689c9ull, 0x6e1c79155fe0b4a2ull,
+ 0x3efb7d71c7d43f53ull, 0x35a75f5f068dd906ull, 0x750f4607652d7770ull,
+ 0x36c2cf8e64a1656cull, 0x9348ef93214d758bull, 0x9674b7f3e4058978ull,
+ 0xbdfaba8f10570b0bull, 0xa92b261fcef09dd7ull, 0xcbebb81f071c21b6ull,
+ 0x44228cd6f427ed6cull, 0x5036c46065e56fcfull, 0xccfd848bad919defull,
+ 0x7527dca361d158a6ull, 0x508550754cf30459ull, 0x3540f5aaa70dfd09ull,
+ 0xb5ba3d4e35577adbull, 0xcdfb689f35736c4full, 0x97ab0dcaefe8fa82ull,
+ 0x77a7fe9c51bd2ff3ull, 0x3d618b813107846cull, 0xfc5e9651bca797a4ull,
+ 0xf7e8791fe2e08fbcull, 0x7c426f9d772f1cc0ull, 0x0080c3ab08d56f88ull,
+ 0xe6d46ec60deea663ull, 0x6b681d9d7dca4eb7ull, 0x4af0e0f2da06730bull,
+ 0x52097463038bf468ull, 0xbc09bb9aca19d302ull, 0x3ded4433aa55aeb1ull,
+ 0x3e4b7865f27938baull, 0x7ef9631428296be7ull, 0xdf0b6b477a1d55ccull,
+ 0xcedda5bdcde11852ull, 0x72ca1a8bf00a0eb3ull, 0xb002fdcc5241b572ull,
+ 0xc4878862ff8898b3ull, 0xbf4bca29b3e85372ull, 0xf2d831897e1fef45ull,
+ 0x3cdf9e050f5427afull, 0xf65c06ac75bae885ull, 0xa3145eac9c71a700ull,
+ 0x76255bbfde63bab2ull, 0x4c6ad3d06e817be6ull, 0xe95ef2f825ab9935ull,
+ 0xd54f78de11cd095aull, 0xb3829dcba001ae7eull, 0x18eb9c9e5abd18bdull,
+ 0xe3e3556cada3c504ull, 0x5191ac5fd35479aaull, 0xc8d1d9d3221821acull,
+ 0x088c3fc8313a8c51ull, 0xb154abedc146a264ull, 0x349ec09392755bc5ull,
+ 0x41d5886cf94aba57ull, 0x36aba94b0a5ad8b2ull, 0xa9ad229f883a6758ull,
+ 0x0546172f5d64069aull, 0xc3808ea40366da16ull, 0x70f0a2350b172403ull,
+ 0x4fceb827fa816e66ull, 0x167b56d5a65fcfeaull, 0xfec36bcdfe2b9fb2ull,
+ 0xcd96320fa84c4cc9ull, 0x09eda8b83e128584ull, 0x7ec7e17b91eca525ull,
+ 0xc14032f4bc45bedcull, 0x2eb20bc09be689a7ull, 0x14ef835fffdf1efcull,
+ 0xcd778dd8c6966c59ull, 0x23d477155feb0f3bull, 0x5722a550d64b87c8ull,
+ 0x315a1a8b62883198ull, 0x4b7e9d7a648e17e6ull, 0x67caca842ba43d28ull,
+ 0x6e660159741f0398ull, 0x3dde3c453e16e1a9ull, 0xc7eb0aefa53e56aeull,
+ 0x78751d733f39f33eull, 0x626770f745816df8ull, 0x909e87f4cb17d28dull,
+ 0xc1dcf32893a86abaull, 0xd895d0421a1e4ce2ull, 0xbb00eaf5b9f6dd69ull,
+ 0xca609578acc37687ull, 0xf8b86d4c5b490d39ull, 0x39419f6df2737ef0ull,
+ 0x72524a0369267bc0ull, 0xdbc01e936eb060c4ull, 0x83984d54291035b1ull,
+ 0xe08cbc20f673ad85ull, 0x584803a61fb24915ull, 0x4088ddb5e15bbcd7ull,
+ 0x2c18041ad4c22542ull, 0xb2ba69b4a51372d1ull, 0xcd11c2962299283full,
+ 0xac54df2325dcd6f3ull, 0x77e16e1d24a3a55eull, 0xb99d85c0b3cd415bull,
+ 0xe91154e3497befc7ull, 0xb55100aa7365cd8bull, 0xfc0927a60ee699ebull,
+ 0x8acaa910efb374deull, 0xda3f000683b40e3dull, 0xc6ce1b758590a089ull,
+ 0xfda2f7f354f6ff20ull, 0xd0763b6dd2ab58f6ull, 0x2519622d6caf2515ull,
+ 0x9863638fc3714057ull, 0x09ea4a4dea00bb4full, 0x6b01fe5fe69de96dull,
+ 0x529e32ec960161a5ull, 0x01a37eeaf8260ae9ull, 0x5aa0716f69710577ull,
+ 0x4260fedacb3fb1daull, 0x76012f75a33fb790ull, 0x130f09ae24c0e5beull,
+ 0x5c8ecb762e8323dcull, 0x401b5f5c17cb8f12ull, 0x47e1560a5f0a63e0ull,
+ 0xee1377d4dc57a786ull, 0x0aa294b9228e7ee5ull, 0x55b0fe2faea6c534ull,
+ 0xf108b772922d318aull, 0xdfb69702f15bddf6ull, 0x90e1db66cd438a4eull,
+ 0x568ef6cb584ce4a1ull, 0x6da376ba69e55f9dull, 0x45c7e2945ca6c109ull,
+ 0xcf5b6c0cc977b3e9ull, 0x11b487ae1d694499ull, 0xbcb3cc6ecf8339acull,
+ 0x046b107150b828e0ull, 0x2c6159465703ed0dull, 0xa908dbd0720d1610ull,
+ 0x22c076e2742bbe33ull, 0x1d0cefa448966a66ull, 0x601352bf1dde819full,
+ 0xa585cc4ab9370c39ull, 0x5a2f7206eb857f94ull, 0x49cd0f1f3fae6b58ull,
+ 0x1b89d47678e5fb3dull, 0xed82945b74e9e65bull, 0x2941c4d9b74e6483ull,
+ 0x565c18dc7e087accull, 0xbf4ccd3d1a09f2e5ull, 0xa522631dd304e977ull,
+ 0x4517109b6123378eull, 0x4bf1a506b7e4285aull, 0x683172f8625803c2ull,
+ 0x3f8a2b11c84e7354ull, 0xed4204917dd12b89ull, 0x9853fb978c698b0bull,
+ 0xb697e1c99631777bull, 0x510381105f028f05ull, 0x30e255e39055f055ull,
+ 0xb990321ee2d0c1b6ull, 0xff4dc144a8fdf4d1ull, 0x148999e0521a3056ull,
+ 0xa9c96852a8111c66ull, 0x4b394a948157f508ull, 0x94ec2e93a0dc4df1ull,
+ 0x8fc283776e6afa56ull, 0xc435186ff72ffa04ull, 0x8d037f6ff91488b7ull,
+ 0x48757727a899ec1eull, 0xb8cf377d4101b612ull, 0xb4570569a5a54e68ull,
+ 0x063d9cfd2ac5a0a0ull, 0xf1a5884c7c504c74ull, 0x8d0b91bf0a9b1955ull,
+ 0x79ff5361e5f6862full, 0xc6fd31fb0ed3d38full, 0x85b9c6489fe131c7ull,
+ 0x8e77e86b8febf2b4ull, 0x56429986992ba80eull, 0x608cdda56848879aull,
+ 0x754b300e3e0d106eull, 0xafd5195b25200576ull, 0xe81f09395d37aad9ull,
+ 0xdeeea20ae00a390eull, 0xb5d51155f5fef0beull, 0x9e72ebcf6e27d173ull,
+ 0xb966f7bab776e978ull, 0x726c840809520238ull, 0x65dce5a23347ebc5ull,
+ 0x8c92d7403ec78337ull, 0x32caec933cdde3feull, 0x411be811d20379aeull,
+ 0x72fa1bbd41756580ull, 0x84c42f04a92125b3ull, 0x3a25922cdd4ee5feull,
+ 0x49ad3be096446853ull, 0x1c841afe2880366dull, 0xfb905fe1f1e09019ull,
+ 0x3ba9d0c9a451ad59ull, 0xa42419f256db2e9cull, 0x3c9a3ca5e921e7a0ull,
+ 0xcec7d091ad8ea375ull, 0x477ef58f99bdb940ull, 0xb2598b8d8a4933c7ull,
+ 0xcfac1e1cf5659df7ull, 0xe2a04aab339f8748ull, 0x45bc6f37e122b03full,
+ 0x9c75aaa0c9feeb30ull, 0x0ea0585dc13c174eull, 0x3a96bd5adc58bbb4ull,
+ 0x3c7a714d20251482ull, 0x6cb83b6b696897ebull, 0x3b496b5fa37de406ull,
+ 0x380dd38237e75d6aull, 0xda26fac90e1a513cull, 0x12b5c6eaf2458364ull,
+ 0x1ff1fcbf79ce9e47ull, 0x59a6a7babe7c6e86ull, 0x947614538d70f515ull,
+ 0x8768ffb26b04e425ull, 0x3f9e84071ca5f425ull, 0x5f8f67563b641184ull,
+ 0x56bc212062b1a5a5ull, 0x17f2fa18d1e5da68ull, 0xa1bc9c068cce5e2dull,
+ 0x892df1af8e290fb1ull, 0xb43e5517ad10b8c8ull, 0x4407c38fd0597409ull,
+ 0xfea9c9b64a020d81ull, 0xd5b2aaf9d8e0e7d6ull, 0xda44ed4ade5e9b40ull,
+ 0x87aa3ca045d6bf41ull, 0x4708acc8c62d12fcull, 0x0d1227ff10212e26ull,
+ 0x5da02550feeb5742ull, 0x1d56e5e1d66668e7ull, 0xae1e0bef32c215ecull,
+ 0x58c0e9227f048b7eull, 0x58251aac2aea8619ull, 0xa1fea536bbe10425ull,
+ 0xd233eb7d2e1d9667ull, 0xb0693c67cf435c0bull, 0x903ec9f061d918eaull,
+ 0x0efb1788d6c4e8acull, 0x1709d878b0098f5bull, 0x3f6ce1b73c12b35eull,
+ 0x8a8f7dbba1b3ff54ull, 0x73e8563e37608d6aull, 0x64e00749a3330540ull,
+ 0x8d5caaf9ebbfcab9ull, 0xedb2bd943bc87c7eull, 0xe656dec322f8f62dull,
+ 0x670c1626c5683222ull, 0x4237542f94089e7full, 0x2fc4e53047d29440ull,
+ 0x8b288dac8419441eull, 0xa7afb4e97f9245f9ull, 0x082adef78a15650dull,
+ 0x043c62de3104ef19ull, 0x7ecd06350aff3dc5ull, 0xe0600fade7e80a8bull,
+ 0x81ebf4e04d8e81ccull, 0x7b372af7f587e30full, 0xdee11c6f2d8f8ca0ull,
+ 0xf8adc426d3624b1cull, 0x5c22de4fca9debedull, 0xfae3186b3634f778ull,
+ 0xd7bfa75facf8b595ull, 0xbbfe3cf6003cd316ull, 0xc51055a1b023cb50ull,
+ 0x93869a770063cffdull, 0xfbceeb1051e022d4ull, 0x109defc95187457eull,
+ 0xe13cfde2673892d8ull, 0xc09c8134d4aa3272ull, 0x0327181bbf89ad5bull,
+ 0xaa21b63209511ec7ull, 0xe41885b5d7e72186ull, 0x493d278946713f9cull,
+ 0xd5d22a5c1386c526ull, 0xcf59281ccefddfc4ull, 0x4ebe43f692973ea6ull,
+ 0x6cf4897deac5c6adull, 0x82ce562ad95082a0ull, 0x28d8f0db28e5e9bdull,
+ 0x707b0166ddf06e81ull, 0xfbf5756a7dae3f00ull, 0x4f114102035a4680ull,
+ 0x5190fedfe7ba4b33ull, 0xe5f1bc49106a7594ull, 0xd7a1a766aae3ad67ull,
+ 0x9120a214040ee971ull, 0x1edc87eaf415b374ull, 0xc6ad637d17aab43cull,
+ 0xd90303c7885858c1ull, 0x3ff4eb0ebfd4b70bull, 0xd81eea30344a9a88ull,
+ 0x5adef0ec95925446ull, 0x20bbd8c3abb5f5e7ull, 0xe6944262c1c22cceull,
+ 0x80024021c5acdb23ull, 0x94b30c812232c635ull, 0x78569acd55f07648ull,
+ 0x4dd6b5289696ea39ull, 0xde5853b31c3e1b40ull, 0x6eb5a7d88a2c3679ull,
+ 0x8f9cf09656bda89aull, 0x6481c7e7fda86d5bull, 0x15bfb45d50a6a7d5ull,
+ 0xc057d45d4f9a5381ull, 0xa0009f004fb10024ull, 0xac420f745e1ca0ddull,
+ 0xf0d4a615cfbb38bdull, 0x0e3aef8419bf0318ull, 0x166c1e3ecb3d7b20ull,
+ 0x3bfacf9f58272fddull, 0x63a13528c0f5ce46ull, 0xa020ca8cea59e333ull,
+ 0x3dbb5a3daadd116bull, 0x747f55eae5523f47ull, 0x64d520fb0922171eull,
+ 0x07ce951b6c709e84ull, 0x7508eb6d35fdc402ull, 0xb0d11c39c495a8faull,
+ 0x57447ef081313d65ull, 0xf72301f3a7b61e26ull, 0x45a3a7c5bb096315ull,
+ 0x00432f88a903a44bull, 0xeb4e1b6619081987ull, 0x6d245171bb7b66bdull,
+ 0x0d89bd0bde4182f5ull, 0xf70d8a6087f4de6cull, 0x08a274499a87855bull,
+ 0xd49640174ac7720aull, 0x4db3488cb0d9ddacull, 0xd07b745bfe397d44ull,
+ 0x6e9d567d197dcb7bull, 0x9143fef1e3b90812ull, 0x115ff96db9e002acull,
+ 0x5b61c9c8f60a2201ull, 0xb14a44a709abab2full, 0x843c79970ca19c73ull,
+ 0x5e3fc18ce3a9bbe6ull, 0x764df59d0c0404eeull, 0x4ad0ba3c990ec2c2ull,
+ 0xe599647d05e8be0full, 0x4d0c2990c19d365dull, 0xb680a72de5a9d9acull,
+ 0x6d6c02674ce2e5ddull, 0xbd6078e006f9c25bull, 0xd742fa41b5fcdc81ull,
+ 0xc691adc0cccc2399ull, 0xea73b0c3215ad82cull, 0xf499e0a6a511e5b0ull,
+ 0xd94440a253e27ab0ull, 0x9a6e364447752521ull, 0x8f8b301dab113708ull,
+ 0x00000000058a42a3ull,
+#endif
+};
+
+#else
+# error "mp_limb_t size " BITS_PER_MP_LIMB "not accounted for"
+#endif
+
+/* Each of array variable above defines one mpn integer which is a power of 10.
+ This table points to those variables, indexed by the exponent. */
+
+const struct mp_power _fpioconst_pow10[FPIOCONST_POW10_ARRAY_SIZE] =
+{
+ { TENS_P0_IDX, TENS_P0_SIZE, 4, },
+ { TENS_P1_IDX, TENS_P1_SIZE, 7, 4 },
+ { TENS_P2_IDX, TENS_P2_SIZE, 14, 10 },
+ { TENS_P3_IDX, TENS_P3_SIZE, 27, 24 },
+ { TENS_P4_IDX, TENS_P4_SIZE, 54, 50 },
+ { TENS_P5_IDX, TENS_P5_SIZE, 107, 103 },
+ { TENS_P6_IDX, TENS_P6_SIZE, 213, 210 },
+ { TENS_P7_IDX, TENS_P7_SIZE, 426, 422 },
+ { TENS_P8_IDX, TENS_P8_SIZE, 851, 848 },
+ { TENS_P9_IDX, TENS_P9_SIZE, 1701, 1698 },
+ { TENS_P10_IDX, TENS_P10_SIZE, 3402, 3399 },
+#if FPIOCONST_HAVE_EXTENDED_RANGE
+ { TENS_P11_IDX, TENS_P11_SIZE, 6804, 6800 },
+ { TENS_P12_IDX, TENS_P12_SIZE, 13607, 13604 },
+ { TENS_P13_IDX, TENS_P13_SIZE, 27214, 27210 },
+ { TENS_P14_IDX, TENS_P14_SIZE, 54427, 54424 },
+#endif
+};
diff --git a/REORG.TODO/stdlib/fpioconst.h b/REORG.TODO/stdlib/fpioconst.h
new file mode 100644
index 0000000000..c05f8e7bac
--- /dev/null
+++ b/REORG.TODO/stdlib/fpioconst.h
@@ -0,0 +1,88 @@
+/* Header file for constants used in floating point <-> decimal conversions.
+ Copyright (C) 1995-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef _FPIOCONST_H
+#define _FPIOCONST_H
+
+#include <float.h>
+#include <math.h>
+#include <gmp.h>
+
+
+/* These values are used by __printf_fp, where they are noncritical (if the
+ value is not large enough, it will just be slower); and by
+ strtof/strtod/strtold, where it is critical (it's used for overflow
+ detection).
+
+ XXX These should be defined in <float.h>. For the time being, we have the
+ IEEE754 values here. */
+
+#if !defined __NO_LONG_DOUBLE_MATH && __LDBL_MAX_EXP__ > 1024
+# define LDBL_MAX_10_EXP_LOG 12 /* = floor(log_2(LDBL_MAX_10_EXP)) */
+#else
+# define LDBL_MAX_10_EXP_LOG 8 /* = floor(log_2(LDBL_MAX_10_EXP)) */
+#endif
+#define DBL_MAX_10_EXP_LOG 8 /* = floor(log_2(DBL_MAX_10_EXP)) */
+#define FLT_MAX_10_EXP_LOG 5 /* = floor(log_2(FLT_MAX_10_EXP)) */
+
+/* On some machines, _Float128 may be ABI-distinct from long double (e.g
+ IBM extended precision). */
+#include <bits/floatn.h>
+
+#if __HAVE_DISTINCT_FLOAT128
+# define FLT128_MAX_10_EXP_LOG 12 /* = floor(log_2(FLT128_MAX_10_EXP)) */
+#endif
+
+/* For strtold, we need powers of 10 up to floor (log_2 (LDBL_MANT_DIG
+ - LDBL_MIN_EXP + 2)). When _Float128 is enabled in libm and it is
+ ABI-distinct from long double (e.g. on powerpc64le), we also need powers
+ of 10 up to floor (log_2 (FLT128_MANT_DIG - FLT128_MIN_EXP + 2)). */
+#define FPIOCONST_HAVE_EXTENDED_RANGE \
+ ((!defined __NO_LONG_DOUBLE_MATH && __LDBL_MAX_EXP__ > 1024) \
+ || __HAVE_DISTINCT_FLOAT128)
+
+#if FPIOCONST_HAVE_EXTENDED_RANGE
+# define FPIOCONST_POW10_ARRAY_SIZE 15
+#else
+# define FPIOCONST_POW10_ARRAY_SIZE 11
+#endif
+
+/* The array with the number representation. */
+extern const mp_limb_t __tens[] attribute_hidden;
+
+/* Table of powers of ten. This is used by __printf_fp and by
+ strtof/strtod/strtold. */
+struct mp_power
+ {
+ size_t arrayoff; /* Offset in `__tens'. */
+ mp_size_t arraysize; /* Size of the array. */
+ int p_expo; /* Exponent of the number 10^(2^i). */
+ int m_expo; /* Exponent of the number 10^-(2^i-1). */
+ };
+extern const struct mp_power _fpioconst_pow10[FPIOCONST_POW10_ARRAY_SIZE]
+ attribute_hidden;
+
+/* The constants in the array `_fpioconst_pow10' have an offset. */
+#if BITS_PER_MP_LIMB == 32
+# define _FPIO_CONST_OFFSET 2
+#else
+# define _FPIO_CONST_OFFSET 1
+#endif
+
+
+#endif /* fpioconst.h */
diff --git a/REORG.TODO/stdlib/gen-fpioconst.c b/REORG.TODO/stdlib/gen-fpioconst.c
new file mode 100644
index 0000000000..e8b3258d1b
--- /dev/null
+++ b/REORG.TODO/stdlib/gen-fpioconst.c
@@ -0,0 +1,108 @@
+/* Generate data for fpioconst.c.
+ Copyright (C) 2012-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <inttypes.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gmp.h>
+#include <stdint.h>
+
+int
+main (void)
+{
+ FILE *out32 = fopen ("fpioconst-32", "w");
+ if (out32 == NULL)
+ abort ();
+ FILE *out64 = fopen ("fpioconst-64", "w");
+ if (out64 == NULL)
+ abort ();
+ FILE *outtable = fopen ("fpioconst-table", "w");
+ if (outtable == NULL)
+ abort ();
+ mpz_t p;
+ mpz_init (p);
+ for (int i = 0; i <= 14; i++)
+ {
+ int j = 1 << i;
+ mpz_ui_pow_ui (p, 10, j - 1);
+ int exp_m = mpz_sizeinbase (p, 2);
+ mpz_ui_pow_ui (p, 10, j);
+ int exp_p = mpz_sizeinbase (p, 2);
+ int size32 = 2 + (exp_p + 31) / 32;
+ int size64 = 1 + (exp_p + 63) / 64;
+ uint32_t data32[size32];
+ uint64_t data64[size64];
+ memset (data32, 0, sizeof data32);
+ memset (data64, 0, sizeof data64);
+ mpz_export (data32 + 2, NULL, -1, 4, 0, 0, p);
+ mpz_export (data64 + 1, NULL, -1, 8, 0, 0, p);
+ if (i == 0)
+ {
+ fprintf (out32, "#define TENS_P%d_IDX\t0\n", i);
+ fprintf (out64, "#define TENS_P%d_IDX\t0\n", i);
+ }
+ else
+ {
+ fprintf (out32, "#define TENS_P%d_IDX\t"
+ "(TENS_P%d_IDX + TENS_P%d_SIZE)\n",
+ i, i - 1, i - 1);
+ fprintf (out64, "#define TENS_P%d_IDX\t"
+ "(TENS_P%d_IDX + TENS_P%d_SIZE)\n",
+ i, i - 1, i - 1);
+ }
+ fprintf (out32, "#define TENS_P%d_SIZE\t%d\n", i, size32);
+ fprintf (out64, "#define TENS_P%d_SIZE\t%d\n", i, size64);
+ for (int k = 0; k < size32; k++)
+ {
+ if (k == 0)
+ fprintf (out32, " [TENS_P%d_IDX] = ", i);
+ else if (k % 6 == 5)
+ fprintf (out32, "\n ");
+ else
+ fprintf (out32, " ");
+ fprintf (out32, "0x%08"PRIx32",", data32[k]);
+ }
+ for (int k = 0; k < size64; k++)
+ {
+ if (k == 0)
+ fprintf (out64, " [TENS_P%d_IDX] = ", i);
+ else if (k % 3 == 2)
+ fprintf (out64, "\n ");
+ else
+ fprintf (out64, " ");
+ fprintf (out64, "0x%016"PRIx64"ull,", data64[k]);
+ }
+ fprintf (out32, "\n\n");
+ fprintf (out64, "\n\n");
+ const char *t = (i >= 10 ? "\t" : "\t\t");
+ if (i == 0)
+ fprintf (outtable, " { TENS_P%d_IDX, TENS_P%d_SIZE,%s%d,\t },\n",
+ i, i, t, exp_p);
+ else
+ fprintf (outtable, " { TENS_P%d_IDX, TENS_P%d_SIZE,%s%d,\t%5d },\n",
+ i, i, t, exp_p, exp_m);
+ }
+ if (fclose (out32) != 0)
+ abort ();
+ if (fclose (out64) != 0)
+ abort ();
+ if (fclose (outtable) != 0)
+ abort ();
+ return 0;
+}
diff --git a/REORG.TODO/stdlib/gen-tst-strtod-round.c b/REORG.TODO/stdlib/gen-tst-strtod-round.c
new file mode 100644
index 0000000000..d792a245be
--- /dev/null
+++ b/REORG.TODO/stdlib/gen-tst-strtod-round.c
@@ -0,0 +1,191 @@
+/* Generate table of tests in tst-strtod-round.c from
+ tst-strtod-round-data.
+ Copyright (C) 2012-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+/* Compile this program as:
+
+ gcc -std=gnu11 -O2 -Wall -Wextra gen-tst-strtod-round.c -lmpfr \
+ -o gen-tst-strtod-round
+
+ (use of current MPFR version recommended) and run it as:
+
+ gen-tst-strtod-round tst-strtod-round-data tst-strtod-round-data.h
+
+ The output file will be generated as tst-strtod-round-data.h
+*/
+
+
+#define _GNU_SOURCE
+#include <assert.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <mpfr.h>
+
+/* Work around incorrect ternary value from mpfr_strtofr
+ <https://sympa.inria.fr/sympa/arc/mpfr/2012-08/msg00005.html>. */
+#define WORKAROUND
+
+static int
+string_to_fp (mpfr_t f, const char *s, mpfr_rnd_t rnd)
+{
+#ifdef WORKAROUND
+ mpfr_t f2;
+ mpfr_init2 (f2, 100000);
+ int r0 = mpfr_strtofr (f2, s, NULL, 0, rnd);
+ int r = mpfr_set (f, f2, rnd);
+ r |= mpfr_subnormalize (f, r, rnd);
+ mpfr_clear (f2);
+ return r0 | r;
+#else
+ int r = mpfr_strtofr (f, s, NULL, 0, rnd);
+ r |= mpfr_subnormalize (f, r, rnd);
+ return r;
+#endif
+}
+
+void
+print_fp (FILE *fout, mpfr_t f, const char *suffix)
+{
+ if (mpfr_inf_p (f))
+ mpfr_fprintf (fout, "\t%sINF%s", mpfr_signbit (f) ? "-" : "", suffix);
+ else
+ mpfr_fprintf (fout, "\t%Ra%s", f, suffix);
+}
+
+static void
+round_str (FILE *fout, const char *s, int prec, int emin, int emax,
+ bool ibm_ld)
+{
+ mpfr_t f;
+ mpfr_set_default_prec (prec);
+ mpfr_set_emin (emin);
+ mpfr_set_emax (emax);
+ mpfr_init (f);
+ int r = string_to_fp (f, s, MPFR_RNDD);
+ if (ibm_ld)
+ {
+ assert (prec == 106 && emin == -1073 && emax == 1024);
+ /* The maximum value in IBM long double has discontiguous
+ mantissa bits. */
+ mpfr_t max_value;
+ mpfr_init2 (max_value, 107);
+ mpfr_set_str (max_value, "0x1.fffffffffffff7ffffffffffffcp+1023", 0,
+ MPFR_RNDN);
+ if (mpfr_cmpabs (f, max_value) > 0)
+ r = 1;
+ mpfr_clear (max_value);
+ }
+ mpfr_fprintf (fout, "\t%s,\n", r ? "false" : "true");
+ print_fp (fout, f, ",\n");
+ string_to_fp (f, s, MPFR_RNDN);
+ print_fp (fout, f, ",\n");
+ string_to_fp (f, s, MPFR_RNDZ);
+ print_fp (fout, f, ",\n");
+ string_to_fp (f, s, MPFR_RNDU);
+ print_fp (fout, f, "");
+ mpfr_clear (f);
+}
+
+static void
+round_for_all (FILE *fout, const char *s)
+{
+ static const struct fmt {
+ int prec;
+ int emin;
+ int emax;
+ bool ibm_ld;
+ } formats[] = {
+ { 24, -148, 128, false },
+ { 53, -1073, 1024, false },
+ /* This is the Intel extended float format. */
+ { 64, -16444, 16384, false },
+ /* This is the Motorola extended float format. */
+ { 64, -16445, 16384, false },
+ { 106, -1073, 1024, true },
+ { 113, -16493, 16384, false },
+ };
+ mpfr_fprintf (fout, " TEST (\"");
+ const char *p;
+ for (p = s; *p; p++)
+ {
+ fputc (*p, fout);
+ if ((p - s) % 60 == 59 && p[1])
+ mpfr_fprintf (fout, "\"\n\t\"");
+ }
+ mpfr_fprintf (fout, "\",\n");
+ int i;
+ int n_formats = sizeof (formats) / sizeof (formats[0]);
+ for (i = 0; i < n_formats; i++)
+ {
+ round_str (fout, s, formats[i].prec, formats[i].emin,
+ formats[i].emax, formats[i].ibm_ld);
+ if (i < n_formats - 1)
+ mpfr_fprintf (fout, ",\n");
+ }
+ mpfr_fprintf (fout, "),\n");
+}
+
+int
+main (int argc, char **argv)
+{
+ char *p = NULL;
+ size_t len;
+ ssize_t nbytes;
+ FILE *fin, *fout;
+ char *fin_name, *fout_name;
+
+ if (argc < 3)
+ {
+ fprintf (stderr, "Usage: %s <input> <output>\n", basename (argv[0]));
+ return EXIT_FAILURE;
+ }
+
+ fin_name = argv[1];
+ fout_name = argv[2];
+
+ fin = fopen (fin_name, "r");
+ if (fin == NULL)
+ {
+ perror ("Could not open input for reading");
+ return EXIT_FAILURE;
+ }
+
+ fout = fopen (fout_name, "w");
+ if (fout == NULL)
+ {
+ perror ("Could not open output for writing");
+ return EXIT_FAILURE;
+ }
+
+ fprintf (fout, "/* This file was generated by %s from %s. */\n",
+ __FILE__, fin_name);
+ fputs ("static const struct test tests[] = {\n", fout);
+ while ((nbytes = getline (&p, &len, fin)) != -1)
+ {
+ if (p[nbytes - 1] == '\n')
+ p[nbytes - 1] = 0;
+ round_for_all (fout, p);
+ free (p);
+ p = NULL;
+ }
+ fputs ("};\n", fout);
+
+ return EXIT_SUCCESS;
+}
diff --git a/REORG.TODO/stdlib/getcontext.c b/REORG.TODO/stdlib/getcontext.c
new file mode 100644
index 0000000000..07560033a6
--- /dev/null
+++ b/REORG.TODO/stdlib/getcontext.c
@@ -0,0 +1,29 @@
+/* Copyright (C) 1998-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <ucontext.h>
+
+int
+getcontext (ucontext_t *ucp)
+{
+ __set_errno (ENOSYS);
+ return -1;
+}
+
+
+stub_warning (getcontext)
diff --git a/REORG.TODO/stdlib/getentropy.c b/REORG.TODO/stdlib/getentropy.c
new file mode 100644
index 0000000000..a71d4cd8f5
--- /dev/null
+++ b/REORG.TODO/stdlib/getentropy.c
@@ -0,0 +1,31 @@
+/* Stub for getentropy.
+ Copyright (C) 2016-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sys/random.h>
+#include <errno.h>
+
+/* Write LENGTH bytes of randomness starting at BUFFER. Return 0 on
+ success and -1 on failure. */
+ssize_t
+getentropy (void *buffer, size_t length)
+{
+ __set_errno (ENOSYS);
+ return -1;
+}
+
+stub_warning (getentropy)
diff --git a/REORG.TODO/stdlib/getenv.c b/REORG.TODO/stdlib/getenv.c
new file mode 100644
index 0000000000..b6fb1abeaa
--- /dev/null
+++ b/REORG.TODO/stdlib/getenv.c
@@ -0,0 +1,92 @@
+/* Copyright (C) 1991-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <endian.h>
+#include <errno.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+
+/* Return the value of the environment variable NAME. This implementation
+ is tuned a bit in that it assumes no environment variable has an empty
+ name which of course should always be true. We have a special case for
+ one character names so that for the general case we can assume at least
+ two characters which we can access. By doing this we can avoid using the
+ `strncmp' most of the time. */
+char *
+getenv (const char *name)
+{
+ size_t len = strlen (name);
+ char **ep;
+ uint16_t name_start;
+
+ if (__environ == NULL || name[0] == '\0')
+ return NULL;
+
+ if (name[1] == '\0')
+ {
+ /* The name of the variable consists of only one character. Therefore
+ the first two characters of the environment entry are this character
+ and a '=' character. */
+#if __BYTE_ORDER == __LITTLE_ENDIAN || !_STRING_ARCH_unaligned
+ name_start = ('=' << 8) | *(const unsigned char *) name;
+#else
+ name_start = '=' | ((*(const unsigned char *) name) << 8);
+#endif
+ for (ep = __environ; *ep != NULL; ++ep)
+ {
+#if _STRING_ARCH_unaligned
+ uint16_t ep_start = *(uint16_t *) *ep;
+#else
+ uint16_t ep_start = (((unsigned char *) *ep)[0]
+ | (((unsigned char *) *ep)[1] << 8));
+#endif
+ if (name_start == ep_start)
+ return &(*ep)[2];
+ }
+ }
+ else
+ {
+#if _STRING_ARCH_unaligned
+ name_start = *(const uint16_t *) name;
+#else
+ name_start = (((const unsigned char *) name)[0]
+ | (((const unsigned char *) name)[1] << 8));
+#endif
+ len -= 2;
+ name += 2;
+
+ for (ep = __environ; *ep != NULL; ++ep)
+ {
+#if _STRING_ARCH_unaligned
+ uint16_t ep_start = *(uint16_t *) *ep;
+#else
+ uint16_t ep_start = (((unsigned char *) *ep)[0]
+ | (((unsigned char *) *ep)[1] << 8));
+#endif
+
+ if (name_start == ep_start && !strncmp (*ep + 2, name, len)
+ && (*ep)[len + 2] == '=')
+ return &(*ep)[len + 3];
+ }
+ }
+
+ return NULL;
+}
+libc_hidden_def (getenv)
diff --git a/REORG.TODO/stdlib/getrandom.c b/REORG.TODO/stdlib/getrandom.c
new file mode 100644
index 0000000000..b2a83c2db7
--- /dev/null
+++ b/REORG.TODO/stdlib/getrandom.c
@@ -0,0 +1,31 @@
+/* Stub for getrandom.
+ Copyright (C) 2016-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sys/random.h>
+#include <errno.h>
+
+/* Write LENGTH bytes of randomness starting at BUFFER. Return the
+ number of bytes written, or -1 on error. */
+ssize_t
+getrandom (void *buffer, size_t length, unsigned int flags)
+{
+ __set_errno (ENOSYS);
+ return -1;
+}
+
+stub_warning (getrandom)
diff --git a/REORG.TODO/stdlib/getsubopt.c b/REORG.TODO/stdlib/getsubopt.c
new file mode 100644
index 0000000000..7d6772dc1f
--- /dev/null
+++ b/REORG.TODO/stdlib/getsubopt.c
@@ -0,0 +1,79 @@
+/* Parse comma separate list into words.
+ Copyright (C) 1996-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include <string.h>
+
+#if !_LIBC
+/* This code is written for inclusion in gnu-libc, and uses names in
+ the namespace reserved for libc. If we're compiling in gnulib,
+ define those names to be the normal ones instead. */
+# include "strchrnul.h"
+# undef __strchrnul
+# define __strchrnul strchrnul
+#endif
+
+/* Parse comma separated suboption from *OPTIONP and match against
+ strings in TOKENS. If found return index and set *VALUEP to
+ optional value introduced by an equal sign. If the suboption is
+ not part of TOKENS return in *VALUEP beginning of unknown
+ suboption. On exit *OPTIONP is set to the beginning of the next
+ token or at the terminating NUL character. */
+int
+getsubopt (char **optionp, char *const *tokens, char **valuep)
+{
+ char *endp, *vstart;
+ int cnt;
+
+ if (**optionp == '\0')
+ return -1;
+
+ /* Find end of next token. */
+ endp = __strchrnul (*optionp, ',');
+
+ /* Find start of value. */
+ vstart = memchr (*optionp, '=', endp - *optionp);
+ if (vstart == NULL)
+ vstart = endp;
+
+ /* Try to match the characters between *OPTIONP and VSTART against
+ one of the TOKENS. */
+ for (cnt = 0; tokens[cnt] != NULL; ++cnt)
+ if (strncmp (*optionp, tokens[cnt], vstart - *optionp) == 0
+ && tokens[cnt][vstart - *optionp] == '\0')
+ {
+ /* We found the current option in TOKENS. */
+ *valuep = vstart != endp ? vstart + 1 : NULL;
+
+ if (*endp != '\0')
+ *endp++ = '\0';
+ *optionp = endp;
+
+ return cnt;
+ }
+
+ /* The current suboption does not match any option. */
+ *valuep = *optionp;
+
+ if (*endp != '\0')
+ *endp++ = '\0';
+ *optionp = endp;
+
+ return -1;
+}
diff --git a/REORG.TODO/stdlib/gmp-impl.h b/REORG.TODO/stdlib/gmp-impl.h
new file mode 100644
index 0000000000..42d3e4afac
--- /dev/null
+++ b/REORG.TODO/stdlib/gmp-impl.h
@@ -0,0 +1,367 @@
+/* Include file for internal GNU MP types and definitions.
+
+Copyright (C) 1991-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP 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 MP 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 MP Library; see the file COPYING.LIB. If not, see
+<http://www.gnu.org/licenses/>. */
+
+/* When using gcc, make sure to use its builtin alloca. */
+#if ! defined (alloca) && defined (__GNUC__)
+#define alloca __builtin_alloca
+#define HAVE_ALLOCA
+#endif
+
+/* When using cc, do whatever necessary to allow use of alloca. For many
+ machines, this means including alloca.h. IBM's compilers need a #pragma
+ in "each module that needs to use alloca". */
+#if ! defined (alloca)
+/* We need lots of variants for MIPS, to cover all versions and perversions
+ of OSes for MIPS. */
+#if defined (__mips) || defined (MIPSEL) || defined (MIPSEB) \
+ || defined (_MIPSEL) || defined (_MIPSEB) || defined (__sgi) \
+ || defined (__alpha) || defined (__sparc) || defined (sparc) \
+ || defined (__ksr__)
+#include <alloca.h>
+#define HAVE_ALLOCA
+#endif
+#if defined (_IBMR2)
+#pragma alloca
+#define HAVE_ALLOCA
+#endif
+#if defined (__DECC)
+#define alloca(x) __ALLOCA(x)
+#define HAVE_ALLOCA
+#endif
+#endif
+
+#if (! defined (alloca) && ! defined (HAVE_ALLOCA)) \
+ || defined (USE_STACK_ALLOC)
+#include "stack-alloc.h"
+#else
+#define TMP_DECL(m)
+#define TMP_ALLOC(x) alloca(x)
+#define TMP_MARK(m)
+#define TMP_FREE(m)
+#endif
+
+#ifndef NULL
+#define NULL ((void *) 0)
+#endif
+
+#if ! defined (__GNUC__)
+#define inline /* Empty */
+#endif
+
+/* Get MAX/MIN macros. */
+#include <sys/param.h>
+
+/* Field access macros. */
+#define SIZ(x) ((x)->_mp_size)
+#define PTR(x) ((x)->_mp_d)
+#define EXP(x) ((x)->_mp_exp)
+#define PREC(x) ((x)->_mp_prec)
+#define ALLOC(x) ((x)->_mp_alloc)
+
+#include "gmp-mparam.h"
+/* #include "longlong.h" */
+
+#if defined (__STDC__) || defined (__cplusplus)
+void *malloc (size_t);
+void *realloc (void *, size_t);
+void free (void *);
+
+extern void * (*_mp_allocate_func) (size_t);
+extern void * (*_mp_reallocate_func) (void *, size_t, size_t);
+extern void (*_mp_free_func) (void *, size_t);
+
+void *_mp_default_allocate (size_t);
+void *_mp_default_reallocate (void *, size_t, size_t);
+void _mp_default_free (void *, size_t);
+
+#else
+
+#define const /* Empty */
+#define signed /* Empty */
+
+void *malloc ();
+void *realloc ();
+void free ();
+
+extern void * (*_mp_allocate_func) ();
+extern void * (*_mp_reallocate_func) ();
+extern void (*_mp_free_func) ();
+
+void *_mp_default_allocate ();
+void *_mp_default_reallocate ();
+void _mp_default_free ();
+#endif
+
+/* Copy NLIMBS *limbs* from SRC to DST. */
+#define MPN_COPY_INCR(DST, SRC, NLIMBS) \
+ do { \
+ mp_size_t __i; \
+ for (__i = 0; __i < (NLIMBS); __i++) \
+ (DST)[__i] = (SRC)[__i]; \
+ } while (0)
+#define MPN_COPY_DECR(DST, SRC, NLIMBS) \
+ do { \
+ mp_size_t __i; \
+ for (__i = (NLIMBS) - 1; __i >= 0; __i--) \
+ (DST)[__i] = (SRC)[__i]; \
+ } while (0)
+#define MPN_COPY MPN_COPY_INCR
+
+/* Zero NLIMBS *limbs* AT DST. */
+#define MPN_ZERO(DST, NLIMBS) \
+ do { \
+ mp_size_t __i; \
+ for (__i = 0; __i < (NLIMBS); __i++) \
+ (DST)[__i] = 0; \
+ } while (0)
+
+#define MPN_NORMALIZE(DST, NLIMBS) \
+ do { \
+ while (NLIMBS > 0) \
+ { \
+ if ((DST)[(NLIMBS) - 1] != 0) \
+ break; \
+ NLIMBS--; \
+ } \
+ } while (0)
+#define MPN_NORMALIZE_NOT_ZERO(DST, NLIMBS) \
+ do { \
+ while (1) \
+ { \
+ if ((DST)[(NLIMBS) - 1] != 0) \
+ break; \
+ NLIMBS--; \
+ } \
+ } while (0)
+
+/* Initialize the MP_INT X with space for NLIMBS limbs.
+ X should be a temporary variable, and it will be automatically
+ cleared out when the running function returns.
+ We use __x here to make it possible to accept both mpz_ptr and mpz_t
+ arguments. */
+#define MPZ_TMP_INIT(X, NLIMBS) \
+ do { \
+ mpz_ptr __x = (X); \
+ __x->_mp_alloc = (NLIMBS); \
+ __x->_mp_d = (mp_ptr) TMP_ALLOC ((NLIMBS) * BYTES_PER_MP_LIMB); \
+ } while (0)
+
+#define MPN_MUL_N_RECURSE(prodp, up, vp, size, tspace) \
+ do { \
+ if ((size) < KARATSUBA_THRESHOLD) \
+ impn_mul_n_basecase (prodp, up, vp, size); \
+ else \
+ impn_mul_n (prodp, up, vp, size, tspace); \
+ } while (0);
+#define MPN_SQR_N_RECURSE(prodp, up, size, tspace) \
+ do { \
+ if ((size) < KARATSUBA_THRESHOLD) \
+ impn_sqr_n_basecase (prodp, up, size); \
+ else \
+ impn_sqr_n (prodp, up, size, tspace); \
+ } while (0);
+
+/* Structure for conversion between internal binary format and
+ strings in base 2..36. */
+struct bases
+{
+ /* Number of digits in the conversion base that always fits in an mp_limb_t.
+ For example, for base 10 on a machine where a mp_limb_t has 32 bits this
+ is 9, since 10**9 is the largest number that fits into a mp_limb_t. */
+ int chars_per_limb;
+
+ /* log(2)/log(conversion_base) */
+ float chars_per_bit_exactly;
+
+ /* base**chars_per_limb, i.e. the biggest number that fits a word, built by
+ factors of base. Exception: For 2, 4, 8, etc, big_base is log2(base),
+ i.e. the number of bits used to represent each digit in the base. */
+ mp_limb_t big_base;
+
+ /* A BITS_PER_MP_LIMB bit approximation to 1/big_base, represented as a
+ fixed-point number. Instead of dividing by big_base an application can
+ choose to multiply by big_base_inverted. */
+ mp_limb_t big_base_inverted;
+};
+
+extern const struct bases __mp_bases[];
+extern mp_size_t __gmp_default_fp_limb_precision;
+
+/* Divide the two-limb number in (NH,,NL) by D, with DI being the largest
+ limb not larger than (2**(2*BITS_PER_MP_LIMB))/D - (2**BITS_PER_MP_LIMB).
+ If this would yield overflow, DI should be the largest possible number
+ (i.e., only ones). For correct operation, the most significant bit of D
+ has to be set. Put the quotient in Q and the remainder in R. */
+#define udiv_qrnnd_preinv(q, r, nh, nl, d, di) \
+ do { \
+ mp_limb_t _ql __attribute__ ((unused)); \
+ mp_limb_t _q, _r; \
+ mp_limb_t _xh, _xl; \
+ umul_ppmm (_q, _ql, (nh), (di)); \
+ _q += (nh); /* DI is 2**BITS_PER_MP_LIMB too small */\
+ umul_ppmm (_xh, _xl, _q, (d)); \
+ sub_ddmmss (_xh, _r, (nh), (nl), _xh, _xl); \
+ if (_xh != 0) \
+ { \
+ sub_ddmmss (_xh, _r, _xh, _r, 0, (d)); \
+ _q += 1; \
+ if (_xh != 0) \
+ { \
+ sub_ddmmss (_xh, _r, _xh, _r, 0, (d)); \
+ _q += 1; \
+ } \
+ } \
+ if (_r >= (d)) \
+ { \
+ _r -= (d); \
+ _q += 1; \
+ } \
+ (r) = _r; \
+ (q) = _q; \
+ } while (0)
+/* Like udiv_qrnnd_preinv, but for any value D. DNORM is D shifted left
+ so that its most significant bit is set. LGUP is ceil(log2(D)). */
+#define udiv_qrnnd_preinv2gen(q, r, nh, nl, d, di, dnorm, lgup) \
+ do { \
+ mp_limb_t n2, n10, n1, nadj, q1; \
+ mp_limb_t _xh, _xl; \
+ n2 = ((nh) << (BITS_PER_MP_LIMB - (lgup))) + ((nl) >> 1 >> (l - 1));\
+ n10 = (nl) << (BITS_PER_MP_LIMB - (lgup)); \
+ n1 = ((mp_limb_signed_t) n10 >> (BITS_PER_MP_LIMB - 1)); \
+ nadj = n10 + (n1 & (dnorm)); \
+ umul_ppmm (_xh, _xl, di, n2 - n1); \
+ add_ssaaaa (_xh, _xl, _xh, _xl, 0, nadj); \
+ q1 = ~(n2 + _xh); \
+ umul_ppmm (_xh, _xl, q1, d); \
+ add_ssaaaa (_xh, _xl, _xh, _xl, nh, nl); \
+ _xh -= (d); \
+ (r) = _xl + ((d) & _xh); \
+ (q) = _xh - q1; \
+ } while (0)
+/* Exactly like udiv_qrnnd_preinv, but branch-free. It is not clear which
+ version to use. */
+#define udiv_qrnnd_preinv2norm(q, r, nh, nl, d, di) \
+ do { \
+ mp_limb_t n2, n10, n1, nadj, q1; \
+ mp_limb_t _xh, _xl; \
+ n2 = (nh); \
+ n10 = (nl); \
+ n1 = ((mp_limb_signed_t) n10 >> (BITS_PER_MP_LIMB - 1)); \
+ nadj = n10 + (n1 & (d)); \
+ umul_ppmm (_xh, _xl, di, n2 - n1); \
+ add_ssaaaa (_xh, _xl, _xh, _xl, 0, nadj); \
+ q1 = ~(n2 + _xh); \
+ umul_ppmm (_xh, _xl, q1, d); \
+ add_ssaaaa (_xh, _xl, _xh, _xl, nh, nl); \
+ _xh -= (d); \
+ (r) = _xl + ((d) & _xh); \
+ (q) = _xh - q1; \
+ } while (0)
+
+#if defined (__GNUC__)
+/* Define stuff for longlong.h. */
+typedef unsigned int UQItype __attribute__ ((mode (QI)));
+typedef int SItype __attribute__ ((mode (SI)));
+typedef unsigned int USItype __attribute__ ((mode (SI)));
+typedef int DItype __attribute__ ((mode (DI)));
+typedef unsigned int UDItype __attribute__ ((mode (DI)));
+#else
+typedef unsigned char UQItype;
+typedef long SItype;
+typedef unsigned long USItype;
+#endif
+
+typedef mp_limb_t UWtype;
+typedef unsigned int UHWtype;
+#define W_TYPE_SIZE BITS_PER_MP_LIMB
+
+/* Internal mpn calls */
+#define impn_mul_n_basecase __MPN(impn_mul_n_basecase)
+#define impn_mul_n __MPN(impn_mul_n)
+#define impn_sqr_n_basecase __MPN(impn_sqr_n_basecase)
+#define impn_sqr_n __MPN(impn_sqr_n)
+
+#ifndef _PROTO
+#if defined (__STDC__) || defined (__cplusplus)
+#define _PROTO(x) x
+#else
+#define _PROTO(x) ()
+#endif
+#endif
+
+/* Prototypes for internal mpn calls. */
+extern void impn_mul_n_basecase _PROTO ((mp_ptr prodp, mp_srcptr up,
+ mp_srcptr vp, mp_size_t size));
+extern void impn_mul_n _PROTO ((mp_ptr prodp, mp_srcptr up, mp_srcptr vp,
+ mp_size_t size, mp_ptr tspace));
+extern void impn_sqr_n_basecase _PROTO ((mp_ptr prodp, mp_srcptr up,
+ mp_size_t size));
+extern void impn_sqr_n _PROTO ((mp_ptr prodp, mp_srcptr up, mp_size_t size,
+ mp_ptr tspace));
+
+
+
+#ifndef IEEE_DOUBLE_BIG_ENDIAN
+#define IEEE_DOUBLE_BIG_ENDIAN 1
+#endif
+
+#ifndef IEEE_DOUBLE_MIXED_ENDIAN
+#define IEEE_DOUBLE_MIXED_ENDIAN 0
+#endif
+
+#if IEEE_DOUBLE_MIXED_ENDIAN
+union ieee_double_extract
+{
+ struct
+ {
+ unsigned int manh:20;
+ unsigned int exp:11;
+ unsigned int sig:1;
+ unsigned int manl:32;
+ } s;
+ double d;
+};
+#else
+#if IEEE_DOUBLE_BIG_ENDIAN
+union ieee_double_extract
+{
+ struct
+ {
+ unsigned int sig:1;
+ unsigned int exp:11;
+ unsigned int manh:20;
+ unsigned int manl:32;
+ } s;
+ double d;
+};
+#else
+union ieee_double_extract
+{
+ struct
+ {
+ unsigned int manl:32;
+ unsigned int manh:20;
+ unsigned int exp:11;
+ unsigned int sig:1;
+ } s;
+ double d;
+};
+#endif
+#endif
diff --git a/REORG.TODO/stdlib/gmp.h b/REORG.TODO/stdlib/gmp.h
new file mode 100644
index 0000000000..821e3affd0
--- /dev/null
+++ b/REORG.TODO/stdlib/gmp.h
@@ -0,0 +1,623 @@
+/* gmp.h -- Definitions for GNU multiple precision functions.
+
+Copyright (C) 1991-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP 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 MP 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 MP Library; see the file COPYING.LIB. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#ifndef __GMP_H__
+
+#include <features.h>
+
+#ifndef __GNU_MP__
+#define __GNU_MP__ 2
+#define __need_size_t
+#include <stddef.h>
+#undef __need_size_t
+
+#if defined (__STDC__) || defined (__cplusplus)
+#define __gmp_const const
+#else
+#define __gmp_const
+#endif
+
+#if defined (__GNUC__)
+#define __gmp_inline __inline__
+#else
+#define __gmp_inline
+#endif
+
+#ifndef _EXTERN_INLINE
+#ifdef __GNUC__
+#define _EXTERN_INLINE __extern_inline
+#else
+#define _EXTERN_INLINE static
+#endif
+#endif
+
+#ifdef _SHORT_LIMB
+typedef unsigned int mp_limb_t;
+typedef int mp_limb_signed_t;
+#else
+#ifdef _LONG_LONG_LIMB
+typedef unsigned long long int mp_limb_t;
+typedef long long int mp_limb_signed_t;
+#else
+typedef unsigned long int mp_limb_t;
+typedef long int mp_limb_signed_t;
+#endif
+#endif
+
+typedef mp_limb_t * mp_ptr;
+typedef __gmp_const mp_limb_t * mp_srcptr;
+typedef long int mp_size_t;
+typedef long int mp_exp_t;
+
+#ifndef __MP_SMALL__
+typedef struct
+{
+ int _mp_alloc; /* Number of *limbs* allocated and pointed
+ to by the D field. */
+ int _mp_size; /* abs(SIZE) is the number of limbs
+ the last field points to. If SIZE
+ is negative this is a negative
+ number. */
+ mp_limb_t *_mp_d; /* Pointer to the limbs. */
+} __mpz_struct;
+#else
+typedef struct
+{
+ short int _mp_alloc; /* Number of *limbs* allocated and pointed
+ to by the D field. */
+ short int _mp_size; /* abs(SIZE) is the number of limbs
+ the last field points to. If SIZE
+ is negative this is a negative
+ number. */
+ mp_limb_t *_mp_d; /* Pointer to the limbs. */
+} __mpz_struct;
+#endif
+#endif /* __GNU_MP__ */
+
+/* User-visible types. */
+typedef __mpz_struct MP_INT;
+typedef __mpz_struct mpz_t[1];
+
+/* Structure for rational numbers. Zero is represented as 0/any, i.e.
+ the denominator is ignored. Negative numbers have the sign in
+ the numerator. */
+typedef struct
+{
+ __mpz_struct _mp_num;
+ __mpz_struct _mp_den;
+#if 0
+ int _mp_num_alloc; /* Number of limbs allocated
+ for the numerator. */
+ int _mp_num_size; /* The absolute value of this field is the
+ length of the numerator; the sign is the
+ sign of the entire rational number. */
+ mp_ptr _mp_num; /* Pointer to the numerator limbs. */
+ int _mp_den_alloc; /* Number of limbs allocated
+ for the denominator. */
+ int _mp_den_size; /* Length of the denominator. (This field
+ should always be positive.) */
+ mp_ptr _mp_den; /* Pointer to the denominator limbs. */
+#endif
+} __mpq_struct;
+
+typedef __mpq_struct MP_RAT;
+typedef __mpq_struct mpq_t[1];
+
+typedef struct
+{
+ int _mp_prec; /* Max precision, in number of `mp_limb_t's.
+ Set by mpf_init and modified by
+ mpf_set_prec. The area pointed to
+ by the `d' field contains `prec' + 1
+ limbs. */
+ int _mp_size; /* abs(SIZE) is the number of limbs
+ the last field points to. If SIZE
+ is negative this is a negative
+ number. */
+ mp_exp_t _mp_exp; /* Exponent, in the base of `mp_limb_t'. */
+ mp_limb_t *_mp_d; /* Pointer to the limbs. */
+} __mpf_struct;
+
+/* typedef __mpf_struct MP_FLOAT; */
+typedef __mpf_struct mpf_t[1];
+
+/* Types for function declarations in gmp files. */
+/* ??? Should not pollute user name space with these ??? */
+typedef __gmp_const __mpz_struct *mpz_srcptr;
+typedef __mpz_struct *mpz_ptr;
+typedef __gmp_const __mpf_struct *mpf_srcptr;
+typedef __mpf_struct *mpf_ptr;
+typedef __gmp_const __mpq_struct *mpq_srcptr;
+typedef __mpq_struct *mpq_ptr;
+
+#ifndef _PROTO
+#if defined (__STDC__) || defined (__cplusplus)
+#define _PROTO(x) x
+#else
+#define _PROTO(x) ()
+#endif
+#endif
+
+#ifndef __MPN
+#if defined (__STDC__) || defined (__cplusplus)
+#define __MPN(x) __mpn_##x
+#else
+#define __MPN(x) __mpn_/**/x
+#endif
+#endif
+
+#if defined (FILE) || defined (_STDIO_H_) || defined (__STDIO_H__) || defined (H_STDIO)
+#define _GMP_H_HAVE_FILE 1
+#endif
+
+void mp_set_memory_functions _PROTO ((void *(*) (size_t),
+ void *(*) (void *, size_t, size_t),
+ void (*) (void *, size_t)));
+extern const int mp_bits_per_limb;
+
+/**************** Integer (i.e. Z) routines. ****************/
+
+#if defined (__cplusplus)
+extern "C" {
+#endif
+void *_mpz_realloc _PROTO ((mpz_ptr, mp_size_t));
+
+void mpz_abs _PROTO ((mpz_ptr, mpz_srcptr));
+void mpz_add _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_add_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_and _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_array_init _PROTO ((mpz_ptr, mp_size_t, mp_size_t));
+void mpz_cdiv_q _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+unsigned long int mpz_cdiv_q_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_cdiv_qr _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr));
+unsigned long int mpz_cdiv_qr_ui _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_cdiv_r _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+unsigned long int mpz_cdiv_r_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+unsigned long int mpz_cdiv_ui _PROTO ((mpz_srcptr, unsigned long int));
+void mpz_clear _PROTO ((mpz_ptr));
+void mpz_clrbit _PROTO ((mpz_ptr, unsigned long int));
+int mpz_cmp _PROTO ((mpz_srcptr, mpz_srcptr));
+int mpz_cmp_si _PROTO ((mpz_srcptr, signed long int));
+int mpz_cmp_ui _PROTO ((mpz_srcptr, unsigned long int));
+void mpz_com _PROTO ((mpz_ptr, mpz_srcptr));
+void mpz_divexact _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_fac_ui _PROTO ((mpz_ptr, unsigned long int));
+void mpz_fdiv_q _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_fdiv_q_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+unsigned long int mpz_fdiv_q_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_fdiv_qr _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr));
+unsigned long int mpz_fdiv_qr_ui _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_fdiv_r _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_fdiv_r_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+unsigned long int mpz_fdiv_r_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+unsigned long int mpz_fdiv_ui _PROTO ((mpz_srcptr, unsigned long int));
+void mpz_gcd _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+unsigned long int mpz_gcd_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_gcdext _PROTO ((mpz_ptr, mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr));
+/* signed */ long int mpz_get_si _PROTO ((mpz_srcptr));
+char *mpz_get_str _PROTO ((char *, int, mpz_srcptr));
+unsigned long int mpz_get_ui _PROTO ((mpz_srcptr));
+mp_limb_t mpz_getlimbn _PROTO ((mpz_srcptr, mp_size_t));
+unsigned long int mpz_hamdist _PROTO ((mpz_srcptr, mpz_srcptr));
+void mpz_init _PROTO ((mpz_ptr));
+#ifdef _GMP_H_HAVE_FILE
+size_t mpz_inp_binary _PROTO ((mpz_ptr, FILE *));
+size_t mpz_inp_raw _PROTO ((mpz_ptr, FILE *));
+size_t mpz_inp_str _PROTO ((mpz_ptr, FILE *, int));
+#endif
+void mpz_init_set _PROTO ((mpz_ptr, mpz_srcptr));
+void mpz_init_set_d _PROTO ((mpz_ptr, double));
+void mpz_init_set_si _PROTO ((mpz_ptr, signed long int));
+int mpz_init_set_str _PROTO ((mpz_ptr, const char *, int));
+void mpz_init_set_ui _PROTO ((mpz_ptr, unsigned long int));
+int mpz_invert _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_ior _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+int mpz_jacobi _PROTO ((mpz_srcptr, mpz_srcptr));
+int mpz_legendre _PROTO ((mpz_srcptr, mpz_srcptr));
+void mpz_mod _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_mul _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_mul_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_mul_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_neg _PROTO ((mpz_ptr, mpz_srcptr));
+#ifdef _GMP_H_HAVE_FILE
+size_t mpz_out_binary _PROTO ((FILE *, mpz_srcptr));
+size_t mpz_out_raw _PROTO ((FILE *, mpz_srcptr));
+size_t mpz_out_str _PROTO ((FILE *, int, mpz_srcptr));
+#endif
+int mpz_perfect_square_p _PROTO ((mpz_srcptr));
+unsigned long int mpz_popcount _PROTO ((mpz_srcptr));
+void mpz_pow_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_powm _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr, mpz_srcptr));
+void mpz_powm_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int, mpz_srcptr));
+int mpz_probab_prime_p _PROTO ((mpz_srcptr, int));
+void mpz_random _PROTO ((mpz_ptr, mp_size_t));
+void mpz_random2 _PROTO ((mpz_ptr, mp_size_t));
+unsigned long int mpz_scan0 _PROTO ((mpz_srcptr, unsigned long int));
+unsigned long int mpz_scan1 _PROTO ((mpz_srcptr, unsigned long int));
+void mpz_set _PROTO ((mpz_ptr, mpz_srcptr));
+void mpz_set_d _PROTO ((mpz_ptr, double));
+void mpz_set_si _PROTO ((mpz_ptr, signed long int));
+int mpz_set_str _PROTO ((mpz_ptr, const char *, int));
+void mpz_set_ui _PROTO ((mpz_ptr, unsigned long int));
+void mpz_setbit _PROTO ((mpz_ptr, unsigned long int));
+size_t mpz_size _PROTO ((mpz_srcptr));
+size_t mpz_sizeinbase _PROTO ((mpz_srcptr, int));
+void mpz_sqrt _PROTO ((mpz_ptr, mpz_srcptr));
+void mpz_sqrtrem _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr));
+void mpz_sub _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_sub_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_tdiv_q _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_tdiv_q_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_tdiv_q_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_tdiv_qr _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_tdiv_qr_ui _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_tdiv_r _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_tdiv_r_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_tdiv_r_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_ui_pow_ui _PROTO ((mpz_ptr, unsigned long int, unsigned long int));
+
+/**************** Rational (i.e. Q) routines. ****************/
+
+void mpq_init _PROTO ((mpq_ptr));
+void mpq_clear _PROTO ((mpq_ptr));
+void mpq_set _PROTO ((mpq_ptr, mpq_srcptr));
+void mpq_set_ui _PROTO ((mpq_ptr, unsigned long int, unsigned long int));
+void mpq_set_si _PROTO ((mpq_ptr, signed long int, unsigned long int));
+void mpq_add _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr));
+void mpq_sub _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr));
+void mpq_mul _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr));
+void mpq_div _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr));
+void mpq_neg _PROTO ((mpq_ptr, mpq_srcptr));
+int mpq_cmp _PROTO ((mpq_srcptr, mpq_srcptr));
+int mpq_cmp_ui _PROTO ((mpq_srcptr, unsigned long int, unsigned long int));
+void mpq_inv _PROTO ((mpq_ptr, mpq_srcptr));
+void mpq_set_num _PROTO ((mpq_ptr, mpz_srcptr));
+void mpq_set_den _PROTO ((mpq_ptr, mpz_srcptr));
+void mpq_get_num _PROTO ((mpz_ptr, mpq_srcptr));
+void mpq_get_den _PROTO ((mpz_ptr, mpq_srcptr));
+double mpq_get_d _PROTO ((mpq_srcptr));
+void mpq_canonicalize _PROTO ((mpq_ptr));
+
+/**************** Float (i.e. F) routines. ****************/
+
+void mpf_abs _PROTO ((mpf_ptr, mpf_srcptr));
+void mpf_add _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
+void mpf_add_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
+void mpf_clear _PROTO ((mpf_ptr));
+int mpf_cmp _PROTO ((mpf_srcptr, mpf_srcptr));
+int mpf_cmp_si _PROTO ((mpf_srcptr, signed long int));
+int mpf_cmp_ui _PROTO ((mpf_srcptr, unsigned long int));
+void mpf_div _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
+void mpf_div_2exp _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
+void mpf_div_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
+void mpf_dump _PROTO ((mpf_srcptr));
+int mpf_eq _PROTO ((mpf_srcptr, mpf_srcptr, unsigned long int));
+unsigned long int mpf_get_prec _PROTO ((mpf_srcptr));
+char *mpf_get_str _PROTO ((char *, mp_exp_t *, int, size_t, mpf_srcptr));
+void mpf_init _PROTO ((mpf_ptr));
+void mpf_init2 _PROTO ((mpf_ptr, unsigned long int));
+#ifdef _GMP_H_HAVE_FILE
+size_t mpf_inp_str _PROTO ((mpf_ptr, FILE *, int));
+#endif
+void mpf_init_set _PROTO ((mpf_ptr, mpf_srcptr));
+void mpf_init_set_d _PROTO ((mpf_ptr, double));
+void mpf_init_set_si _PROTO ((mpf_ptr, signed long int));
+int mpf_init_set_str _PROTO ((mpf_ptr, char *, int));
+void mpf_init_set_ui _PROTO ((mpf_ptr, unsigned long int));
+void mpf_mul _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
+void mpf_mul_2exp _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
+void mpf_mul_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
+void mpf_neg _PROTO ((mpf_ptr, mpf_srcptr));
+#ifdef _GMP_H_HAVE_FILE
+size_t mpf_out_str _PROTO ((FILE *, int, size_t, mpf_srcptr));
+#endif
+void mpf_random2 _PROTO ((mpf_ptr, mp_size_t, mp_exp_t));
+void mpf_reldiff _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
+void mpf_set _PROTO ((mpf_ptr, mpf_srcptr));
+void mpf_set_d _PROTO ((mpf_ptr, double));
+void mpf_set_default_prec _PROTO ((unsigned long int));
+void mpf_set_prec _PROTO ((mpf_ptr, unsigned long int));
+void mpf_set_prec_raw _PROTO ((mpf_ptr, unsigned long int));
+void mpf_set_si _PROTO ((mpf_ptr, signed long int));
+int mpf_set_str _PROTO ((mpf_ptr, const char *, int));
+void mpf_set_ui _PROTO ((mpf_ptr, unsigned long int));
+size_t mpf_size _PROTO ((mpf_srcptr));
+void mpf_sqrt _PROTO ((mpf_ptr, mpf_srcptr));
+void mpf_sqrt_ui _PROTO ((mpf_ptr, unsigned long int));
+void mpf_sub _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
+void mpf_sub_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
+void mpf_ui_div _PROTO ((mpf_ptr, unsigned long int, mpf_srcptr));
+void mpf_ui_sub _PROTO ((mpf_ptr, unsigned long int, mpf_srcptr));
+#if defined (__cplusplus)
+}
+#endif
+/************ Low level positive-integer (i.e. N) routines. ************/
+
+/* This is ugly, but we need to make usr calls reach the prefixed function. */
+#define mpn_add __MPN(add)
+#define mpn_add_1 __MPN(add_1)
+#define mpn_add_n __MPN(add_n)
+#define mpn_addmul_1 __MPN(addmul_1)
+#define mpn_bdivmod __MPN(bdivmod)
+#define mpn_cmp __MPN(cmp)
+#define mpn_divmod_1 __MPN(divmod_1)
+#define mpn_divrem __MPN(divrem)
+#define mpn_divrem_1 __MPN(divrem_1)
+#define mpn_dump __MPN(dump)
+#define mpn_gcd __MPN(gcd)
+#define mpn_gcd_1 __MPN(gcd_1)
+#define mpn_gcdext __MPN(gcdext)
+#define mpn_get_str __MPN(get_str)
+#define mpn_hamdist __MPN(hamdist)
+#define mpn_lshift __MPN(lshift)
+#define mpn_mod_1 __MPN(mod_1)
+#define mpn_mul __MPN(mul)
+#define mpn_mul_1 __MPN(mul_1)
+#define mpn_mul_n __MPN(mul_n)
+#define mpn_perfect_square_p __MPN(perfect_square_p)
+#define mpn_popcount __MPN(popcount)
+#define mpn_preinv_mod_1 __MPN(preinv_mod_1)
+#define mpn_random2 __MPN(random2)
+#define mpn_rshift __MPN(rshift)
+#define mpn_scan0 __MPN(scan0)
+#define mpn_scan1 __MPN(scan1)
+#define mpn_set_str __MPN(set_str)
+#define mpn_sqrtrem __MPN(sqrtrem)
+#define mpn_sub __MPN(sub)
+#define mpn_sub_1 __MPN(sub_1)
+#define mpn_sub_n __MPN(sub_n)
+#define mpn_submul_1 __MPN(submul_1)
+#define mpn_udiv_w_sdiv __MPN(udiv_w_sdiv)
+
+#if defined (__cplusplus)
+extern "C" {
+#endif
+mp_limb_t mpn_add _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr,mp_size_t));
+mp_limb_t mpn_add_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t));
+mp_limb_t mpn_add_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t));
+mp_limb_t mpn_addmul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t));
+mp_limb_t mpn_bdivmod _PROTO ((mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, unsigned long int));
+int mpn_cmp _PROTO ((mp_srcptr, mp_srcptr, mp_size_t));
+mp_limb_t mpn_divmod_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t));
+mp_limb_t mpn_divrem _PROTO ((mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr, mp_size_t));
+mp_limb_t mpn_divrem_1 _PROTO ((mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t));
+void mpn_dump _PROTO ((mp_srcptr, mp_size_t));
+mp_size_t mpn_gcd _PROTO ((mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t));
+mp_limb_t mpn_gcd_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb_t));
+mp_size_t mpn_gcdext _PROTO ((mp_ptr, mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t));
+size_t mpn_get_str _PROTO ((unsigned char *, int, mp_ptr, mp_size_t));
+unsigned long int mpn_hamdist _PROTO ((mp_srcptr, mp_srcptr, mp_size_t));
+mp_limb_t mpn_lshift _PROTO ((mp_ptr, mp_srcptr, mp_size_t, unsigned int));
+mp_limb_t mpn_mod_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb_t));
+mp_limb_t mpn_mul _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t));
+mp_limb_t mpn_mul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t));
+void mpn_mul_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t));
+int mpn_perfect_square_p _PROTO ((mp_srcptr, mp_size_t));
+unsigned long int mpn_popcount _PROTO ((mp_srcptr, mp_size_t));
+mp_limb_t mpn_preinv_mod_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t));
+void mpn_random2 _PROTO ((mp_ptr, mp_size_t));
+mp_limb_t mpn_rshift _PROTO ((mp_ptr, mp_srcptr, mp_size_t, unsigned int));
+unsigned long int mpn_scan0 _PROTO ((mp_srcptr, unsigned long int));
+unsigned long int mpn_scan1 _PROTO ((mp_srcptr, unsigned long int));
+mp_size_t mpn_set_str _PROTO ((mp_ptr, const unsigned char *, size_t, int));
+mp_size_t mpn_sqrtrem _PROTO ((mp_ptr, mp_ptr, mp_srcptr, mp_size_t));
+mp_limb_t mpn_sub _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr,mp_size_t));
+mp_limb_t mpn_sub_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t));
+mp_limb_t mpn_sub_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t));
+mp_limb_t mpn_submul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t));
+#if defined (__cplusplus)
+}
+#endif
+
+#if defined (__GNUC__) || defined (_FORCE_INLINES)
+_EXTERN_INLINE mp_limb_t
+#if defined (__STDC__) || defined (__cplusplus)
+mpn_add_1 (register mp_ptr res_ptr,
+ register mp_srcptr s1_ptr,
+ register mp_size_t s1_size,
+ register mp_limb_t s2_limb)
+#else
+mpn_add_1 (res_ptr, s1_ptr, s1_size, s2_limb)
+ register mp_ptr res_ptr;
+ register mp_srcptr s1_ptr;
+ register mp_size_t s1_size;
+ register mp_limb_t s2_limb;
+#endif
+{
+ register mp_limb_t x;
+
+ x = *s1_ptr++;
+ s2_limb = x + s2_limb;
+ *res_ptr++ = s2_limb;
+ if (s2_limb < x)
+ {
+ while (--s1_size != 0)
+ {
+ x = *s1_ptr++ + 1;
+ *res_ptr++ = x;
+ if (x != 0)
+ goto fin;
+ }
+
+ return 1;
+ }
+
+ fin:
+ if (res_ptr != s1_ptr)
+ {
+ mp_size_t i;
+ for (i = 0; i < s1_size - 1; i++)
+ res_ptr[i] = s1_ptr[i];
+ }
+ return 0;
+}
+
+_EXTERN_INLINE mp_limb_t
+#if defined (__STDC__) || defined (__cplusplus)
+mpn_add (register mp_ptr res_ptr,
+ register mp_srcptr s1_ptr,
+ register mp_size_t s1_size,
+ register mp_srcptr s2_ptr,
+ register mp_size_t s2_size)
+#else
+mpn_add (res_ptr, s1_ptr, s1_size, s2_ptr, s2_size)
+ register mp_ptr res_ptr;
+ register mp_srcptr s1_ptr;
+ register mp_size_t s1_size;
+ register mp_srcptr s2_ptr;
+ register mp_size_t s2_size;
+#endif
+{
+ mp_limb_t cy_limb = 0;
+
+ if (s2_size != 0)
+ cy_limb = mpn_add_n (res_ptr, s1_ptr, s2_ptr, s2_size);
+
+ if (s1_size - s2_size != 0)
+ cy_limb = mpn_add_1 (res_ptr + s2_size,
+ s1_ptr + s2_size,
+ s1_size - s2_size,
+ cy_limb);
+ return cy_limb;
+}
+
+_EXTERN_INLINE mp_limb_t
+#if defined (__STDC__) || defined (__cplusplus)
+mpn_sub_1 (register mp_ptr res_ptr,
+ register mp_srcptr s1_ptr,
+ register mp_size_t s1_size,
+ register mp_limb_t s2_limb)
+#else
+mpn_sub_1 (res_ptr, s1_ptr, s1_size, s2_limb)
+ register mp_ptr res_ptr;
+ register mp_srcptr s1_ptr;
+ register mp_size_t s1_size;
+ register mp_limb_t s2_limb;
+#endif
+{
+ register mp_limb_t x;
+
+ x = *s1_ptr++;
+ s2_limb = x - s2_limb;
+ *res_ptr++ = s2_limb;
+ if (s2_limb > x)
+ {
+ while (--s1_size != 0)
+ {
+ x = *s1_ptr++;
+ *res_ptr++ = x - 1;
+ if (x != 0)
+ goto fin;
+ }
+
+ return 1;
+ }
+
+ fin:
+ if (res_ptr != s1_ptr)
+ {
+ mp_size_t i;
+ for (i = 0; i < s1_size - 1; i++)
+ res_ptr[i] = s1_ptr[i];
+ }
+ return 0;
+}
+
+_EXTERN_INLINE mp_limb_t
+#if defined (__STDC__) || defined (__cplusplus)
+mpn_sub (register mp_ptr res_ptr,
+ register mp_srcptr s1_ptr,
+ register mp_size_t s1_size,
+ register mp_srcptr s2_ptr,
+ register mp_size_t s2_size)
+#else
+mpn_sub (res_ptr, s1_ptr, s1_size, s2_ptr, s2_size)
+ register mp_ptr res_ptr;
+ register mp_srcptr s1_ptr;
+ register mp_size_t s1_size;
+ register mp_srcptr s2_ptr;
+ register mp_size_t s2_size;
+#endif
+{
+ mp_limb_t cy_limb = 0;
+
+ if (s2_size != 0)
+ cy_limb = mpn_sub_n (res_ptr, s1_ptr, s2_ptr, s2_size);
+
+ if (s1_size - s2_size != 0)
+ cy_limb = mpn_sub_1 (res_ptr + s2_size,
+ s1_ptr + s2_size,
+ s1_size - s2_size,
+ cy_limb);
+ return cy_limb;
+}
+#endif /* __GNUC__ */
+
+/* Allow faster testing for negative, zero, and positive. */
+#define mpz_sgn(Z) ((Z)->_mp_size < 0 ? -1 : (Z)->_mp_size > 0)
+#define mpf_sgn(F) ((F)->_mp_size < 0 ? -1 : (F)->_mp_size > 0)
+#define mpq_sgn(Q) ((Q)->_mp_num._mp_size < 0 ? -1 : (Q)->_mp_num._mp_size > 0)
+
+/* Allow direct user access to numerator and denominator of a mpq_t object. */
+#define mpq_numref(Q) (&((Q)->_mp_num))
+#define mpq_denref(Q) (&((Q)->_mp_den))
+
+/* When using GCC, optimize certain common comparisons. */
+#if defined (__GNUC__)
+#define mpz_cmp_ui(Z,UI) \
+ (__builtin_constant_p (UI) && (UI) == 0 \
+ ? mpz_sgn (Z) : mpz_cmp_ui (Z,UI))
+#define mpz_cmp_si(Z,UI) \
+ (__builtin_constant_p (UI) && (UI) == 0 ? mpz_sgn (Z) \
+ : __builtin_constant_p (UI) && (UI) > 0 ? mpz_cmp_ui (Z,UI) \
+ : mpz_cmp_si (Z,UI))
+#define mpq_cmp_ui(Q,NUI,DUI) \
+ (__builtin_constant_p (NUI) && (NUI) == 0 \
+ ? mpq_sgn (Q) : mpq_cmp_ui (Q,NUI,DUI))
+#endif
+
+#define mpn_divmod(qp,np,nsize,dp,dsize) mpn_divrem (qp,0,np,nsize,dp,dsize)
+#if 0
+#define mpn_divmod_1(qp,np,nsize,dlimb) mpn_divrem_1 (qp,0,np,nsize,dlimb)
+#endif
+
+/* Compatibility with GMP 1. */
+#define mpz_mdiv mpz_fdiv_q
+#define mpz_mdivmod mpz_fdiv_qr
+#define mpz_mmod mpz_fdiv_r
+#define mpz_mdiv_ui mpz_fdiv_q_ui
+#define mpz_mdivmod_ui(q,r,n,d) \
+ ((r == 0) ? mpz_fdiv_q_ui (q,n,d) : mpz_fdiv_qr_ui (q,r,n,d))
+#define mpz_mmod_ui(r,n,d) \
+ ((r == 0) ? mpz_fdiv_ui (n,d) : mpz_fdiv_r_ui (r,n,d))
+
+/* Useful synonyms, but not quite compatible with GMP 1. */
+#define mpz_div mpz_fdiv_q
+#define mpz_divmod mpz_fdiv_qr
+#define mpz_div_ui mpz_fdiv_q_ui
+#define mpz_divmod_ui mpz_fdiv_qr_ui
+#define mpz_mod_ui mpz_fdiv_r_ui
+#define mpz_div_2exp mpz_fdiv_q_2exp
+#define mpz_mod_2exp mpz_fdiv_r_2exp
+
+#define __GNU_MP_VERSION 2
+#define __GNU_MP_VERSION_MINOR 0
+#define __GMP_H__
+#endif /* __GMP_H__ */
diff --git a/REORG.TODO/stdlib/grouping.c b/REORG.TODO/stdlib/grouping.c
new file mode 100644
index 0000000000..63ef4c1644
--- /dev/null
+++ b/REORG.TODO/stdlib/grouping.c
@@ -0,0 +1,201 @@
+/* Internal header for proving correct grouping in strings of numbers.
+ Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <limits.h>
+#include <stddef.h>
+#include <string.h>
+
+#ifndef MAX
+#define MAX(a,b) ({ typeof(a) _a = (a); typeof(b) _b = (b); \
+ _a > _b ? _a : _b; })
+#endif
+
+#ifdef USE_WIDE_CHAR
+# include <wctype.h>
+# define L_(Ch) L##Ch
+# define UCHAR_TYPE wint_t
+# define STRING_TYPE wchar_t
+#else
+# define L_(Ch) Ch
+# define UCHAR_TYPE unsigned char
+# define STRING_TYPE char
+#endif
+
+#include "grouping.h"
+
+/* Find the maximum prefix of the string between BEGIN and END which
+ satisfies the grouping rules. It is assumed that at least one digit
+ follows BEGIN directly. */
+
+const STRING_TYPE *
+#ifdef USE_WIDE_CHAR
+__correctly_grouped_prefixwc (const STRING_TYPE *begin, const STRING_TYPE *end,
+ wchar_t thousands,
+#else
+__correctly_grouped_prefixmb (const STRING_TYPE *begin, const STRING_TYPE *end,
+ const char *thousands,
+#endif
+ const char *grouping)
+{
+#ifndef USE_WIDE_CHAR
+ size_t thousands_len;
+ int cnt;
+#endif
+
+ if (grouping == NULL)
+ return end;
+
+#ifndef USE_WIDE_CHAR
+ thousands_len = strlen (thousands);
+#endif
+
+ while (end > begin)
+ {
+ const STRING_TYPE *cp = end - 1;
+ const char *gp = grouping;
+
+ /* Check first group. */
+ while (cp >= begin)
+ {
+#ifdef USE_WIDE_CHAR
+ if (*cp == thousands)
+ break;
+#else
+ if (cp[thousands_len - 1] == *thousands)
+ {
+ for (cnt = 1; thousands[cnt] != '\0'; ++cnt)
+ if (thousands[cnt] != cp[thousands_len - 1 - cnt])
+ break;
+ if (thousands[cnt] == '\0')
+ break;
+ }
+#endif
+ --cp;
+ }
+
+ /* We allow the representation to contain no grouping at all even if
+ the locale specifies we can have grouping. */
+ if (cp < begin)
+ return end;
+
+ if (end - cp == (int) *gp + 1)
+ {
+ /* This group matches the specification. */
+
+ const STRING_TYPE *new_end;
+
+ if (cp < begin)
+ /* There is just one complete group. We are done. */
+ return end;
+
+ /* CP points to a thousands separator character. The preceding
+ remainder of the string from BEGIN to NEW_END is the part we
+ will consider if there is a grouping error in this trailing
+ portion from CP to END. */
+ new_end = cp - 1;
+
+ /* Loop while the grouping is correct. */
+ while (1)
+ {
+ /* Get the next grouping rule. */
+ ++gp;
+ if (*gp == 0)
+ /* If end is reached use last rule. */
+ --gp;
+
+ /* Skip the thousands separator. */
+ --cp;
+
+ if (*gp == CHAR_MAX
+#if CHAR_MIN < 0
+ || *gp < 0
+#endif
+ )
+ {
+ /* No more thousands separators are allowed to follow. */
+ while (cp >= begin)
+ {
+#ifdef USE_WIDE_CHAR
+ if (*cp == thousands)
+ break;
+#else
+ for (cnt = 0; thousands[cnt] != '\0'; ++cnt)
+ if (thousands[cnt] != cp[thousands_len - cnt - 1])
+ break;
+ if (thousands[cnt] == '\0')
+ break;
+#endif
+ --cp;
+ }
+
+ if (cp < begin)
+ /* OK, only digits followed. */
+ return end;
+ }
+ else
+ {
+ /* Check the next group. */
+ const STRING_TYPE *group_end = cp;
+
+ while (cp >= begin)
+ {
+#ifdef USE_WIDE_CHAR
+ if (*cp == thousands)
+ break;
+#else
+ for (cnt = 0; thousands[cnt] != '\0'; ++cnt)
+ if (thousands[cnt] != cp[thousands_len - cnt - 1])
+ break;
+ if (thousands[cnt] == '\0')
+ break;
+#endif
+ --cp;
+ }
+
+ if (cp < begin && group_end - cp <= (int) *gp)
+ /* Final group is correct. */
+ return end;
+
+ if (cp < begin || group_end - cp != (int) *gp)
+ /* Incorrect group. Punt. */
+ break;
+ }
+ }
+
+ /* The trailing portion of the string starting at NEW_END
+ contains a grouping error. So we will look for a correctly
+ grouped number in the preceding portion instead. */
+ end = new_end;
+ }
+ else
+ {
+ /* Even the first group was wrong; determine maximum shift. */
+ if (end - cp > (int) *gp + 1)
+ end = cp + (int) *gp + 1;
+ else if (cp < begin)
+ /* This number does not fill the first group, but is correct. */
+ return end;
+ else
+ /* CP points to a thousands separator character. */
+ end = cp;
+ }
+ }
+
+ return MAX (begin, end);
+}
diff --git a/REORG.TODO/stdlib/grouping.h b/REORG.TODO/stdlib/grouping.h
new file mode 100644
index 0000000000..d77b6e1105
--- /dev/null
+++ b/REORG.TODO/stdlib/grouping.h
@@ -0,0 +1,33 @@
+/* Internal header for proving correct grouping in strings of numbers.
+ Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+/* Find the maximum prefix of the string between BEGIN and END which
+ satisfies the grouping rules. It is assumed that at least one digit
+ follows BEGIN directly. */
+extern const wchar_t *__correctly_grouped_prefixwc (const wchar_t *begin,
+ const wchar_t *end,
+ wchar_t thousands,
+ const char *grouping)
+ attribute_hidden;
+
+extern const char *__correctly_grouped_prefixmb (const char *begin,
+ const char *end,
+ const char *thousands,
+ const char *grouping)
+ attribute_hidden;
diff --git a/REORG.TODO/stdlib/groupingwc.c b/REORG.TODO/stdlib/groupingwc.c
new file mode 100644
index 0000000000..cd9675ee58
--- /dev/null
+++ b/REORG.TODO/stdlib/groupingwc.c
@@ -0,0 +1,2 @@
+#define USE_WIDE_CHAR 1
+#include "grouping.c"
diff --git a/REORG.TODO/stdlib/inlines.c b/REORG.TODO/stdlib/inlines.c
new file mode 100644
index 0000000000..5f1065ea13
--- /dev/null
+++ b/REORG.TODO/stdlib/inlines.c
@@ -0,0 +1,3 @@
+#define _FORCE_INLINES
+#define _EXTERN_INLINE /* empty */
+#include <gmp.h>
diff --git a/REORG.TODO/stdlib/isomac.c b/REORG.TODO/stdlib/isomac.c
new file mode 100644
index 0000000000..d12d1ff661
--- /dev/null
+++ b/REORG.TODO/stdlib/isomac.c
@@ -0,0 +1,447 @@
+/* Check system header files for ISO 9899:1990 (ISO C) compliance.
+ Copyright (C) 1996-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Jens Schweikhardt <schweikh@noc.dfn.de>, 1996.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+/* This is a simple minded program that tries to find illegal macro
+ definitions in system header files. Illegal macro definitions are
+ those not from the implementation namespace (i.e. not starting with
+ an underscore) or not matching any identifier mandated by The
+ Standard. Some common macro names are considered okay, e.g. all those
+ beginning with E (which may be defined in <errno.h>) or ending in
+ _MAX. See the arrays prefix[] and suffix[] below for details.
+
+ In a compliant implementation no other macros can be defined, because
+ you could write strictly conforming programs that may fail to compile
+ due to syntax errors: suppose <stdio.h> defines PIPE_BUF, then the
+ conforming
+
+ #include <assert.h>
+ #include <stdio.h> <- or where the bogus macro is defined
+ #include <string.h>
+ #define STR(x) #x
+ #define XSTR(x) STR(x)
+ int main (void)
+ {
+ int PIPE_BUF = 0;
+ assert (strcmp ("PIPE_BUF", XSTR (PIPE_BUF)) == 0);
+ return 0;
+ }
+
+ is expected to compile and meet the assertion. If it does not, your
+ compiler compiles some other language than Standard C.
+
+ REQUIREMENTS:
+ This program calls gcc to get the list of defined macros. If you
+ don't have gcc you're probably out of luck unless your compiler or
+ preprocessor has something similar to gcc's -dM option. Tune
+ PRINT_MACROS in this case. This program assumes headers are found
+ under /usr/include and that there is a writable /tmp directory.
+ Tune SYSTEM_INCLUDE if your system differs.
+ #define BROKEN_SYSTEM if system(NULL) bombs -- one more violation
+ of ISO C, by the way.
+
+ OUTPUT:
+ Each header file name is printed, followed by illegal macro names
+ and their definition. For the above example, you would see
+ ...
+ /usr/include/stdio.h
+ #define PIPE_BUF 5120
+ ...
+ If your implementation does not yet incorporate Amendment 1 you
+ will see messages about iso646.h, wctype.h and wchar.h not being
+ found. */
+
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE 1
+#endif
+
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define HEADER_MAX 256
+
+static const char *macrofile;
+
+/* ISO C header names including Amendment 1 (without ".h" suffix). */
+static char *header[] =
+{
+ "assert", "ctype", "errno", "float", "iso646", "limits", "locale",
+ "math", "setjmp", "signal", "stdarg", "stddef", "stdio", "stdlib",
+ "string", "time", "wchar", "wctype"
+};
+
+/* Macros with these prefixes are considered okay. */
+static char *prefix[] =
+{
+ "_", "E", "is", "str", "mem", "SIG", "FLT_", "DBL_", "LDBL_",
+ "LC_", "wmem", "wcs"
+};
+
+/* Macros with these suffixes are considered okay. Will not work for
+ parametrized macros with arguments. */
+static char *suffix[] =
+{
+ "_MAX", "_MIN"
+};
+
+/* These macros are considered okay. In fact, these are just more prefixes. */
+static char *macros[] =
+{
+ "BUFSIZ", "CHAR_BIT", "CHAR_MAX", "CHAR_MIN", "CLOCKS_PER_SEC",
+ "DBL_DIG", "DBL_EPSILON", "DBL_MANT_DIG", "DBL_MAX",
+ "DBL_MAX_10_EXP", "DBL_MAX_EXP", "DBL_MIN", "DBL_MIN_10_EXP",
+ "DBL_MIN_EXP", "EDOM", "EILSEQ", "EOF", "ERANGE", "EXIT_FAILURE",
+ "EXIT_SUCCESS", "FILENAME_MAX", "FLT_DIG", "FLT_EPSILON",
+ "FLT_MANT_DIG", "FLT_MAX", "FLT_MAX_10_EXP", "FLT_MAX_EXP",
+ "FLT_MIN", "FLT_MIN_10_EXP", "FLT_MIN_EXP", "FLT_RADIX",
+ "FLT_ROUNDS", "FOPEN_MAX", "HUGE_VAL", "INT_MAX", "INT_MIN",
+ "LC_ALL", "LC_COLLATE", "LC_CTYPE", "LC_MONETARY", "LC_NUMERIC",
+ "LC_TIME", "LDBL_DIG", "LDBL_EPSILON", "LDBL_MANT_DIG", "LDBL_MAX",
+ "LDBL_MAX_10_EXP", "LDBL_MAX_EXP", "LDBL_MIN", "LDBL_MIN_10_EXP",
+ "LDBL_MIN_EXP", "LONG_MAX", "LONG_MIN", "L_tmpnam", "MB_CUR_MAX",
+ "MB_LEN_MAX", "NDEBUG", "NULL", "RAND_MAX", "SCHAR_MAX",
+ "SCHAR_MIN", "SEEK_CUR", "SEEK_END", "SEEK_SET", "SHRT_MAX",
+ "SHRT_MIN", "SIGABRT", "SIGFPE", "SIGILL", "SIGINT", "SIGSEGV",
+ "SIGTERM", "SIG_DFL", "SIG_ERR", "SIG_IGN", "TMP_MAX", "UCHAR_MAX",
+ "UINT_MAX", "ULONG_MAX", "USHRT_MAX", "WCHAR_MAX", "WCHAR_MIN",
+ "WEOF", "_IOFBF", "_IOLBF", "_IONBF", "abort", "abs", "acos",
+ "acosf", "acosl", "and", "and_eq", "asctime", "asin", "asinf",
+ "asinl", "assert", "atan", "atan2", "atan2f", "atan2l", "atanf",
+ "atanl", "atexit", "atof", "atoi", "atol", "bitand", "bitor",
+ "bsearch", "btowc", "calloc", "ceil", "ceilf", "ceill", "clearerr",
+ "clock", "clock_t", "compl", "cos", "cosf", "cosh", "coshf",
+ "coshl", "cosl", "ctime", "difftime", "div", "div_t", "errno",
+ "exit", "exp", "expf", "expl", "fabs", "fabsf", "fabsl", "fclose",
+ "feof", "ferror", "fflush", "fgetc", "fgetpos", "fgets", "fgetwc",
+ "fgetws", "floor", "floorf", "floorl", "fmod", "fmodf", "fmodl",
+ "fopen", "fprintf", "fputc", "fputs", "fputwc", "fputws", "fread",
+ "free", "freopen", "frexp", "frexpf", "frexpl", "fscanf", "fseek",
+ "fsetpos", "ftell", "fwide", "fwprintf", "fwrite", "fwscanf",
+ "getc", "getchar", "getenv", "gets", "getwc", "getwchar", "gmtime",
+ "isalnum", "isalpha", "iscntrl", "isdigit", "isgraph", "islower",
+ "isprint", "ispunct", "isspace", "isupper", "iswalnum", "iswalpha",
+ "iswcntrl", "iswctype", "iswdigit", "iswgraph", "iswlower",
+ "iswprint", "iswpunct", "iswspace", "iswupper", "iswxdigit",
+ "isxdigit", "labs", "ldexp", "ldexpf", "ldexpl", "ldiv", "ldiv_t",
+ "localeconv", "localtime", "log", "log10", "log10f", "log10l",
+ "logf", "logl", "longjmp", "malloc", "mblen", "mbrlen", "mbrtowc",
+ "mbsinit", "mbsrtowcs", "mbstate_t", "mbstowcs", "mbtowc", "memchr",
+ "memcmp", "memcpy", "memmove", "memset", "mktime", "modf", "modff",
+ "modfl", "not", "not_eq", "offsetof", "or", "or_eq", "perror",
+ "pow", "powf", "powl", "printf", "ptrdiff_t", "putc", "putchar",
+ "puts", "putwc", "putwchar", "qsort", "raise", "rand", "realloc",
+ "remove", "rename", "rewind", "scanf", "setbuf", "setjmp",
+ "setlocale", "setvbuf", "sig_atomic_t", "signal", "sin", "sinf",
+ "sinh", "sinhf", "sinhl", "sinl", "size_t", "sprintf", "sqrt",
+ "sqrtf", "sqrtl", "srand", "sscanf", "stderr", "stdin", "stdout",
+ "strcat", "strchr", "strcmp", "strcoll", "strcpy", "strcspn",
+ "strerror", "strftime", "strlen", "strncat", "strncmp", "strncpy",
+ "strpbrk", "strrchr", "strspn", "strstr", "strtod", "strtok",
+ "strtol", "strtoul", "strxfrm", "swprintf", "swscanf", "system",
+ "tan", "tanf", "tanh", "tanhf", "tanhl", "tanl", "time", "time_t",
+ "tmpfile", "tmpnam", "tolower", "toupper", "towctrans", "towlower",
+ "towupper", "ungetc", "ungetwc", "va_arg", "va_copy", "va_end", "va_start",
+ "vfprintf", "vfwprintf", "vprintf", "vsprintf", "vswprintf",
+ "vwprintf", "wchar_t", "wcrtomb", "wcscat", "wcschr", "wcscmp",
+ "wcscoll", "wcscpy", "wcscspn", "wcsftime", "wcslen", "wcsncat",
+ "wcsncmp", "wcsncpy", "wcspbrk", "wcsrchr", "wcsrtombs", "wcsspn",
+ "wcsstr", "wcstod", "wcstok", "wcstol", "wcstombs", "wcstoul",
+ "wcsxfrm", "wctob", "wctomb", "wctrans", "wctrans_t", "wctype",
+ "wctype_t", "wint_t", "wmemchr", "wmemcmp", "wmemcpy", "wmemmove",
+ "wmemset", "wprintf", "wscanf", "xor", "xor_eq"
+};
+
+#define NUMBER_OF_HEADERS (sizeof header / sizeof *header)
+#define NUMBER_OF_PREFIXES (sizeof prefix / sizeof *prefix)
+#define NUMBER_OF_SUFFIXES (sizeof suffix / sizeof *suffix)
+#define NUMBER_OF_MACROS (sizeof macros / sizeof *macros)
+
+
+/* Format string to build command to invoke compiler. */
+static const char fmt[] = "\
+echo \"#include <%s>\" |\
+%s -E -dM -ansi -pedantic %s -D_LIBC -D_ISOMAC \
+-DIN_MODULE=MODULE_extramodules -I. \
+-isystem `%s --print-prog-name=include` - 2> /dev/null > %s";
+
+
+/* The compiler we use (given on the command line). */
+char *CC;
+/* The -I parameters for CC to find all headers. */
+char *INC;
+
+static char *xstrndup (const char *, size_t);
+static const char **get_null_defines (void);
+static int check_header (const char *, const char **);
+
+int
+main (int argc, char *argv[])
+{
+ int h;
+ int result = 0;
+ const char **ignore_list;
+
+ CC = argc > 1 ? argv[1] : "gcc";
+ INC = argc > 2 ? argv[2] : "";
+
+ if (system (NULL) == 0)
+ {
+ puts ("Sorry, no command processor.");
+ return EXIT_FAILURE;
+ }
+
+ /* First get list of symbols which are defined by the compiler. */
+ ignore_list = get_null_defines ();
+
+ fputs ("Tested files:\n", stdout);
+
+ for (h = 0; h < NUMBER_OF_HEADERS; ++h)
+ {
+ char file_name[HEADER_MAX];
+ sprintf (file_name, "%s.h", header[h]);
+ result |= check_header (file_name, ignore_list);
+ }
+
+ /* The test suite should return errors but for now this is not
+ practical. Give a warning and ask the user to correct the bugs. */
+ return result;
+}
+
+
+static char *
+xstrndup (const char *s, size_t n)
+{
+ size_t len = n;
+ char *new = malloc (len + 1);
+
+ if (new == NULL)
+ return NULL;
+
+ new[len] = '\0';
+ return memcpy (new, s, len);
+}
+
+
+static const char **
+get_null_defines (void)
+{
+ char line[BUFSIZ], *command;
+ char **result = NULL;
+ size_t result_len = 0;
+ size_t result_max = 0;
+ FILE *input;
+ int first = 1;
+
+ macrofile = tmpnam (NULL);
+
+ command = malloc (sizeof fmt + sizeof "/dev/null" + 2 * strlen (CC)
+ + strlen (INC) + strlen (macrofile));
+
+ if (command == NULL)
+ {
+ puts ("No more memory.");
+ exit (1);
+ }
+
+ sprintf (command, fmt, "/dev/null", CC, INC, CC, macrofile);
+
+ if (system (command))
+ {
+ puts ("system() returned nonzero");
+ free (command);
+ return NULL;
+ }
+ free (command);
+ input = fopen (macrofile, "r");
+
+ if (input == NULL)
+ {
+ printf ("Could not read %s: ", macrofile);
+ perror (NULL);
+ return NULL;
+ }
+
+ while (fgets (line, sizeof line, input) != NULL)
+ {
+ int i, okay = 0;
+ size_t endmac;
+ char *start, *end;
+ if (strlen (line) < 9 || line[7] != ' ')
+ { /* "#define A" */
+ printf ("Malformed input, expected '#define MACRO'\ngot '%s'\n",
+ line);
+ continue;
+ }
+ if (line[8] == '_')
+ /* It's a safe identifier. */
+ continue;
+ if (result_len == result_max)
+ {
+ result_max += 10;
+ result = realloc (result, result_max * sizeof (char **));
+ if (result == NULL)
+ {
+ puts ("No more memory.");
+ exit (1);
+ }
+ }
+ start = &line[8];
+ for (end = start + 1; !isspace (*end) && *end != '\0'; ++end)
+ ;
+ result[result_len] = xstrndup (start, end - start);
+
+ if (strcmp (result[result_len], "IN_MODULE") != 0)
+ {
+ if (first)
+ {
+ fputs ("The following identifiers will be ignored since the compiler defines them\nby default:\n", stdout);
+ first = 0;
+ }
+ puts (result[result_len]);
+ }
+ ++result_len;
+ }
+ if (result_len == result_max)
+ {
+ result_max += 1;
+ result = realloc (result, result_max * sizeof (char **));
+ if (result == NULL)
+ {
+ puts ("No more memory.");
+ exit (1);
+ }
+ }
+ result[result_len] = NULL;
+ fclose (input);
+ remove (macrofile);
+
+ return (const char **) result;
+}
+
+
+static int
+check_header (const char *file_name, const char **except)
+{
+ char line[BUFSIZ], *command;
+ FILE *input;
+ int result = 0;
+
+ command = malloc (sizeof fmt + strlen (file_name) + 2 * strlen (CC)
+ + strlen (INC) + strlen (macrofile));
+
+ if (command == NULL)
+ {
+ puts ("No more memory.");
+ exit (1);
+ }
+
+ puts (file_name);
+ sprintf (command, fmt, file_name, CC, INC, CC, macrofile);
+
+ if (system (command))
+ {
+ puts ("system() returned nonzero");
+ result = 1;
+ }
+ free (command);
+ input = fopen (macrofile, "r");
+
+ if (input == NULL)
+ {
+ printf ("Could not read %s: ", macrofile);
+ perror (NULL);
+ return 1;
+ }
+
+ while (fgets (line, sizeof line, input) != NULL)
+ {
+ int i, okay = 0;
+ size_t endmac;
+ const char **cpp;
+ if (strlen (line) < 9 || line[7] != ' ')
+ { /* "#define A" */
+ printf ("Malformed input, expected '#define MACRO'\ngot '%s'\n",
+ line);
+ result = 1;
+ continue;
+ }
+ for (i = 0; i < NUMBER_OF_PREFIXES; ++i)
+ {
+ if (!strncmp (line+8, prefix[i], strlen (prefix[i]))) {
+ ++okay;
+ break;
+ }
+ }
+ if (okay)
+ continue;
+ for (i = 0; i < NUMBER_OF_MACROS; ++i)
+ {
+ if (!strncmp (line + 8, macros[i], strlen (macros[i])))
+ {
+ ++okay;
+ break;
+ }
+ }
+ if (okay)
+ continue;
+ /* Find next char after the macro identifier; this can be either
+ a space or an open parenthesis. */
+ endmac = strcspn (line + 8, " (");
+ if (line[8+endmac] == '\0')
+ {
+ printf ("malformed input, expected '#define MACRO VALUE'\n"
+ "got '%s'\n", line);
+ result = 1;
+ continue;
+ }
+ for (i = 0; i < NUMBER_OF_SUFFIXES; ++i)
+ {
+ size_t len = strlen (suffix[i]);
+ if (!strncmp (line + 8 + endmac - len, suffix[i], len))
+ {
+ ++okay;
+ break;
+ }
+ }
+ if (okay)
+ continue;
+ if (except != NULL)
+ for (cpp = except; *cpp != NULL; ++cpp)
+ {
+ size_t len = strlen (*cpp);
+ if (!strncmp (line + 8, *cpp, len) && isspace (line[8 + len]))
+ {
+ ++okay;
+ break;
+ }
+ }
+ if (!okay)
+ {
+ fputs (line, stdout);
+ result = 2;
+ }
+ }
+ fclose (input);
+ remove (macrofile);
+
+ return result;
+}
+
+/* EOF */
diff --git a/REORG.TODO/stdlib/jrand48.c b/REORG.TODO/stdlib/jrand48.c
new file mode 100644
index 0000000000..4a551ed1f3
--- /dev/null
+++ b/REORG.TODO/stdlib/jrand48.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+
+long int
+jrand48 (unsigned short int xsubi[3])
+{
+ long int result;
+
+ (void) __jrand48_r (xsubi, &__libc_drand48_data, &result);
+
+ return result;
+}
diff --git a/REORG.TODO/stdlib/jrand48_r.c b/REORG.TODO/stdlib/jrand48_r.c
new file mode 100644
index 0000000000..40e6a1cb2c
--- /dev/null
+++ b/REORG.TODO/stdlib/jrand48_r.c
@@ -0,0 +1,34 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+int
+__jrand48_r (unsigned short int xsubi[3], struct drand48_data *buffer,
+ long int *result)
+{
+ /* Compute next state. */
+ if (__drand48_iterate (xsubi, buffer) < 0)
+ return -1;
+
+ /* Store the result. */
+ *result = (int32_t) ((xsubi[2] << 16) | xsubi[1]);
+
+ return 0;
+}
+weak_alias (__jrand48_r, jrand48_r)
diff --git a/REORG.TODO/stdlib/l64a.c b/REORG.TODO/stdlib/l64a.c
new file mode 100644
index 0000000000..fc125844ce
--- /dev/null
+++ b/REORG.TODO/stdlib/l64a.c
@@ -0,0 +1,56 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+/* Conversion table. */
+static const char conv_table[64] =
+{
+ '.', '/', '0', '1', '2', '3', '4', '5',
+ '6', '7', '8', '9', 'A', 'B', 'C', 'D',
+ 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
+ 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
+ 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b',
+ 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
+ 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r',
+ 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'
+};
+
+char *
+l64a (long int n)
+{
+ unsigned long int m = (unsigned long int) n;
+ static char result[7];
+ int cnt;
+
+ /* The standard says that only 32 bits are used. */
+ m &= 0xffffffff;
+
+ if (m == 0ul)
+ /* The value for N == 0 is defined to be the empty string. */
+ return (char *) "";
+
+ for (cnt = 0; m > 0ul; ++cnt)
+ {
+ result[cnt] = conv_table[m & 0x3f];
+ m >>= 6;
+ }
+ result[cnt] = '\0';
+
+ return result;
+}
diff --git a/REORG.TODO/stdlib/labs.c b/REORG.TODO/stdlib/labs.c
new file mode 100644
index 0000000000..506c4bb21e
--- /dev/null
+++ b/REORG.TODO/stdlib/labs.c
@@ -0,0 +1,28 @@
+/* Copyright (C) 1991-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+#undef labs
+
+
+/* Return the absolute value of I. */
+long int
+labs (long int i)
+{
+ return i < 0 ? -i : i;
+}
diff --git a/REORG.TODO/stdlib/lcong48.c b/REORG.TODO/stdlib/lcong48.c
new file mode 100644
index 0000000000..b90ae1c5c2
--- /dev/null
+++ b/REORG.TODO/stdlib/lcong48.c
@@ -0,0 +1,26 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+
+void
+lcong48 (unsigned short int param[7])
+{
+ (void) __lcong48_r (param, &__libc_drand48_data);
+}
diff --git a/REORG.TODO/stdlib/lcong48_r.c b/REORG.TODO/stdlib/lcong48_r.c
new file mode 100644
index 0000000000..d5228af8f5
--- /dev/null
+++ b/REORG.TODO/stdlib/lcong48_r.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+int
+__lcong48_r (unsigned short int param[7], struct drand48_data *buffer)
+{
+ /* Store the given values. */
+ memcpy (buffer->__x, &param[0], sizeof (buffer->__x));
+ buffer->__a = ((uint64_t) param[5] << 32 | (uint32_t) param[4] << 16
+ | param[3]);
+ buffer->__c = param[6];
+ buffer->__init = 1;
+
+ return 0;
+}
+weak_alias (__lcong48_r, lcong48_r)
diff --git a/REORG.TODO/stdlib/ldbl2mpn.c b/REORG.TODO/stdlib/ldbl2mpn.c
new file mode 100644
index 0000000000..450f9381cc
--- /dev/null
+++ b/REORG.TODO/stdlib/ldbl2mpn.c
@@ -0,0 +1 @@
+/* Empty. Not needed unless ldbl support is in. */
diff --git a/REORG.TODO/stdlib/ldiv.c b/REORG.TODO/stdlib/ldiv.c
new file mode 100644
index 0000000000..3951eb05f0
--- /dev/null
+++ b/REORG.TODO/stdlib/ldiv.c
@@ -0,0 +1,31 @@
+/* Copyright (C) 1992-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+
+/* Return the `ldiv_t' representation of NUMER over DENOM. */
+ldiv_t
+ldiv (long int numer, long int denom)
+{
+ ldiv_t result;
+
+ result.quot = numer / denom;
+ result.rem = numer % denom;
+
+ return result;
+}
diff --git a/REORG.TODO/stdlib/llabs.c b/REORG.TODO/stdlib/llabs.c
new file mode 100644
index 0000000000..39d0561c0d
--- /dev/null
+++ b/REORG.TODO/stdlib/llabs.c
@@ -0,0 +1,29 @@
+/* `long long int' absolute value.
+ Copyright (C) 1991-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+#undef llabs
+
+
+/* Return the absolute value of I. */
+long long int
+llabs (long long int i)
+{
+ return i < 0 ? -i : i;
+}
diff --git a/REORG.TODO/stdlib/lldiv.c b/REORG.TODO/stdlib/lldiv.c
new file mode 100644
index 0000000000..7109f35063
--- /dev/null
+++ b/REORG.TODO/stdlib/lldiv.c
@@ -0,0 +1,32 @@
+/* `long long int' divison with remainder.
+ Copyright (C) 1992-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+
+/* Return the `lldiv_t' representation of NUMER over DENOM. */
+lldiv_t
+lldiv (long long int numer, long long int denom)
+{
+ lldiv_t result;
+
+ result.quot = numer / denom;
+ result.rem = numer % denom;
+
+ return result;
+}
diff --git a/REORG.TODO/stdlib/longlong.h b/REORG.TODO/stdlib/longlong.h
new file mode 100644
index 0000000000..0ec11c5056
--- /dev/null
+++ b/REORG.TODO/stdlib/longlong.h
@@ -0,0 +1,1773 @@
+/* longlong.h -- definitions for mixed size 32/64 bit arithmetic.
+ Copyright (C) 1991-2017 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.
+
+ In addition to the permissions in the GNU Lesser General Public
+ License, the Free Software Foundation gives you unlimited
+ permission to link the compiled version of this file into
+ combinations with other programs, and to distribute those
+ combinations without any restriction coming from the use of this
+ file. (The Lesser General Public License restrictions do apply in
+ other respects; for example, they cover modification of the file,
+ and distribution when not linked into a combine executable.)
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+/* You have to define the following before including this file:
+
+ UWtype -- An unsigned type, default type for operations (typically a "word")
+ UHWtype -- An unsigned type, at least half the size of UWtype.
+ UDWtype -- An unsigned type, at least twice as large a UWtype
+ W_TYPE_SIZE -- size in bits of UWtype
+
+ UQItype -- Unsigned 8 bit type.
+ SItype, USItype -- Signed and unsigned 32 bit types.
+ DItype, UDItype -- Signed and unsigned 64 bit types.
+
+ On a 32 bit machine UWtype should typically be USItype;
+ on a 64 bit machine, UWtype should typically be UDItype. */
+
+#define __BITS4 (W_TYPE_SIZE / 4)
+#define __ll_B ((UWtype) 1 << (W_TYPE_SIZE / 2))
+#define __ll_lowpart(t) ((UWtype) (t) & (__ll_B - 1))
+#define __ll_highpart(t) ((UWtype) (t) >> (W_TYPE_SIZE / 2))
+
+#ifndef W_TYPE_SIZE
+#define W_TYPE_SIZE 32
+#define UWtype USItype
+#define UHWtype USItype
+#define UDWtype UDItype
+#endif
+
+/* Used in glibc only. */
+#ifndef attribute_hidden
+#define attribute_hidden
+#endif
+
+extern const UQItype __clz_tab[256] attribute_hidden;
+
+/* Define auxiliary asm macros.
+
+ 1) umul_ppmm(high_prod, low_prod, multiplier, multiplicand) multiplies two
+ UWtype integers MULTIPLIER and MULTIPLICAND, and generates a two UWtype
+ word product in HIGH_PROD and LOW_PROD.
+
+ 2) __umulsidi3(a,b) multiplies two UWtype integers A and B, and returns a
+ UDWtype product. This is just a variant of umul_ppmm.
+
+ 3) udiv_qrnnd(quotient, remainder, high_numerator, low_numerator,
+ denominator) divides a UDWtype, composed by the UWtype integers
+ HIGH_NUMERATOR and LOW_NUMERATOR, by DENOMINATOR and places the quotient
+ in QUOTIENT and the remainder in REMAINDER. HIGH_NUMERATOR must be less
+ than DENOMINATOR for correct operation. If, in addition, the most
+ significant bit of DENOMINATOR must be 1, then the pre-processor symbol
+ UDIV_NEEDS_NORMALIZATION is defined to 1.
+
+ 4) sdiv_qrnnd(quotient, remainder, high_numerator, low_numerator,
+ denominator). Like udiv_qrnnd but the numbers are signed. The quotient
+ is rounded towards 0.
+
+ 5) count_leading_zeros(count, x) counts the number of zero-bits from the
+ msb to the first nonzero bit in the UWtype X. This is the number of
+ steps X needs to be shifted left to set the msb. Undefined for X == 0,
+ unless the symbol COUNT_LEADING_ZEROS_0 is defined to some value.
+
+ 6) count_trailing_zeros(count, x) like count_leading_zeros, but counts
+ from the least significant end.
+
+ 7) add_ssaaaa(high_sum, low_sum, high_addend_1, low_addend_1,
+ high_addend_2, low_addend_2) adds two UWtype integers, composed by
+ HIGH_ADDEND_1 and LOW_ADDEND_1, and HIGH_ADDEND_2 and LOW_ADDEND_2
+ respectively. The result is placed in HIGH_SUM and LOW_SUM. Overflow
+ (i.e. carry out) is not stored anywhere, and is lost.
+
+ 8) sub_ddmmss(high_difference, low_difference, high_minuend, low_minuend,
+ high_subtrahend, low_subtrahend) subtracts two two-word UWtype integers,
+ composed by HIGH_MINUEND_1 and LOW_MINUEND_1, and HIGH_SUBTRAHEND_2 and
+ LOW_SUBTRAHEND_2 respectively. The result is placed in HIGH_DIFFERENCE
+ and LOW_DIFFERENCE. Overflow (i.e. carry out) is not stored anywhere,
+ and is lost.
+
+ If any of these macros are left undefined for a particular CPU,
+ C macros are used. */
+
+/* The CPUs come in alphabetical order below.
+
+ Please add support for more CPUs here, or improve the current support
+ for the CPUs below!
+ (E.g. WE32100, IBM360.) */
+
+#if defined (__GNUC__) && !defined (NO_ASM)
+
+/* We sometimes need to clobber "cc" with gcc2, but that would not be
+ understood by gcc1. Use cpp to avoid major code duplication. */
+#if __GNUC__ < 2
+#define __CLOBBER_CC
+#define __AND_CLOBBER_CC
+#else /* __GNUC__ >= 2 */
+#define __CLOBBER_CC : "cc"
+#define __AND_CLOBBER_CC , "cc"
+#endif /* __GNUC__ < 2 */
+
+#if defined (__aarch64__)
+
+#if W_TYPE_SIZE == 32
+#define count_leading_zeros(COUNT, X) ((COUNT) = __builtin_clz (X))
+#define count_trailing_zeros(COUNT, X) ((COUNT) = __builtin_ctz (X))
+#define COUNT_LEADING_ZEROS_0 32
+#endif /* W_TYPE_SIZE == 32 */
+
+#if W_TYPE_SIZE == 64
+#define count_leading_zeros(COUNT, X) ((COUNT) = __builtin_clzll (X))
+#define count_trailing_zeros(COUNT, X) ((COUNT) = __builtin_ctzll (X))
+#define COUNT_LEADING_ZEROS_0 64
+#endif /* W_TYPE_SIZE == 64 */
+
+#endif /* __aarch64__ */
+
+#if defined (__alpha) && W_TYPE_SIZE == 64
+/* There is a bug in g++ before version 5 that
+ errors on __builtin_alpha_umulh. */
+#if !defined(__cplusplus) || __GNUC__ >= 5
+#define umul_ppmm(ph, pl, m0, m1) \
+ do { \
+ UDItype __m0 = (m0), __m1 = (m1); \
+ (ph) = __builtin_alpha_umulh (__m0, __m1); \
+ (pl) = __m0 * __m1; \
+ } while (0)
+#define UMUL_TIME 46
+#endif /* !c++ */
+#ifndef LONGLONG_STANDALONE
+#define udiv_qrnnd(q, r, n1, n0, d) \
+ do { UDItype __r; \
+ (q) = __udiv_qrnnd (&__r, (n1), (n0), (d)); \
+ (r) = __r; \
+ } while (0)
+extern UDItype __udiv_qrnnd (UDItype *, UDItype, UDItype, UDItype);
+#define UDIV_TIME 220
+#endif /* LONGLONG_STANDALONE */
+#ifdef __alpha_cix__
+#define count_leading_zeros(COUNT,X) ((COUNT) = __builtin_clzl (X))
+#define count_trailing_zeros(COUNT,X) ((COUNT) = __builtin_ctzl (X))
+#define COUNT_LEADING_ZEROS_0 64
+#else
+#define count_leading_zeros(COUNT,X) \
+ do { \
+ UDItype __xr = (X), __t, __a; \
+ __t = __builtin_alpha_cmpbge (0, __xr); \
+ __a = __clz_tab[__t ^ 0xff] - 1; \
+ __t = __builtin_alpha_extbl (__xr, __a); \
+ (COUNT) = 64 - (__clz_tab[__t] + __a*8); \
+ } while (0)
+#define count_trailing_zeros(COUNT,X) \
+ do { \
+ UDItype __xr = (X), __t, __a; \
+ __t = __builtin_alpha_cmpbge (0, __xr); \
+ __t = ~__t & -~__t; \
+ __a = ((__t & 0xCC) != 0) * 2; \
+ __a += ((__t & 0xF0) != 0) * 4; \
+ __a += ((__t & 0xAA) != 0); \
+ __t = __builtin_alpha_extbl (__xr, __a); \
+ __a <<= 3; \
+ __t &= -__t; \
+ __a += ((__t & 0xCC) != 0) * 2; \
+ __a += ((__t & 0xF0) != 0) * 4; \
+ __a += ((__t & 0xAA) != 0); \
+ (COUNT) = __a; \
+ } while (0)
+#endif /* __alpha_cix__ */
+#endif /* __alpha */
+
+#if defined (__arc__) && W_TYPE_SIZE == 32
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+ __asm__ ("add.f %1, %4, %5\n\tadc %0, %2, %3" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "%r" ((USItype) (ah)), \
+ "rIJ" ((USItype) (bh)), \
+ "%r" ((USItype) (al)), \
+ "rIJ" ((USItype) (bl)))
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+ __asm__ ("sub.f %1, %4, %5\n\tsbc %0, %2, %3" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "r" ((USItype) (ah)), \
+ "rIJ" ((USItype) (bh)), \
+ "r" ((USItype) (al)), \
+ "rIJ" ((USItype) (bl)))
+
+#define __umulsidi3(u,v) ((UDItype)(USItype)u*(USItype)v)
+#ifdef __ARC_NORM__
+#define count_leading_zeros(count, x) \
+ do \
+ { \
+ SItype c_; \
+ \
+ __asm__ ("norm.f\t%0,%1\n\tmov.mi\t%0,-1" : "=r" (c_) : "r" (x) : "cc");\
+ (count) = c_ + 1; \
+ } \
+ while (0)
+#define COUNT_LEADING_ZEROS_0 32
+#endif
+#endif
+
+#if defined (__arm__) && (defined (__thumb2__) || !defined (__thumb__)) \
+ && W_TYPE_SIZE == 32
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+ __asm__ ("adds %1, %4, %5\n\tadc %0, %2, %3" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "%r" ((USItype) (ah)), \
+ "rI" ((USItype) (bh)), \
+ "%r" ((USItype) (al)), \
+ "rI" ((USItype) (bl)) __CLOBBER_CC)
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+ __asm__ ("subs %1, %4, %5\n\tsbc %0, %2, %3" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "r" ((USItype) (ah)), \
+ "rI" ((USItype) (bh)), \
+ "r" ((USItype) (al)), \
+ "rI" ((USItype) (bl)) __CLOBBER_CC)
+# if defined(__ARM_ARCH_2__) || defined(__ARM_ARCH_2A__) \
+ || defined(__ARM_ARCH_3__)
+# define umul_ppmm(xh, xl, a, b) \
+ do { \
+ register USItype __t0, __t1, __t2; \
+ __asm__ ("%@ Inlined umul_ppmm\n" \
+ " mov %2, %5, lsr #16\n" \
+ " mov %0, %6, lsr #16\n" \
+ " bic %3, %5, %2, lsl #16\n" \
+ " bic %4, %6, %0, lsl #16\n" \
+ " mul %1, %3, %4\n" \
+ " mul %4, %2, %4\n" \
+ " mul %3, %0, %3\n" \
+ " mul %0, %2, %0\n" \
+ " adds %3, %4, %3\n" \
+ " addcs %0, %0, #65536\n" \
+ " adds %1, %1, %3, lsl #16\n" \
+ " adc %0, %0, %3, lsr #16" \
+ : "=&r" ((USItype) (xh)), \
+ "=r" ((USItype) (xl)), \
+ "=&r" (__t0), "=&r" (__t1), "=r" (__t2) \
+ : "r" ((USItype) (a)), \
+ "r" ((USItype) (b)) __CLOBBER_CC ); \
+ } while (0)
+# define UMUL_TIME 20
+# else
+# define umul_ppmm(xh, xl, a, b) \
+ do { \
+ /* Generate umull, under compiler control. */ \
+ register UDItype __t0 = (UDItype)(USItype)(a) * (USItype)(b); \
+ (xl) = (USItype)__t0; \
+ (xh) = (USItype)(__t0 >> 32); \
+ } while (0)
+# define UMUL_TIME 3
+# endif
+# define UDIV_TIME 100
+#endif /* __arm__ */
+
+#if defined(__arm__)
+/* Let gcc decide how best to implement count_leading_zeros. */
+#define count_leading_zeros(COUNT,X) ((COUNT) = __builtin_clz (X))
+#define count_trailing_zeros(COUNT,X) ((COUNT) = __builtin_ctz (X))
+#define COUNT_LEADING_ZEROS_0 32
+#endif
+
+#if defined (__AVR__)
+
+#if W_TYPE_SIZE == 16
+#define count_leading_zeros(COUNT,X) ((COUNT) = __builtin_clz (X))
+#define count_trailing_zeros(COUNT,X) ((COUNT) = __builtin_ctz (X))
+#define COUNT_LEADING_ZEROS_0 16
+#endif /* W_TYPE_SIZE == 16 */
+
+#if W_TYPE_SIZE == 32
+#define count_leading_zeros(COUNT,X) ((COUNT) = __builtin_clzl (X))
+#define count_trailing_zeros(COUNT,X) ((COUNT) = __builtin_ctzl (X))
+#define COUNT_LEADING_ZEROS_0 32
+#endif /* W_TYPE_SIZE == 32 */
+
+#if W_TYPE_SIZE == 64
+#define count_leading_zeros(COUNT,X) ((COUNT) = __builtin_clzll (X))
+#define count_trailing_zeros(COUNT,X) ((COUNT) = __builtin_ctzll (X))
+#define COUNT_LEADING_ZEROS_0 64
+#endif /* W_TYPE_SIZE == 64 */
+
+#endif /* defined (__AVR__) */
+
+#if defined (__CRIS__)
+
+#if __CRIS_arch_version >= 3
+#define count_leading_zeros(COUNT, X) ((COUNT) = __builtin_clz (X))
+#define COUNT_LEADING_ZEROS_0 32
+#endif /* __CRIS_arch_version >= 3 */
+
+#if __CRIS_arch_version >= 8
+#define count_trailing_zeros(COUNT, X) ((COUNT) = __builtin_ctz (X))
+#endif /* __CRIS_arch_version >= 8 */
+
+#if __CRIS_arch_version >= 10
+#define __umulsidi3(u,v) ((UDItype)(USItype) (u) * (UDItype)(USItype) (v))
+#else
+#define __umulsidi3 __umulsidi3
+extern UDItype __umulsidi3 (USItype, USItype);
+#endif /* __CRIS_arch_version >= 10 */
+
+#define umul_ppmm(w1, w0, u, v) \
+ do { \
+ UDItype __x = __umulsidi3 (u, v); \
+ (w0) = (USItype) (__x); \
+ (w1) = (USItype) (__x >> 32); \
+ } while (0)
+
+/* FIXME: defining add_ssaaaa and sub_ddmmss should be advantageous for
+ DFmode ("double" intrinsics, avoiding two of the three insns handling
+ carry), but defining them as open-code C composing and doing the
+ operation in DImode (UDImode) shows that the DImode needs work:
+ register pressure from requiring neighboring registers and the
+ traffic to and from them come to dominate, in the 4.7 series. */
+
+#endif /* defined (__CRIS__) */
+
+#if defined (__hppa) && W_TYPE_SIZE == 32
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+ __asm__ ("add %4,%5,%1\n\taddc %2,%3,%0" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "%rM" ((USItype) (ah)), \
+ "rM" ((USItype) (bh)), \
+ "%rM" ((USItype) (al)), \
+ "rM" ((USItype) (bl)))
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+ __asm__ ("sub %4,%5,%1\n\tsubb %2,%3,%0" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "rM" ((USItype) (ah)), \
+ "rM" ((USItype) (bh)), \
+ "rM" ((USItype) (al)), \
+ "rM" ((USItype) (bl)))
+#if defined (_PA_RISC1_1)
+#define umul_ppmm(w1, w0, u, v) \
+ do { \
+ union \
+ { \
+ UDItype __f; \
+ struct {USItype __w1, __w0;} __w1w0; \
+ } __t; \
+ __asm__ ("xmpyu %1,%2,%0" \
+ : "=x" (__t.__f) \
+ : "x" ((USItype) (u)), \
+ "x" ((USItype) (v))); \
+ (w1) = __t.__w1w0.__w1; \
+ (w0) = __t.__w1w0.__w0; \
+ } while (0)
+#define UMUL_TIME 8
+#else
+#define UMUL_TIME 30
+#endif
+#define UDIV_TIME 40
+#define count_leading_zeros(count, x) \
+ do { \
+ USItype __tmp; \
+ __asm__ ( \
+ "ldi 1,%0\n" \
+" extru,= %1,15,16,%%r0 ; Bits 31..16 zero?\n" \
+" extru,tr %1,15,16,%1 ; No. Shift down, skip add.\n"\
+" ldo 16(%0),%0 ; Yes. Perform add.\n" \
+" extru,= %1,23,8,%%r0 ; Bits 15..8 zero?\n" \
+" extru,tr %1,23,8,%1 ; No. Shift down, skip add.\n"\
+" ldo 8(%0),%0 ; Yes. Perform add.\n" \
+" extru,= %1,27,4,%%r0 ; Bits 7..4 zero?\n" \
+" extru,tr %1,27,4,%1 ; No. Shift down, skip add.\n"\
+" ldo 4(%0),%0 ; Yes. Perform add.\n" \
+" extru,= %1,29,2,%%r0 ; Bits 3..2 zero?\n" \
+" extru,tr %1,29,2,%1 ; No. Shift down, skip add.\n"\
+" ldo 2(%0),%0 ; Yes. Perform add.\n" \
+" extru %1,30,1,%1 ; Extract bit 1.\n" \
+" sub %0,%1,%0 ; Subtract it.\n" \
+ : "=r" (count), "=r" (__tmp) : "1" (x)); \
+ } while (0)
+#endif
+
+#if (defined (__i370__) || defined (__s390__) || defined (__mvs__)) && W_TYPE_SIZE == 32
+#if !defined (__zarch__)
+#define smul_ppmm(xh, xl, m0, m1) \
+ do { \
+ union {DItype __ll; \
+ struct {USItype __h, __l;} __i; \
+ } __x; \
+ __asm__ ("lr %N0,%1\n\tmr %0,%2" \
+ : "=&r" (__x.__ll) \
+ : "r" (m0), "r" (m1)); \
+ (xh) = __x.__i.__h; (xl) = __x.__i.__l; \
+ } while (0)
+#define sdiv_qrnnd(q, r, n1, n0, d) \
+ do { \
+ union {DItype __ll; \
+ struct {USItype __h, __l;} __i; \
+ } __x; \
+ __x.__i.__h = n1; __x.__i.__l = n0; \
+ __asm__ ("dr %0,%2" \
+ : "=r" (__x.__ll) \
+ : "0" (__x.__ll), "r" (d)); \
+ (q) = __x.__i.__l; (r) = __x.__i.__h; \
+ } while (0)
+#else
+#define smul_ppmm(xh, xl, m0, m1) \
+ do { \
+ register SItype __r0 __asm__ ("0"); \
+ register SItype __r1 __asm__ ("1") = (m0); \
+ \
+ __asm__ ("mr\t%%r0,%3" \
+ : "=r" (__r0), "=r" (__r1) \
+ : "r" (__r1), "r" (m1)); \
+ (xh) = __r0; (xl) = __r1; \
+ } while (0)
+
+#define sdiv_qrnnd(q, r, n1, n0, d) \
+ do { \
+ register SItype __r0 __asm__ ("0") = (n1); \
+ register SItype __r1 __asm__ ("1") = (n0); \
+ \
+ __asm__ ("dr\t%%r0,%4" \
+ : "=r" (__r0), "=r" (__r1) \
+ : "r" (__r0), "r" (__r1), "r" (d)); \
+ (q) = __r1; (r) = __r0; \
+ } while (0)
+#endif /* __zarch__ */
+#endif
+
+#if (defined (__i386__) || defined (__i486__)) && W_TYPE_SIZE == 32
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+ __asm__ ("add{l} {%5,%1|%1,%5}\n\tadc{l} {%3,%0|%0,%3}" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "%0" ((USItype) (ah)), \
+ "g" ((USItype) (bh)), \
+ "%1" ((USItype) (al)), \
+ "g" ((USItype) (bl)))
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+ __asm__ ("sub{l} {%5,%1|%1,%5}\n\tsbb{l} {%3,%0|%0,%3}" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "0" ((USItype) (ah)), \
+ "g" ((USItype) (bh)), \
+ "1" ((USItype) (al)), \
+ "g" ((USItype) (bl)))
+#define umul_ppmm(w1, w0, u, v) \
+ __asm__ ("mul{l} %3" \
+ : "=a" ((USItype) (w0)), \
+ "=d" ((USItype) (w1)) \
+ : "%0" ((USItype) (u)), \
+ "rm" ((USItype) (v)))
+#define udiv_qrnnd(q, r, n1, n0, dv) \
+ __asm__ ("div{l} %4" \
+ : "=a" ((USItype) (q)), \
+ "=d" ((USItype) (r)) \
+ : "0" ((USItype) (n0)), \
+ "1" ((USItype) (n1)), \
+ "rm" ((USItype) (dv)))
+#define count_leading_zeros(count, x) ((count) = __builtin_clz (x))
+#define count_trailing_zeros(count, x) ((count) = __builtin_ctz (x))
+#define UMUL_TIME 40
+#define UDIV_TIME 40
+#endif /* 80x86 */
+
+#if defined (__x86_64__) && W_TYPE_SIZE == 64
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+ __asm__ ("add{q} {%5,%1|%1,%5}\n\tadc{q} {%3,%0|%0,%3}" \
+ : "=r" ((UDItype) (sh)), \
+ "=&r" ((UDItype) (sl)) \
+ : "%0" ((UDItype) (ah)), \
+ "rme" ((UDItype) (bh)), \
+ "%1" ((UDItype) (al)), \
+ "rme" ((UDItype) (bl)))
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+ __asm__ ("sub{q} {%5,%1|%1,%5}\n\tsbb{q} {%3,%0|%0,%3}" \
+ : "=r" ((UDItype) (sh)), \
+ "=&r" ((UDItype) (sl)) \
+ : "0" ((UDItype) (ah)), \
+ "rme" ((UDItype) (bh)), \
+ "1" ((UDItype) (al)), \
+ "rme" ((UDItype) (bl)))
+#define umul_ppmm(w1, w0, u, v) \
+ __asm__ ("mul{q} %3" \
+ : "=a" ((UDItype) (w0)), \
+ "=d" ((UDItype) (w1)) \
+ : "%0" ((UDItype) (u)), \
+ "rm" ((UDItype) (v)))
+#define udiv_qrnnd(q, r, n1, n0, dv) \
+ __asm__ ("div{q} %4" \
+ : "=a" ((UDItype) (q)), \
+ "=d" ((UDItype) (r)) \
+ : "0" ((UDItype) (n0)), \
+ "1" ((UDItype) (n1)), \
+ "rm" ((UDItype) (dv)))
+#define count_leading_zeros(count, x) ((count) = __builtin_clzll (x))
+#define count_trailing_zeros(count, x) ((count) = __builtin_ctzll (x))
+#define UMUL_TIME 40
+#define UDIV_TIME 40
+#endif /* x86_64 */
+
+#if defined (__i960__) && W_TYPE_SIZE == 32
+#define umul_ppmm(w1, w0, u, v) \
+ ({union {UDItype __ll; \
+ struct {USItype __l, __h;} __i; \
+ } __xx; \
+ __asm__ ("emul %2,%1,%0" \
+ : "=d" (__xx.__ll) \
+ : "%dI" ((USItype) (u)), \
+ "dI" ((USItype) (v))); \
+ (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;})
+#define __umulsidi3(u, v) \
+ ({UDItype __w; \
+ __asm__ ("emul %2,%1,%0" \
+ : "=d" (__w) \
+ : "%dI" ((USItype) (u)), \
+ "dI" ((USItype) (v))); \
+ __w; })
+#endif /* __i960__ */
+
+#if defined (__ia64) && W_TYPE_SIZE == 64
+/* This form encourages gcc (pre-release 3.4 at least) to emit predicated
+ "sub r=r,r" and "sub r=r,r,1", giving a 2 cycle latency. The generic
+ code using "al<bl" arithmetically comes out making an actual 0 or 1 in a
+ register, which takes an extra cycle. */
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+ do { \
+ UWtype __x; \
+ __x = (al) - (bl); \
+ if ((al) < (bl)) \
+ (sh) = (ah) - (bh) - 1; \
+ else \
+ (sh) = (ah) - (bh); \
+ (sl) = __x; \
+ } while (0)
+
+/* Do both product parts in assembly, since that gives better code with
+ all gcc versions. Some callers will just use the upper part, and in
+ that situation we waste an instruction, but not any cycles. */
+#define umul_ppmm(ph, pl, m0, m1) \
+ __asm__ ("xma.hu %0 = %2, %3, f0\n\txma.l %1 = %2, %3, f0" \
+ : "=&f" (ph), "=f" (pl) \
+ : "f" (m0), "f" (m1))
+#define count_leading_zeros(count, x) \
+ do { \
+ UWtype _x = (x), _y, _a, _c; \
+ __asm__ ("mux1 %0 = %1, @rev" : "=r" (_y) : "r" (_x)); \
+ __asm__ ("czx1.l %0 = %1" : "=r" (_a) : "r" (-_y | _y)); \
+ _c = (_a - 1) << 3; \
+ _x >>= _c; \
+ if (_x >= 1 << 4) \
+ _x >>= 4, _c += 4; \
+ if (_x >= 1 << 2) \
+ _x >>= 2, _c += 2; \
+ _c += _x >> 1; \
+ (count) = W_TYPE_SIZE - 1 - _c; \
+ } while (0)
+/* similar to what gcc does for __builtin_ffs, but 0 based rather than 1
+ based, and we don't need a special case for x==0 here */
+#define count_trailing_zeros(count, x) \
+ do { \
+ UWtype __ctz_x = (x); \
+ __asm__ ("popcnt %0 = %1" \
+ : "=r" (count) \
+ : "r" ((__ctz_x-1) & ~__ctz_x)); \
+ } while (0)
+#define UMUL_TIME 14
+#endif
+
+#if defined (__M32R__) && W_TYPE_SIZE == 32
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+ /* The cmp clears the condition bit. */ \
+ __asm__ ("cmp %0,%0\n\taddx %1,%5\n\taddx %0,%3" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "0" ((USItype) (ah)), \
+ "r" ((USItype) (bh)), \
+ "1" ((USItype) (al)), \
+ "r" ((USItype) (bl)) \
+ : "cbit")
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+ /* The cmp clears the condition bit. */ \
+ __asm__ ("cmp %0,%0\n\tsubx %1,%5\n\tsubx %0,%3" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "0" ((USItype) (ah)), \
+ "r" ((USItype) (bh)), \
+ "1" ((USItype) (al)), \
+ "r" ((USItype) (bl)) \
+ : "cbit")
+#endif /* __M32R__ */
+
+#if defined (__mc68000__) && W_TYPE_SIZE == 32
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+ __asm__ ("add%.l %5,%1\n\taddx%.l %3,%0" \
+ : "=d" ((USItype) (sh)), \
+ "=&d" ((USItype) (sl)) \
+ : "%0" ((USItype) (ah)), \
+ "d" ((USItype) (bh)), \
+ "%1" ((USItype) (al)), \
+ "g" ((USItype) (bl)))
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+ __asm__ ("sub%.l %5,%1\n\tsubx%.l %3,%0" \
+ : "=d" ((USItype) (sh)), \
+ "=&d" ((USItype) (sl)) \
+ : "0" ((USItype) (ah)), \
+ "d" ((USItype) (bh)), \
+ "1" ((USItype) (al)), \
+ "g" ((USItype) (bl)))
+
+/* The '020, '030, '040, '060 and CPU32 have 32x32->64 and 64/32->32q-32r. */
+#if (defined (__mc68020__) && !defined (__mc68060__))
+#define umul_ppmm(w1, w0, u, v) \
+ __asm__ ("mulu%.l %3,%1:%0" \
+ : "=d" ((USItype) (w0)), \
+ "=d" ((USItype) (w1)) \
+ : "%0" ((USItype) (u)), \
+ "dmi" ((USItype) (v)))
+#define UMUL_TIME 45
+#define udiv_qrnnd(q, r, n1, n0, d) \
+ __asm__ ("divu%.l %4,%1:%0" \
+ : "=d" ((USItype) (q)), \
+ "=d" ((USItype) (r)) \
+ : "0" ((USItype) (n0)), \
+ "1" ((USItype) (n1)), \
+ "dmi" ((USItype) (d)))
+#define UDIV_TIME 90
+#define sdiv_qrnnd(q, r, n1, n0, d) \
+ __asm__ ("divs%.l %4,%1:%0" \
+ : "=d" ((USItype) (q)), \
+ "=d" ((USItype) (r)) \
+ : "0" ((USItype) (n0)), \
+ "1" ((USItype) (n1)), \
+ "dmi" ((USItype) (d)))
+
+#elif defined (__mcoldfire__) /* not mc68020 */
+
+#define umul_ppmm(xh, xl, a, b) \
+ __asm__ ("| Inlined umul_ppmm\n" \
+ " move%.l %2,%/d0\n" \
+ " move%.l %3,%/d1\n" \
+ " move%.l %/d0,%/d2\n" \
+ " swap %/d0\n" \
+ " move%.l %/d1,%/d3\n" \
+ " swap %/d1\n" \
+ " move%.w %/d2,%/d4\n" \
+ " mulu %/d3,%/d4\n" \
+ " mulu %/d1,%/d2\n" \
+ " mulu %/d0,%/d3\n" \
+ " mulu %/d0,%/d1\n" \
+ " move%.l %/d4,%/d0\n" \
+ " clr%.w %/d0\n" \
+ " swap %/d0\n" \
+ " add%.l %/d0,%/d2\n" \
+ " add%.l %/d3,%/d2\n" \
+ " jcc 1f\n" \
+ " add%.l %#65536,%/d1\n" \
+ "1: swap %/d2\n" \
+ " moveq %#0,%/d0\n" \
+ " move%.w %/d2,%/d0\n" \
+ " move%.w %/d4,%/d2\n" \
+ " move%.l %/d2,%1\n" \
+ " add%.l %/d1,%/d0\n" \
+ " move%.l %/d0,%0" \
+ : "=g" ((USItype) (xh)), \
+ "=g" ((USItype) (xl)) \
+ : "g" ((USItype) (a)), \
+ "g" ((USItype) (b)) \
+ : "d0", "d1", "d2", "d3", "d4")
+#define UMUL_TIME 100
+#define UDIV_TIME 400
+#else /* not ColdFire */
+/* %/ inserts REGISTER_PREFIX, %# inserts IMMEDIATE_PREFIX. */
+#define umul_ppmm(xh, xl, a, b) \
+ __asm__ ("| Inlined umul_ppmm\n" \
+ " move%.l %2,%/d0\n" \
+ " move%.l %3,%/d1\n" \
+ " move%.l %/d0,%/d2\n" \
+ " swap %/d0\n" \
+ " move%.l %/d1,%/d3\n" \
+ " swap %/d1\n" \
+ " move%.w %/d2,%/d4\n" \
+ " mulu %/d3,%/d4\n" \
+ " mulu %/d1,%/d2\n" \
+ " mulu %/d0,%/d3\n" \
+ " mulu %/d0,%/d1\n" \
+ " move%.l %/d4,%/d0\n" \
+ " eor%.w %/d0,%/d0\n" \
+ " swap %/d0\n" \
+ " add%.l %/d0,%/d2\n" \
+ " add%.l %/d3,%/d2\n" \
+ " jcc 1f\n" \
+ " add%.l %#65536,%/d1\n" \
+ "1: swap %/d2\n" \
+ " moveq %#0,%/d0\n" \
+ " move%.w %/d2,%/d0\n" \
+ " move%.w %/d4,%/d2\n" \
+ " move%.l %/d2,%1\n" \
+ " add%.l %/d1,%/d0\n" \
+ " move%.l %/d0,%0" \
+ : "=g" ((USItype) (xh)), \
+ "=g" ((USItype) (xl)) \
+ : "g" ((USItype) (a)), \
+ "g" ((USItype) (b)) \
+ : "d0", "d1", "d2", "d3", "d4")
+#define UMUL_TIME 100
+#define UDIV_TIME 400
+
+#endif /* not mc68020 */
+
+/* The '020, '030, '040 and '060 have bitfield insns.
+ cpu32 disguises as a 68020, but lacks them. */
+#if defined (__mc68020__) && !defined (__mcpu32__)
+#define count_leading_zeros(count, x) \
+ __asm__ ("bfffo %1{%b2:%b2},%0" \
+ : "=d" ((USItype) (count)) \
+ : "od" ((USItype) (x)), "n" (0))
+/* Some ColdFire architectures have a ff1 instruction supported via
+ __builtin_clz. */
+#elif defined (__mcfisaaplus__) || defined (__mcfisac__)
+#define count_leading_zeros(count,x) ((count) = __builtin_clz (x))
+#define COUNT_LEADING_ZEROS_0 32
+#endif
+#endif /* mc68000 */
+
+#if defined (__m88000__) && W_TYPE_SIZE == 32
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+ __asm__ ("addu.co %1,%r4,%r5\n\taddu.ci %0,%r2,%r3" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "%rJ" ((USItype) (ah)), \
+ "rJ" ((USItype) (bh)), \
+ "%rJ" ((USItype) (al)), \
+ "rJ" ((USItype) (bl)))
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+ __asm__ ("subu.co %1,%r4,%r5\n\tsubu.ci %0,%r2,%r3" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "rJ" ((USItype) (ah)), \
+ "rJ" ((USItype) (bh)), \
+ "rJ" ((USItype) (al)), \
+ "rJ" ((USItype) (bl)))
+#define count_leading_zeros(count, x) \
+ do { \
+ USItype __cbtmp; \
+ __asm__ ("ff1 %0,%1" \
+ : "=r" (__cbtmp) \
+ : "r" ((USItype) (x))); \
+ (count) = __cbtmp ^ 31; \
+ } while (0)
+#define COUNT_LEADING_ZEROS_0 63 /* sic */
+#if defined (__mc88110__)
+#define umul_ppmm(wh, wl, u, v) \
+ do { \
+ union {UDItype __ll; \
+ struct {USItype __h, __l;} __i; \
+ } __xx; \
+ __asm__ ("mulu.d %0,%1,%2" \
+ : "=r" (__xx.__ll) \
+ : "r" ((USItype) (u)), \
+ "r" ((USItype) (v))); \
+ (wh) = __xx.__i.__h; \
+ (wl) = __xx.__i.__l; \
+ } while (0)
+#define udiv_qrnnd(q, r, n1, n0, d) \
+ ({union {UDItype __ll; \
+ struct {USItype __h, __l;} __i; \
+ } __xx; \
+ USItype __q; \
+ __xx.__i.__h = (n1); __xx.__i.__l = (n0); \
+ __asm__ ("divu.d %0,%1,%2" \
+ : "=r" (__q) \
+ : "r" (__xx.__ll), \
+ "r" ((USItype) (d))); \
+ (r) = (n0) - __q * (d); (q) = __q; })
+#define UMUL_TIME 5
+#define UDIV_TIME 25
+#else
+#define UMUL_TIME 17
+#define UDIV_TIME 150
+#endif /* __mc88110__ */
+#endif /* __m88000__ */
+
+#if defined (__mn10300__)
+# if defined (__AM33__)
+# define count_leading_zeros(COUNT,X) ((COUNT) = __builtin_clz (X))
+# define umul_ppmm(w1, w0, u, v) \
+ asm("mulu %3,%2,%1,%0" : "=r"(w0), "=r"(w1) : "r"(u), "r"(v))
+# define smul_ppmm(w1, w0, u, v) \
+ asm("mul %3,%2,%1,%0" : "=r"(w0), "=r"(w1) : "r"(u), "r"(v))
+# else
+# define umul_ppmm(w1, w0, u, v) \
+ asm("nop; nop; mulu %3,%0" : "=d"(w0), "=z"(w1) : "%0"(u), "d"(v))
+# define smul_ppmm(w1, w0, u, v) \
+ asm("nop; nop; mul %3,%0" : "=d"(w0), "=z"(w1) : "%0"(u), "d"(v))
+# endif
+# define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+ do { \
+ DWunion __s, __a, __b; \
+ __a.s.low = (al); __a.s.high = (ah); \
+ __b.s.low = (bl); __b.s.high = (bh); \
+ __s.ll = __a.ll + __b.ll; \
+ (sl) = __s.s.low; (sh) = __s.s.high; \
+ } while (0)
+# define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+ do { \
+ DWunion __s, __a, __b; \
+ __a.s.low = (al); __a.s.high = (ah); \
+ __b.s.low = (bl); __b.s.high = (bh); \
+ __s.ll = __a.ll - __b.ll; \
+ (sl) = __s.s.low; (sh) = __s.s.high; \
+ } while (0)
+# define udiv_qrnnd(q, r, nh, nl, d) \
+ asm("divu %2,%0" : "=D"(q), "=z"(r) : "D"(d), "0"(nl), "1"(nh))
+# define sdiv_qrnnd(q, r, nh, nl, d) \
+ asm("div %2,%0" : "=D"(q), "=z"(r) : "D"(d), "0"(nl), "1"(nh))
+# define UMUL_TIME 3
+# define UDIV_TIME 38
+#endif
+
+#if defined (__mips__) && W_TYPE_SIZE == 32
+#define umul_ppmm(w1, w0, u, v) \
+ do { \
+ UDItype __x = (UDItype) (USItype) (u) * (USItype) (v); \
+ (w1) = (USItype) (__x >> 32); \
+ (w0) = (USItype) (__x); \
+ } while (0)
+#define UMUL_TIME 10
+#define UDIV_TIME 100
+
+#if (__mips == 32 || __mips == 64) && ! defined (__mips16)
+#define count_leading_zeros(COUNT,X) ((COUNT) = __builtin_clz (X))
+#define COUNT_LEADING_ZEROS_0 32
+#endif
+#endif /* __mips__ */
+
+#if defined (__ns32000__) && W_TYPE_SIZE == 32
+#define umul_ppmm(w1, w0, u, v) \
+ ({union {UDItype __ll; \
+ struct {USItype __l, __h;} __i; \
+ } __xx; \
+ __asm__ ("meid %2,%0" \
+ : "=g" (__xx.__ll) \
+ : "%0" ((USItype) (u)), \
+ "g" ((USItype) (v))); \
+ (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;})
+#define __umulsidi3(u, v) \
+ ({UDItype __w; \
+ __asm__ ("meid %2,%0" \
+ : "=g" (__w) \
+ : "%0" ((USItype) (u)), \
+ "g" ((USItype) (v))); \
+ __w; })
+#define udiv_qrnnd(q, r, n1, n0, d) \
+ ({union {UDItype __ll; \
+ struct {USItype __l, __h;} __i; \
+ } __xx; \
+ __xx.__i.__h = (n1); __xx.__i.__l = (n0); \
+ __asm__ ("deid %2,%0" \
+ : "=g" (__xx.__ll) \
+ : "0" (__xx.__ll), \
+ "g" ((USItype) (d))); \
+ (r) = __xx.__i.__l; (q) = __xx.__i.__h; })
+#define count_trailing_zeros(count,x) \
+ do { \
+ __asm__ ("ffsd %2,%0" \
+ : "=r" ((USItype) (count)) \
+ : "0" ((USItype) 0), \
+ "r" ((USItype) (x))); \
+ } while (0)
+#endif /* __ns32000__ */
+
+/* FIXME: We should test _IBMR2 here when we add assembly support for the
+ system vendor compilers.
+ FIXME: What's needed for gcc PowerPC VxWorks? __vxworks__ is not good
+ enough, since that hits ARM and m68k too. */
+#if (defined (_ARCH_PPC) /* AIX */ \
+ || defined (__powerpc__) /* gcc */ \
+ || defined (__POWERPC__) /* BEOS */ \
+ || defined (__ppc__) /* Darwin */ \
+ || (defined (PPC) && ! defined (CPU_FAMILY)) /* gcc 2.7.x GNU&SysV */ \
+ || (defined (PPC) && defined (CPU_FAMILY) /* VxWorks */ \
+ && CPU_FAMILY == PPC) \
+ ) && W_TYPE_SIZE == 32
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+ do { \
+ if (__builtin_constant_p (bh) && (bh) == 0) \
+ __asm__ ("add%I4c %1,%3,%4\n\taddze %0,%2" \
+ : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl));\
+ else if (__builtin_constant_p (bh) && (bh) == ~(USItype) 0) \
+ __asm__ ("add%I4c %1,%3,%4\n\taddme %0,%2" \
+ : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl));\
+ else \
+ __asm__ ("add%I5c %1,%4,%5\n\tadde %0,%2,%3" \
+ : "=r" (sh), "=&r" (sl) \
+ : "%r" (ah), "r" (bh), "%r" (al), "rI" (bl)); \
+ } while (0)
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+ do { \
+ if (__builtin_constant_p (ah) && (ah) == 0) \
+ __asm__ ("subf%I3c %1,%4,%3\n\tsubfze %0,%2" \
+ : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\
+ else if (__builtin_constant_p (ah) && (ah) == ~(USItype) 0) \
+ __asm__ ("subf%I3c %1,%4,%3\n\tsubfme %0,%2" \
+ : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\
+ else if (__builtin_constant_p (bh) && (bh) == 0) \
+ __asm__ ("subf%I3c %1,%4,%3\n\taddme %0,%2" \
+ : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\
+ else if (__builtin_constant_p (bh) && (bh) == ~(USItype) 0) \
+ __asm__ ("subf%I3c %1,%4,%3\n\taddze %0,%2" \
+ : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\
+ else \
+ __asm__ ("subf%I4c %1,%5,%4\n\tsubfe %0,%3,%2" \
+ : "=r" (sh), "=&r" (sl) \
+ : "r" (ah), "r" (bh), "rI" (al), "r" (bl)); \
+ } while (0)
+#define count_leading_zeros(count, x) \
+ __asm__ ("cntlzw %0,%1" : "=r" (count) : "r" (x))
+#define COUNT_LEADING_ZEROS_0 32
+#if defined (_ARCH_PPC) || defined (__powerpc__) || defined (__POWERPC__) \
+ || defined (__ppc__) \
+ || (defined (PPC) && ! defined (CPU_FAMILY)) /* gcc 2.7.x GNU&SysV */ \
+ || (defined (PPC) && defined (CPU_FAMILY) /* VxWorks */ \
+ && CPU_FAMILY == PPC)
+#define umul_ppmm(ph, pl, m0, m1) \
+ do { \
+ USItype __m0 = (m0), __m1 = (m1); \
+ __asm__ ("mulhwu %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1)); \
+ (pl) = __m0 * __m1; \
+ } while (0)
+#define UMUL_TIME 15
+#define smul_ppmm(ph, pl, m0, m1) \
+ do { \
+ SItype __m0 = (m0), __m1 = (m1); \
+ __asm__ ("mulhw %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1)); \
+ (pl) = __m0 * __m1; \
+ } while (0)
+#define SMUL_TIME 14
+#define UDIV_TIME 120
+#endif
+#endif /* 32-bit POWER architecture variants. */
+
+/* We should test _IBMR2 here when we add assembly support for the system
+ vendor compilers. */
+#if (defined (_ARCH_PPC64) || defined (__powerpc64__)) && W_TYPE_SIZE == 64
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+ do { \
+ if (__builtin_constant_p (bh) && (bh) == 0) \
+ __asm__ ("add%I4c %1,%3,%4\n\taddze %0,%2" \
+ : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl));\
+ else if (__builtin_constant_p (bh) && (bh) == ~(UDItype) 0) \
+ __asm__ ("add%I4c %1,%3,%4\n\taddme %0,%2" \
+ : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl));\
+ else \
+ __asm__ ("add%I5c %1,%4,%5\n\tadde %0,%2,%3" \
+ : "=r" (sh), "=&r" (sl) \
+ : "%r" (ah), "r" (bh), "%r" (al), "rI" (bl)); \
+ } while (0)
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+ do { \
+ if (__builtin_constant_p (ah) && (ah) == 0) \
+ __asm__ ("subf%I3c %1,%4,%3\n\tsubfze %0,%2" \
+ : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\
+ else if (__builtin_constant_p (ah) && (ah) == ~(UDItype) 0) \
+ __asm__ ("subf%I3c %1,%4,%3\n\tsubfme %0,%2" \
+ : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\
+ else if (__builtin_constant_p (bh) && (bh) == 0) \
+ __asm__ ("subf%I3c %1,%4,%3\n\taddme %0,%2" \
+ : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\
+ else if (__builtin_constant_p (bh) && (bh) == ~(UDItype) 0) \
+ __asm__ ("subf%I3c %1,%4,%3\n\taddze %0,%2" \
+ : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\
+ else \
+ __asm__ ("subf%I4c %1,%5,%4\n\tsubfe %0,%3,%2" \
+ : "=r" (sh), "=&r" (sl) \
+ : "r" (ah), "r" (bh), "rI" (al), "r" (bl)); \
+ } while (0)
+#define count_leading_zeros(count, x) \
+ __asm__ ("cntlzd %0,%1" : "=r" (count) : "r" (x))
+#define COUNT_LEADING_ZEROS_0 64
+#define umul_ppmm(ph, pl, m0, m1) \
+ do { \
+ UDItype __m0 = (m0), __m1 = (m1); \
+ __asm__ ("mulhdu %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1)); \
+ (pl) = __m0 * __m1; \
+ } while (0)
+#define UMUL_TIME 15
+#define smul_ppmm(ph, pl, m0, m1) \
+ do { \
+ DItype __m0 = (m0), __m1 = (m1); \
+ __asm__ ("mulhd %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1)); \
+ (pl) = __m0 * __m1; \
+ } while (0)
+#define SMUL_TIME 14 /* ??? */
+#define UDIV_TIME 120 /* ??? */
+#endif /* 64-bit PowerPC. */
+
+#if defined (__ibm032__) /* RT/ROMP */ && W_TYPE_SIZE == 32
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+ __asm__ ("a %1,%5\n\tae %0,%3" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "%0" ((USItype) (ah)), \
+ "r" ((USItype) (bh)), \
+ "%1" ((USItype) (al)), \
+ "r" ((USItype) (bl)))
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+ __asm__ ("s %1,%5\n\tse %0,%3" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "0" ((USItype) (ah)), \
+ "r" ((USItype) (bh)), \
+ "1" ((USItype) (al)), \
+ "r" ((USItype) (bl)))
+#define umul_ppmm(ph, pl, m0, m1) \
+ do { \
+ USItype __m0 = (m0), __m1 = (m1); \
+ __asm__ ( \
+ "s r2,r2\n" \
+" mts r10,%2\n" \
+" m r2,%3\n" \
+" m r2,%3\n" \
+" m r2,%3\n" \
+" m r2,%3\n" \
+" m r2,%3\n" \
+" m r2,%3\n" \
+" m r2,%3\n" \
+" m r2,%3\n" \
+" m r2,%3\n" \
+" m r2,%3\n" \
+" m r2,%3\n" \
+" m r2,%3\n" \
+" m r2,%3\n" \
+" m r2,%3\n" \
+" m r2,%3\n" \
+" m r2,%3\n" \
+" cas %0,r2,r0\n" \
+" mfs r10,%1" \
+ : "=r" ((USItype) (ph)), \
+ "=r" ((USItype) (pl)) \
+ : "%r" (__m0), \
+ "r" (__m1) \
+ : "r2"); \
+ (ph) += ((((SItype) __m0 >> 31) & __m1) \
+ + (((SItype) __m1 >> 31) & __m0)); \
+ } while (0)
+#define UMUL_TIME 20
+#define UDIV_TIME 200
+#define count_leading_zeros(count, x) \
+ do { \
+ if ((x) >= 0x10000) \
+ __asm__ ("clz %0,%1" \
+ : "=r" ((USItype) (count)) \
+ : "r" ((USItype) (x) >> 16)); \
+ else \
+ { \
+ __asm__ ("clz %0,%1" \
+ : "=r" ((USItype) (count)) \
+ : "r" ((USItype) (x))); \
+ (count) += 16; \
+ } \
+ } while (0)
+#endif
+
+#if defined(__sh__) && (!defined (__SHMEDIA__) || !__SHMEDIA__) && W_TYPE_SIZE == 32
+#ifndef __sh1__
+#define umul_ppmm(w1, w0, u, v) \
+ __asm__ ( \
+ "dmulu.l %2,%3\n\tsts%M1 macl,%1\n\tsts%M0 mach,%0" \
+ : "=r<" ((USItype)(w1)), \
+ "=r<" ((USItype)(w0)) \
+ : "r" ((USItype)(u)), \
+ "r" ((USItype)(v)) \
+ : "macl", "mach")
+#define UMUL_TIME 5
+#endif
+
+/* This is the same algorithm as __udiv_qrnnd_c. */
+#define UDIV_NEEDS_NORMALIZATION 1
+
+#ifdef __FDPIC__
+/* FDPIC needs a special version of the asm fragment to extract the
+ code address from the function descriptor. __udiv_qrnnd_16 is
+ assumed to be local and not to use the GOT, so loading r12 is
+ not needed. */
+#define udiv_qrnnd(q, r, n1, n0, d) \
+ do { \
+ extern UWtype __udiv_qrnnd_16 (UWtype, UWtype) \
+ __attribute__ ((visibility ("hidden"))); \
+ /* r0: rn r1: qn */ /* r0: n1 r4: n0 r5: d r6: d1 */ /* r2: __m */ \
+ __asm__ ( \
+ "mov%M4 %4,r5\n" \
+" swap.w %3,r4\n" \
+" swap.w r5,r6\n" \
+" mov.l @%5,r2\n" \
+" jsr @r2\n" \
+" shll16 r6\n" \
+" swap.w r4,r4\n" \
+" mov.l @%5,r2\n" \
+" jsr @r2\n" \
+" swap.w r1,%0\n" \
+" or r1,%0" \
+ : "=r" (q), "=&z" (r) \
+ : "1" (n1), "r" (n0), "rm" (d), "r" (&__udiv_qrnnd_16) \
+ : "r1", "r2", "r4", "r5", "r6", "pr", "t"); \
+ } while (0)
+#else
+#define udiv_qrnnd(q, r, n1, n0, d) \
+ do { \
+ extern UWtype __udiv_qrnnd_16 (UWtype, UWtype) \
+ __attribute__ ((visibility ("hidden"))); \
+ /* r0: rn r1: qn */ /* r0: n1 r4: n0 r5: d r6: d1 */ /* r2: __m */ \
+ __asm__ ( \
+ "mov%M4 %4,r5\n" \
+" swap.w %3,r4\n" \
+" swap.w r5,r6\n" \
+" jsr @%5\n" \
+" shll16 r6\n" \
+" swap.w r4,r4\n" \
+" jsr @%5\n" \
+" swap.w r1,%0\n" \
+" or r1,%0" \
+ : "=r" (q), "=&z" (r) \
+ : "1" (n1), "r" (n0), "rm" (d), "r" (&__udiv_qrnnd_16) \
+ : "r1", "r2", "r4", "r5", "r6", "pr", "t"); \
+ } while (0)
+#endif /* __FDPIC__ */
+
+#define UDIV_TIME 80
+
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+ __asm__ ("clrt;subc %5,%1; subc %4,%0" \
+ : "=r" (sh), "=r" (sl) \
+ : "0" (ah), "1" (al), "r" (bh), "r" (bl) : "t")
+
+#endif /* __sh__ */
+
+#if defined (__SH5__) && defined (__SHMEDIA__) && __SHMEDIA__ && W_TYPE_SIZE == 32
+#define __umulsidi3(u,v) ((UDItype)(USItype)u*(USItype)v)
+#define count_leading_zeros(count, x) \
+ do \
+ { \
+ UDItype x_ = (USItype)(x); \
+ SItype c_; \
+ \
+ __asm__ ("nsb %1, %0" : "=r" (c_) : "r" (x_)); \
+ (count) = c_ - 31; \
+ } \
+ while (0)
+#define COUNT_LEADING_ZEROS_0 32
+#endif
+
+#if defined (__sparc__) && !defined (__arch64__) && !defined (__sparcv9) \
+ && W_TYPE_SIZE == 32
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+ __asm__ ("addcc %r4,%5,%1\n\taddx %r2,%3,%0" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "%rJ" ((USItype) (ah)), \
+ "rI" ((USItype) (bh)), \
+ "%rJ" ((USItype) (al)), \
+ "rI" ((USItype) (bl)) \
+ __CLOBBER_CC)
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+ __asm__ ("subcc %r4,%5,%1\n\tsubx %r2,%3,%0" \
+ : "=r" ((USItype) (sh)), \
+ "=&r" ((USItype) (sl)) \
+ : "rJ" ((USItype) (ah)), \
+ "rI" ((USItype) (bh)), \
+ "rJ" ((USItype) (al)), \
+ "rI" ((USItype) (bl)) \
+ __CLOBBER_CC)
+#if defined (__sparc_v9__)
+#define umul_ppmm(w1, w0, u, v) \
+ do { \
+ register USItype __g1 asm ("g1"); \
+ __asm__ ("umul\t%2,%3,%1\n\t" \
+ "srlx\t%1, 32, %0" \
+ : "=r" ((USItype) (w1)), \
+ "=r" (__g1) \
+ : "r" ((USItype) (u)), \
+ "r" ((USItype) (v))); \
+ (w0) = __g1; \
+ } while (0)
+#define udiv_qrnnd(__q, __r, __n1, __n0, __d) \
+ __asm__ ("mov\t%2,%%y\n\t" \
+ "udiv\t%3,%4,%0\n\t" \
+ "umul\t%0,%4,%1\n\t" \
+ "sub\t%3,%1,%1" \
+ : "=&r" ((USItype) (__q)), \
+ "=&r" ((USItype) (__r)) \
+ : "r" ((USItype) (__n1)), \
+ "r" ((USItype) (__n0)), \
+ "r" ((USItype) (__d)))
+#else
+#if defined (__sparc_v8__)
+#define umul_ppmm(w1, w0, u, v) \
+ __asm__ ("umul %2,%3,%1;rd %%y,%0" \
+ : "=r" ((USItype) (w1)), \
+ "=r" ((USItype) (w0)) \
+ : "r" ((USItype) (u)), \
+ "r" ((USItype) (v)))
+#define udiv_qrnnd(__q, __r, __n1, __n0, __d) \
+ __asm__ ("mov %2,%%y;nop;nop;nop;udiv %3,%4,%0;umul %0,%4,%1;sub %3,%1,%1"\
+ : "=&r" ((USItype) (__q)), \
+ "=&r" ((USItype) (__r)) \
+ : "r" ((USItype) (__n1)), \
+ "r" ((USItype) (__n0)), \
+ "r" ((USItype) (__d)))
+#else
+#if defined (__sparclite__)
+/* This has hardware multiply but not divide. It also has two additional
+ instructions scan (ffs from high bit) and divscc. */
+#define umul_ppmm(w1, w0, u, v) \
+ __asm__ ("umul %2,%3,%1;rd %%y,%0" \
+ : "=r" ((USItype) (w1)), \
+ "=r" ((USItype) (w0)) \
+ : "r" ((USItype) (u)), \
+ "r" ((USItype) (v)))
+#define udiv_qrnnd(q, r, n1, n0, d) \
+ __asm__ ("! Inlined udiv_qrnnd\n" \
+" wr %%g0,%2,%%y ! Not a delayed write for sparclite\n" \
+" tst %%g0\n" \
+" divscc %3,%4,%%g1\n" \
+" divscc %%g1,%4,%%g1\n" \
+" divscc %%g1,%4,%%g1\n" \
+" divscc %%g1,%4,%%g1\n" \
+" divscc %%g1,%4,%%g1\n" \
+" divscc %%g1,%4,%%g1\n" \
+" divscc %%g1,%4,%%g1\n" \
+" divscc %%g1,%4,%%g1\n" \
+" divscc %%g1,%4,%%g1\n" \
+" divscc %%g1,%4,%%g1\n" \
+" divscc %%g1,%4,%%g1\n" \
+" divscc %%g1,%4,%%g1\n" \
+" divscc %%g1,%4,%%g1\n" \
+" divscc %%g1,%4,%%g1\n" \
+" divscc %%g1,%4,%%g1\n" \
+" divscc %%g1,%4,%%g1\n" \
+" divscc %%g1,%4,%%g1\n" \
+" divscc %%g1,%4,%%g1\n" \
+" divscc %%g1,%4,%%g1\n" \
+" divscc %%g1,%4,%%g1\n" \
+" divscc %%g1,%4,%%g1\n" \
+" divscc %%g1,%4,%%g1\n" \
+" divscc %%g1,%4,%%g1\n" \
+" divscc %%g1,%4,%%g1\n" \
+" divscc %%g1,%4,%%g1\n" \
+" divscc %%g1,%4,%%g1\n" \
+" divscc %%g1,%4,%%g1\n" \
+" divscc %%g1,%4,%%g1\n" \
+" divscc %%g1,%4,%%g1\n" \
+" divscc %%g1,%4,%%g1\n" \
+" divscc %%g1,%4,%%g1\n" \
+" divscc %%g1,%4,%0\n" \
+" rd %%y,%1\n" \
+" bl,a 1f\n" \
+" add %1,%4,%1\n" \
+"1: ! End of inline udiv_qrnnd" \
+ : "=r" ((USItype) (q)), \
+ "=r" ((USItype) (r)) \
+ : "r" ((USItype) (n1)), \
+ "r" ((USItype) (n0)), \
+ "rI" ((USItype) (d)) \
+ : "g1" __AND_CLOBBER_CC)
+#define UDIV_TIME 37
+#define count_leading_zeros(count, x) \
+ do { \
+ __asm__ ("scan %1,1,%0" \
+ : "=r" ((USItype) (count)) \
+ : "r" ((USItype) (x))); \
+ } while (0)
+/* Early sparclites return 63 for an argument of 0, but they warn that future
+ implementations might change this. Therefore, leave COUNT_LEADING_ZEROS_0
+ undefined. */
+#else
+/* SPARC without integer multiplication and divide instructions.
+ (i.e. at least Sun4/20,40,60,65,75,110,260,280,330,360,380,470,490) */
+#define umul_ppmm(w1, w0, u, v) \
+ __asm__ ("! Inlined umul_ppmm\n" \
+" wr %%g0,%2,%%y ! SPARC has 0-3 delay insn after a wr\n"\
+" sra %3,31,%%o5 ! Don't move this insn\n" \
+" and %2,%%o5,%%o5 ! Don't move this insn\n" \
+" andcc %%g0,0,%%g1 ! Don't move this insn\n" \
+" mulscc %%g1,%3,%%g1\n" \
+" mulscc %%g1,%3,%%g1\n" \
+" mulscc %%g1,%3,%%g1\n" \
+" mulscc %%g1,%3,%%g1\n" \
+" mulscc %%g1,%3,%%g1\n" \
+" mulscc %%g1,%3,%%g1\n" \
+" mulscc %%g1,%3,%%g1\n" \
+" mulscc %%g1,%3,%%g1\n" \
+" mulscc %%g1,%3,%%g1\n" \
+" mulscc %%g1,%3,%%g1\n" \
+" mulscc %%g1,%3,%%g1\n" \
+" mulscc %%g1,%3,%%g1\n" \
+" mulscc %%g1,%3,%%g1\n" \
+" mulscc %%g1,%3,%%g1\n" \
+" mulscc %%g1,%3,%%g1\n" \
+" mulscc %%g1,%3,%%g1\n" \
+" mulscc %%g1,%3,%%g1\n" \
+" mulscc %%g1,%3,%%g1\n" \
+" mulscc %%g1,%3,%%g1\n" \
+" mulscc %%g1,%3,%%g1\n" \
+" mulscc %%g1,%3,%%g1\n" \
+" mulscc %%g1,%3,%%g1\n" \
+" mulscc %%g1,%3,%%g1\n" \
+" mulscc %%g1,%3,%%g1\n" \
+" mulscc %%g1,%3,%%g1\n" \
+" mulscc %%g1,%3,%%g1\n" \
+" mulscc %%g1,%3,%%g1\n" \
+" mulscc %%g1,%3,%%g1\n" \
+" mulscc %%g1,%3,%%g1\n" \
+" mulscc %%g1,%3,%%g1\n" \
+" mulscc %%g1,%3,%%g1\n" \
+" mulscc %%g1,%3,%%g1\n" \
+" mulscc %%g1,0,%%g1\n" \
+" add %%g1,%%o5,%0\n" \
+" rd %%y,%1" \
+ : "=r" ((USItype) (w1)), \
+ "=r" ((USItype) (w0)) \
+ : "%rI" ((USItype) (u)), \
+ "r" ((USItype) (v)) \
+ : "g1", "o5" __AND_CLOBBER_CC)
+#define UMUL_TIME 39 /* 39 instructions */
+/* It's quite necessary to add this much assembler for the sparc.
+ The default udiv_qrnnd (in C) is more than 10 times slower! */
+#define udiv_qrnnd(__q, __r, __n1, __n0, __d) \
+ __asm__ ("! Inlined udiv_qrnnd\n" \
+" mov 32,%%g1\n" \
+" subcc %1,%2,%%g0\n" \
+"1: bcs 5f\n" \
+" addxcc %0,%0,%0 ! shift n1n0 and a q-bit in lsb\n" \
+" sub %1,%2,%1 ! this kills msb of n\n" \
+" addx %1,%1,%1 ! so this can't give carry\n" \
+" subcc %%g1,1,%%g1\n" \
+"2: bne 1b\n" \
+" subcc %1,%2,%%g0\n" \
+" bcs 3f\n" \
+" addxcc %0,%0,%0 ! shift n1n0 and a q-bit in lsb\n" \
+" b 3f\n" \
+" sub %1,%2,%1 ! this kills msb of n\n" \
+"4: sub %1,%2,%1\n" \
+"5: addxcc %1,%1,%1\n" \
+" bcc 2b\n" \
+" subcc %%g1,1,%%g1\n" \
+"! Got carry from n. Subtract next step to cancel this carry.\n" \
+" bne 4b\n" \
+" addcc %0,%0,%0 ! shift n1n0 and a 0-bit in lsb\n" \
+" sub %1,%2,%1\n" \
+"3: xnor %0,0,%0\n" \
+" ! End of inline udiv_qrnnd" \
+ : "=&r" ((USItype) (__q)), \
+ "=&r" ((USItype) (__r)) \
+ : "r" ((USItype) (__d)), \
+ "1" ((USItype) (__n1)), \
+ "0" ((USItype) (__n0)) : "g1" __AND_CLOBBER_CC)
+#define UDIV_TIME (3+7*32) /* 7 instructions/iteration. 32 iterations. */
+#endif /* __sparclite__ */
+#endif /* __sparc_v8__ */
+#endif /* __sparc_v9__ */
+#endif /* sparc32 */
+
+#if ((defined (__sparc__) && defined (__arch64__)) || defined (__sparcv9)) \
+ && W_TYPE_SIZE == 64
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+ do { \
+ UDItype __carry = 0; \
+ __asm__ ("addcc\t%r5,%6,%1\n\t" \
+ "add\t%r3,%4,%0\n\t" \
+ "movcs\t%%xcc, 1, %2\n\t" \
+ "add\t%0, %2, %0" \
+ : "=r" ((UDItype)(sh)), \
+ "=&r" ((UDItype)(sl)), \
+ "+r" (__carry) \
+ : "%rJ" ((UDItype)(ah)), \
+ "rI" ((UDItype)(bh)), \
+ "%rJ" ((UDItype)(al)), \
+ "rI" ((UDItype)(bl)) \
+ __CLOBBER_CC); \
+ } while (0)
+
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+ do { \
+ UDItype __carry = 0; \
+ __asm__ ("subcc\t%r5,%6,%1\n\t" \
+ "sub\t%r3,%4,%0\n\t" \
+ "movcs\t%%xcc, 1, %2\n\t" \
+ "sub\t%0, %2, %0" \
+ : "=r" ((UDItype)(sh)), \
+ "=&r" ((UDItype)(sl)), \
+ "+r" (__carry) \
+ : "%rJ" ((UDItype)(ah)), \
+ "rI" ((UDItype)(bh)), \
+ "%rJ" ((UDItype)(al)), \
+ "rI" ((UDItype)(bl)) \
+ __CLOBBER_CC); \
+ } while (0)
+
+#define umul_ppmm(wh, wl, u, v) \
+ do { \
+ UDItype tmp1, tmp2, tmp3, tmp4; \
+ __asm__ __volatile__ ( \
+ "srl %7,0,%3\n\t" \
+ "mulx %3,%6,%1\n\t" \
+ "srlx %6,32,%2\n\t" \
+ "mulx %2,%3,%4\n\t" \
+ "sllx %4,32,%5\n\t" \
+ "srl %6,0,%3\n\t" \
+ "sub %1,%5,%5\n\t" \
+ "srlx %5,32,%5\n\t" \
+ "addcc %4,%5,%4\n\t" \
+ "srlx %7,32,%5\n\t" \
+ "mulx %3,%5,%3\n\t" \
+ "mulx %2,%5,%5\n\t" \
+ "sethi %%hi(0x80000000),%2\n\t" \
+ "addcc %4,%3,%4\n\t" \
+ "srlx %4,32,%4\n\t" \
+ "add %2,%2,%2\n\t" \
+ "movcc %%xcc,%%g0,%2\n\t" \
+ "addcc %5,%4,%5\n\t" \
+ "sllx %3,32,%3\n\t" \
+ "add %1,%3,%1\n\t" \
+ "add %5,%2,%0" \
+ : "=r" ((UDItype)(wh)), \
+ "=&r" ((UDItype)(wl)), \
+ "=&r" (tmp1), "=&r" (tmp2), "=&r" (tmp3), "=&r" (tmp4) \
+ : "r" ((UDItype)(u)), \
+ "r" ((UDItype)(v)) \
+ __CLOBBER_CC); \
+ } while (0)
+#define UMUL_TIME 96
+#define UDIV_TIME 230
+#endif /* sparc64 */
+
+#if defined (__vax__) && W_TYPE_SIZE == 32
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+ __asm__ ("addl2 %5,%1\n\tadwc %3,%0" \
+ : "=g" ((USItype) (sh)), \
+ "=&g" ((USItype) (sl)) \
+ : "%0" ((USItype) (ah)), \
+ "g" ((USItype) (bh)), \
+ "%1" ((USItype) (al)), \
+ "g" ((USItype) (bl)))
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+ __asm__ ("subl2 %5,%1\n\tsbwc %3,%0" \
+ : "=g" ((USItype) (sh)), \
+ "=&g" ((USItype) (sl)) \
+ : "0" ((USItype) (ah)), \
+ "g" ((USItype) (bh)), \
+ "1" ((USItype) (al)), \
+ "g" ((USItype) (bl)))
+#define umul_ppmm(xh, xl, m0, m1) \
+ do { \
+ union { \
+ UDItype __ll; \
+ struct {USItype __l, __h;} __i; \
+ } __xx; \
+ USItype __m0 = (m0), __m1 = (m1); \
+ __asm__ ("emul %1,%2,$0,%0" \
+ : "=r" (__xx.__ll) \
+ : "g" (__m0), \
+ "g" (__m1)); \
+ (xh) = __xx.__i.__h; \
+ (xl) = __xx.__i.__l; \
+ (xh) += ((((SItype) __m0 >> 31) & __m1) \
+ + (((SItype) __m1 >> 31) & __m0)); \
+ } while (0)
+#define sdiv_qrnnd(q, r, n1, n0, d) \
+ do { \
+ union {DItype __ll; \
+ struct {SItype __l, __h;} __i; \
+ } __xx; \
+ __xx.__i.__h = n1; __xx.__i.__l = n0; \
+ __asm__ ("ediv %3,%2,%0,%1" \
+ : "=g" (q), "=g" (r) \
+ : "g" (__xx.__ll), "g" (d)); \
+ } while (0)
+#endif /* __vax__ */
+
+#ifdef _TMS320C6X
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+ do \
+ { \
+ UDItype __ll; \
+ __asm__ ("addu .l1 %1, %2, %0" \
+ : "=a" (__ll) : "a" (al), "a" (bl)); \
+ (sl) = (USItype)__ll; \
+ (sh) = ((USItype)(__ll >> 32)) + (ah) + (bh); \
+ } \
+ while (0)
+
+#ifdef _TMS320C6400_PLUS
+#define __umulsidi3(u,v) ((UDItype)(USItype)u*(USItype)v)
+#define umul_ppmm(w1, w0, u, v) \
+ do { \
+ UDItype __x = (UDItype) (USItype) (u) * (USItype) (v); \
+ (w1) = (USItype) (__x >> 32); \
+ (w0) = (USItype) (__x); \
+ } while (0)
+#endif /* _TMS320C6400_PLUS */
+
+#define count_leading_zeros(count, x) ((count) = __builtin_clz (x))
+#ifdef _TMS320C6400
+#define count_trailing_zeros(count, x) ((count) = __builtin_ctz (x))
+#endif
+#define UMUL_TIME 4
+#define UDIV_TIME 40
+#endif /* _TMS320C6X */
+
+#if defined (__xtensa__) && W_TYPE_SIZE == 32
+/* This code is not Xtensa-configuration-specific, so rely on the compiler
+ to expand builtin functions depending on what configuration features
+ are available. This avoids library calls when the operation can be
+ performed in-line. */
+#define umul_ppmm(w1, w0, u, v) \
+ do { \
+ DWunion __w; \
+ __w.ll = __builtin_umulsidi3 (u, v); \
+ w1 = __w.s.high; \
+ w0 = __w.s.low; \
+ } while (0)
+#define __umulsidi3(u, v) __builtin_umulsidi3 (u, v)
+#define count_leading_zeros(COUNT, X) ((COUNT) = __builtin_clz (X))
+#define count_trailing_zeros(COUNT, X) ((COUNT) = __builtin_ctz (X))
+#endif /* __xtensa__ */
+
+#if defined xstormy16
+extern UHItype __stormy16_count_leading_zeros (UHItype);
+#define count_leading_zeros(count, x) \
+ do \
+ { \
+ UHItype size; \
+ \
+ /* We assume that W_TYPE_SIZE is a multiple of 16... */ \
+ for ((count) = 0, size = W_TYPE_SIZE; size; size -= 16) \
+ { \
+ UHItype c; \
+ \
+ c = __clzhi2 ((x) >> (size - 16)); \
+ (count) += c; \
+ if (c != 16) \
+ break; \
+ } \
+ } \
+ while (0)
+#define COUNT_LEADING_ZEROS_0 W_TYPE_SIZE
+#endif
+
+#if defined (__z8000__) && W_TYPE_SIZE == 16
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+ __asm__ ("add %H1,%H5\n\tadc %H0,%H3" \
+ : "=r" ((unsigned int)(sh)), \
+ "=&r" ((unsigned int)(sl)) \
+ : "%0" ((unsigned int)(ah)), \
+ "r" ((unsigned int)(bh)), \
+ "%1" ((unsigned int)(al)), \
+ "rQR" ((unsigned int)(bl)))
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+ __asm__ ("sub %H1,%H5\n\tsbc %H0,%H3" \
+ : "=r" ((unsigned int)(sh)), \
+ "=&r" ((unsigned int)(sl)) \
+ : "0" ((unsigned int)(ah)), \
+ "r" ((unsigned int)(bh)), \
+ "1" ((unsigned int)(al)), \
+ "rQR" ((unsigned int)(bl)))
+#define umul_ppmm(xh, xl, m0, m1) \
+ do { \
+ union {long int __ll; \
+ struct {unsigned int __h, __l;} __i; \
+ } __xx; \
+ unsigned int __m0 = (m0), __m1 = (m1); \
+ __asm__ ("mult %S0,%H3" \
+ : "=r" (__xx.__i.__h), \
+ "=r" (__xx.__i.__l) \
+ : "%1" (__m0), \
+ "rQR" (__m1)); \
+ (xh) = __xx.__i.__h; (xl) = __xx.__i.__l; \
+ (xh) += ((((signed int) __m0 >> 15) & __m1) \
+ + (((signed int) __m1 >> 15) & __m0)); \
+ } while (0)
+#endif /* __z8000__ */
+
+#endif /* __GNUC__ */
+
+/* If this machine has no inline assembler, use C macros. */
+
+#if !defined (add_ssaaaa)
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+ do { \
+ UWtype __x; \
+ __x = (al) + (bl); \
+ (sh) = (ah) + (bh) + (__x < (al)); \
+ (sl) = __x; \
+ } while (0)
+#endif
+
+#if !defined (sub_ddmmss)
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+ do { \
+ UWtype __x; \
+ __x = (al) - (bl); \
+ (sh) = (ah) - (bh) - (__x > (al)); \
+ (sl) = __x; \
+ } while (0)
+#endif
+
+/* If we lack umul_ppmm but have smul_ppmm, define umul_ppmm in terms of
+ smul_ppmm. */
+#if !defined (umul_ppmm) && defined (smul_ppmm)
+#define umul_ppmm(w1, w0, u, v) \
+ do { \
+ UWtype __w1; \
+ UWtype __xm0 = (u), __xm1 = (v); \
+ smul_ppmm (__w1, w0, __xm0, __xm1); \
+ (w1) = __w1 + (-(__xm0 >> (W_TYPE_SIZE - 1)) & __xm1) \
+ + (-(__xm1 >> (W_TYPE_SIZE - 1)) & __xm0); \
+ } while (0)
+#endif
+
+/* If we still don't have umul_ppmm, define it using plain C. */
+#if !defined (umul_ppmm)
+#define umul_ppmm(w1, w0, u, v) \
+ do { \
+ UWtype __x0, __x1, __x2, __x3; \
+ UHWtype __ul, __vl, __uh, __vh; \
+ \
+ __ul = __ll_lowpart (u); \
+ __uh = __ll_highpart (u); \
+ __vl = __ll_lowpart (v); \
+ __vh = __ll_highpart (v); \
+ \
+ __x0 = (UWtype) __ul * __vl; \
+ __x1 = (UWtype) __ul * __vh; \
+ __x2 = (UWtype) __uh * __vl; \
+ __x3 = (UWtype) __uh * __vh; \
+ \
+ __x1 += __ll_highpart (__x0);/* this can't give carry */ \
+ __x1 += __x2; /* but this indeed can */ \
+ if (__x1 < __x2) /* did we get it? */ \
+ __x3 += __ll_B; /* yes, add it in the proper pos. */ \
+ \
+ (w1) = __x3 + __ll_highpart (__x1); \
+ (w0) = __ll_lowpart (__x1) * __ll_B + __ll_lowpart (__x0); \
+ } while (0)
+#endif
+
+#if !defined (__umulsidi3)
+#define __umulsidi3(u, v) \
+ ({DWunion __w; \
+ umul_ppmm (__w.s.high, __w.s.low, u, v); \
+ __w.ll; })
+#endif
+
+/* Define this unconditionally, so it can be used for debugging. */
+#define __udiv_qrnnd_c(q, r, n1, n0, d) \
+ do { \
+ UWtype __d1, __d0, __q1, __q0; \
+ UWtype __r1, __r0, __m; \
+ __d1 = __ll_highpart (d); \
+ __d0 = __ll_lowpart (d); \
+ \
+ __r1 = (n1) % __d1; \
+ __q1 = (n1) / __d1; \
+ __m = (UWtype) __q1 * __d0; \
+ __r1 = __r1 * __ll_B | __ll_highpart (n0); \
+ if (__r1 < __m) \
+ { \
+ __q1--, __r1 += (d); \
+ if (__r1 >= (d)) /* i.e. we didn't get carry when adding to __r1 */\
+ if (__r1 < __m) \
+ __q1--, __r1 += (d); \
+ } \
+ __r1 -= __m; \
+ \
+ __r0 = __r1 % __d1; \
+ __q0 = __r1 / __d1; \
+ __m = (UWtype) __q0 * __d0; \
+ __r0 = __r0 * __ll_B | __ll_lowpart (n0); \
+ if (__r0 < __m) \
+ { \
+ __q0--, __r0 += (d); \
+ if (__r0 >= (d)) \
+ if (__r0 < __m) \
+ __q0--, __r0 += (d); \
+ } \
+ __r0 -= __m; \
+ \
+ (q) = (UWtype) __q1 * __ll_B | __q0; \
+ (r) = __r0; \
+ } while (0)
+
+/* If the processor has no udiv_qrnnd but sdiv_qrnnd, go through
+ __udiv_w_sdiv (defined in libgcc or elsewhere). */
+#if !defined (udiv_qrnnd) && defined (sdiv_qrnnd)
+#define udiv_qrnnd(q, r, nh, nl, d) \
+ do { \
+ extern UWtype __udiv_w_sdiv (UWtype *, UWtype, UWtype, UWtype); \
+ UWtype __r; \
+ (q) = __udiv_w_sdiv (&__r, nh, nl, d); \
+ (r) = __r; \
+ } while (0)
+#endif
+
+/* If udiv_qrnnd was not defined for this processor, use __udiv_qrnnd_c. */
+#if !defined (udiv_qrnnd)
+#define UDIV_NEEDS_NORMALIZATION 1
+#define udiv_qrnnd __udiv_qrnnd_c
+#endif
+
+#if !defined (count_leading_zeros)
+#define count_leading_zeros(count, x) \
+ do { \
+ UWtype __xr = (x); \
+ UWtype __a; \
+ \
+ if (W_TYPE_SIZE <= 32) \
+ { \
+ __a = __xr < ((UWtype)1<<2*__BITS4) \
+ ? (__xr < ((UWtype)1<<__BITS4) ? 0 : __BITS4) \
+ : (__xr < ((UWtype)1<<3*__BITS4) ? 2*__BITS4 : 3*__BITS4); \
+ } \
+ else \
+ { \
+ for (__a = W_TYPE_SIZE - 8; __a > 0; __a -= 8) \
+ if (((__xr >> __a) & 0xff) != 0) \
+ break; \
+ } \
+ \
+ (count) = W_TYPE_SIZE - (__clz_tab[__xr >> __a] + __a); \
+ } while (0)
+#define COUNT_LEADING_ZEROS_0 W_TYPE_SIZE
+#endif
+
+#if !defined (count_trailing_zeros)
+/* Define count_trailing_zeros using count_leading_zeros. The latter might be
+ defined in asm, but if it is not, the C version above is good enough. */
+#define count_trailing_zeros(count, x) \
+ do { \
+ UWtype __ctz_x = (x); \
+ UWtype __ctz_c; \
+ count_leading_zeros (__ctz_c, __ctz_x & -__ctz_x); \
+ (count) = W_TYPE_SIZE - 1 - __ctz_c; \
+ } while (0)
+#endif
+
+#ifndef UDIV_NEEDS_NORMALIZATION
+#define UDIV_NEEDS_NORMALIZATION 0
+#endif
diff --git a/REORG.TODO/stdlib/lrand48.c b/REORG.TODO/stdlib/lrand48.c
new file mode 100644
index 0000000000..645977bb96
--- /dev/null
+++ b/REORG.TODO/stdlib/lrand48.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+
+long int
+lrand48 (void)
+{
+ long int result;
+
+ (void) __nrand48_r (__libc_drand48_data.__x, &__libc_drand48_data, &result);
+
+ return result;
+}
diff --git a/REORG.TODO/stdlib/lrand48_r.c b/REORG.TODO/stdlib/lrand48_r.c
new file mode 100644
index 0000000000..445efe09b6
--- /dev/null
+++ b/REORG.TODO/stdlib/lrand48_r.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.org>, August 1995.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+int
+lrand48_r (struct drand48_data *buffer, long int *result)
+{
+ /* Be generous for the arguments, detect some errors. */
+ if (buffer == NULL)
+ return -1;
+
+ return __nrand48_r (buffer->__x, buffer, result);
+}
+libc_hidden_def (lrand48_r)
diff --git a/REORG.TODO/stdlib/lshift.c b/REORG.TODO/stdlib/lshift.c
new file mode 100644
index 0000000000..c8228f9aa6
--- /dev/null
+++ b/REORG.TODO/stdlib/lshift.c
@@ -0,0 +1,78 @@
+/* mpn_lshift -- Shift left low level.
+
+Copyright (C) 1991-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP 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 MP 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 MP Library; see the file COPYING.LIB. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+
+/* Shift U (pointed to by UP and USIZE digits long) CNT bits to the left
+ and store the USIZE least significant digits of the result at WP.
+ Return the bits shifted out from the most significant digit.
+
+ Argument constraints:
+ 1. 0 < CNT < BITS_PER_MP_LIMB
+ 2. If the result is to be written over the input, WP must be >= UP.
+*/
+
+mp_limb_t
+mpn_lshift (register mp_ptr wp,
+ register mp_srcptr up, mp_size_t usize,
+ register unsigned int cnt)
+{
+ register mp_limb_t high_limb, low_limb;
+ register unsigned sh_1, sh_2;
+ register mp_size_t i;
+ mp_limb_t retval;
+
+#ifdef DEBUG
+ if (usize == 0 || cnt == 0)
+ abort ();
+#endif
+
+ sh_1 = cnt;
+#if 0
+ if (sh_1 == 0)
+ {
+ if (wp != up)
+ {
+ /* Copy from high end to low end, to allow specified input/output
+ overlapping. */
+ for (i = usize - 1; i >= 0; i--)
+ wp[i] = up[i];
+ }
+ return 0;
+ }
+#endif
+
+ wp += 1;
+ sh_2 = BITS_PER_MP_LIMB - sh_1;
+ i = usize - 1;
+ low_limb = up[i];
+ retval = low_limb >> sh_2;
+ high_limb = low_limb;
+ while (--i >= 0)
+ {
+ low_limb = up[i];
+ wp[i] = (high_limb << sh_1) | (low_limb >> sh_2);
+ high_limb = low_limb;
+ }
+ wp[i] = high_limb << sh_1;
+
+ return retval;
+}
diff --git a/REORG.TODO/stdlib/makecontext.c b/REORG.TODO/stdlib/makecontext.c
new file mode 100644
index 0000000000..b699bd8a56
--- /dev/null
+++ b/REORG.TODO/stdlib/makecontext.c
@@ -0,0 +1,28 @@
+/* Copyright (C) 1998-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <ucontext.h>
+
+void
+makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...)
+{
+ __set_errno (ENOSYS);
+}
+
+
+stub_warning (makecontext)
diff --git a/REORG.TODO/stdlib/mblen.c b/REORG.TODO/stdlib/mblen.c
new file mode 100644
index 0000000000..b98bb915e4
--- /dev/null
+++ b/REORG.TODO/stdlib/mblen.c
@@ -0,0 +1,68 @@
+/* Copyright (C) 1991-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+#include <gconv.h>
+#include <wcsmbs/wcsmbsload.h>
+
+
+/* Internal state. */
+static mbstate_t state;
+
+/* Return the length of the multibyte character (if there is one)
+ at S which is no longer than N characters.
+ The ISO C standard says that the `mblen' function must not change
+ the state of the `mbtowc' function. */
+int
+mblen (const char *s, size_t n)
+{
+ int result;
+
+ /* If S is NULL the function has to return null or not null
+ depending on the encoding having a state depending encoding or
+ not. */
+ if (s == NULL)
+ {
+ const struct gconv_fcts *fcts;
+
+ /* Get the conversion functions. */
+ fcts = get_gconv_fcts (_NL_CURRENT_DATA (LC_CTYPE));
+
+ /* Reset the state. */
+ memset (&state, '\0', sizeof state);
+
+ result = fcts->towc->__stateful;
+ }
+ else if (*s == '\0')
+ /* According to the ISO C 89 standard this is the expected behaviour. */
+ result = 0;
+ else
+ {
+ memset (&state, '\0', sizeof state);
+
+ result = __mbrtowc (NULL, s, n, &state);
+
+ /* The `mbrtowc' functions tell us more than we need. Fold the -1
+ and -2 result into -1. */
+ if (result < 0)
+ result = -1;
+ }
+
+ return result;
+}
diff --git a/REORG.TODO/stdlib/mbstowcs.c b/REORG.TODO/stdlib/mbstowcs.c
new file mode 100644
index 0000000000..8016208e76
--- /dev/null
+++ b/REORG.TODO/stdlib/mbstowcs.c
@@ -0,0 +1,39 @@
+/* Copyright (C) 1991-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+
+
+/* Convert the string of multibyte characters in S to `wchar_t's in
+ PWCS, writing no more than N. Return the number written,
+ or (size_t) -1 if an invalid multibyte character is encountered.
+
+ Attention: this function should NEVER be intentionally used.
+ The interface is completely stupid. The state is shared between
+ all conversion functions. You should use instead the restartable
+ version `mbsrtowcs'. */
+size_t
+mbstowcs (wchar_t *pwcs, const char *s, size_t n)
+{
+ mbstate_t state;
+
+ memset (&state, '\0', sizeof state);
+ /* Return how many we wrote (or maybe an error). */
+ return __mbsrtowcs (pwcs, &s, n, &state);
+}
diff --git a/REORG.TODO/stdlib/mbtowc.c b/REORG.TODO/stdlib/mbtowc.c
new file mode 100644
index 0000000000..c391726689
--- /dev/null
+++ b/REORG.TODO/stdlib/mbtowc.c
@@ -0,0 +1,72 @@
+/* Copyright (C) 1991-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+#include <gconv.h>
+#include <wcsmbs/wcsmbsload.h>
+
+
+/* Convert the multibyte character at S, which is no longer
+ than N characters, to its `wchar_t' representation, placing
+ this n *PWC and returning its length.
+
+ Attention: this function should NEVER be intentionally used.
+ The interface is completely stupid. The state is shared between
+ all conversion functions. You should use instead the restartable
+ version `mbrtowc'. */
+int
+mbtowc (wchar_t *pwc, const char *s, size_t n)
+{
+ int result;
+ static mbstate_t state;
+
+ /* If S is NULL the function has to return null or not null
+ depending on the encoding having a state depending encoding or
+ not. */
+ if (s == NULL)
+ {
+ const struct gconv_fcts *fcts;
+
+ /* Get the conversion functions. */
+ fcts = get_gconv_fcts (_NL_CURRENT_DATA (LC_CTYPE));
+
+ /* This is an extension in the Unix standard which does not directly
+ violate ISO C. */
+ memset (&state, '\0', sizeof state);
+
+ result = fcts->towc->__stateful;
+ }
+ else if (*s == '\0')
+ {
+ if (pwc != NULL)
+ *pwc = L'\0';
+ result = 0;
+ }
+ else
+ {
+ result = __mbrtowc (pwc, s, n, &state);
+
+ /* The `mbrtowc' functions tell us more than we need. Fold the -1
+ and -2 result into -1. */
+ if (result < 0)
+ result = -1;
+ }
+
+ return result;
+}
diff --git a/REORG.TODO/stdlib/mod_1.c b/REORG.TODO/stdlib/mod_1.c
new file mode 100644
index 0000000000..33ca193ce2
--- /dev/null
+++ b/REORG.TODO/stdlib/mod_1.c
@@ -0,0 +1,189 @@
+/* mpn_mod_1(dividend_ptr, dividend_size, divisor_limb) --
+ Divide (DIVIDEND_PTR,,DIVIDEND_SIZE) by DIVISOR_LIMB.
+ Return the single-limb remainder.
+ There are no constraints on the value of the divisor.
+
+Copyright (C) 1991-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP 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 MP 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 MP Library; see the file COPYING.LIB. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+#include "longlong.h"
+
+#ifndef UMUL_TIME
+#define UMUL_TIME 1
+#endif
+
+#ifndef UDIV_TIME
+#define UDIV_TIME UMUL_TIME
+#endif
+
+/* FIXME: We should be using invert_limb (or invert_normalized_limb)
+ here (not udiv_qrnnd). */
+
+mp_limb_t
+mpn_mod_1 (mp_srcptr dividend_ptr, mp_size_t dividend_size,
+ mp_limb_t divisor_limb)
+{
+ mp_size_t i;
+ mp_limb_t n1, n0, r;
+ mp_limb_t dummy __attribute__ ((unused));
+
+ /* Botch: Should this be handled at all? Rely on callers? */
+ if (dividend_size == 0)
+ return 0;
+
+ /* If multiplication is much faster than division, and the
+ dividend is large, pre-invert the divisor, and use
+ only multiplications in the inner loop. */
+
+ /* This test should be read:
+ Does it ever help to use udiv_qrnnd_preinv?
+ && Does what we save compensate for the inversion overhead? */
+ if (UDIV_TIME > (2 * UMUL_TIME + 6)
+ && (UDIV_TIME - (2 * UMUL_TIME + 6)) * dividend_size > UDIV_TIME)
+ {
+ int normalization_steps;
+
+ count_leading_zeros (normalization_steps, divisor_limb);
+ if (normalization_steps != 0)
+ {
+ mp_limb_t divisor_limb_inverted;
+
+ divisor_limb <<= normalization_steps;
+
+ /* Compute (2**2N - 2**N * DIVISOR_LIMB) / DIVISOR_LIMB. The
+ result is a (N+1)-bit approximation to 1/DIVISOR_LIMB, with the
+ most significant bit (with weight 2**N) implicit. */
+
+ /* Special case for DIVISOR_LIMB == 100...000. */
+ if (divisor_limb << 1 == 0)
+ divisor_limb_inverted = ~(mp_limb_t) 0;
+ else
+ udiv_qrnnd (divisor_limb_inverted, dummy,
+ -divisor_limb, 0, divisor_limb);
+
+ n1 = dividend_ptr[dividend_size - 1];
+ r = n1 >> (BITS_PER_MP_LIMB - normalization_steps);
+
+ /* Possible optimization:
+ if (r == 0
+ && divisor_limb > ((n1 << normalization_steps)
+ | (dividend_ptr[dividend_size - 2] >> ...)))
+ ...one division less... */
+
+ for (i = dividend_size - 2; i >= 0; i--)
+ {
+ n0 = dividend_ptr[i];
+ udiv_qrnnd_preinv (dummy, r, r,
+ ((n1 << normalization_steps)
+ | (n0 >> (BITS_PER_MP_LIMB - normalization_steps))),
+ divisor_limb, divisor_limb_inverted);
+ n1 = n0;
+ }
+ udiv_qrnnd_preinv (dummy, r, r,
+ n1 << normalization_steps,
+ divisor_limb, divisor_limb_inverted);
+ return r >> normalization_steps;
+ }
+ else
+ {
+ mp_limb_t divisor_limb_inverted;
+
+ /* Compute (2**2N - 2**N * DIVISOR_LIMB) / DIVISOR_LIMB. The
+ result is a (N+1)-bit approximation to 1/DIVISOR_LIMB, with the
+ most significant bit (with weight 2**N) implicit. */
+
+ /* Special case for DIVISOR_LIMB == 100...000. */
+ if (divisor_limb << 1 == 0)
+ divisor_limb_inverted = ~(mp_limb_t) 0;
+ else
+ udiv_qrnnd (divisor_limb_inverted, dummy,
+ -divisor_limb, 0, divisor_limb);
+
+ i = dividend_size - 1;
+ r = dividend_ptr[i];
+
+ if (r >= divisor_limb)
+ r = 0;
+ else
+ i--;
+
+ for (; i >= 0; i--)
+ {
+ n0 = dividend_ptr[i];
+ udiv_qrnnd_preinv (dummy, r, r,
+ n0, divisor_limb, divisor_limb_inverted);
+ }
+ return r;
+ }
+ }
+ else
+ {
+ if (UDIV_NEEDS_NORMALIZATION)
+ {
+ int normalization_steps;
+
+ count_leading_zeros (normalization_steps, divisor_limb);
+ if (normalization_steps != 0)
+ {
+ divisor_limb <<= normalization_steps;
+
+ n1 = dividend_ptr[dividend_size - 1];
+ r = n1 >> (BITS_PER_MP_LIMB - normalization_steps);
+
+ /* Possible optimization:
+ if (r == 0
+ && divisor_limb > ((n1 << normalization_steps)
+ | (dividend_ptr[dividend_size - 2] >> ...)))
+ ...one division less... */
+
+ for (i = dividend_size - 2; i >= 0; i--)
+ {
+ n0 = dividend_ptr[i];
+ udiv_qrnnd (dummy, r, r,
+ ((n1 << normalization_steps)
+ | (n0 >> (BITS_PER_MP_LIMB - normalization_steps))),
+ divisor_limb);
+ n1 = n0;
+ }
+ udiv_qrnnd (dummy, r, r,
+ n1 << normalization_steps,
+ divisor_limb);
+ return r >> normalization_steps;
+ }
+ }
+ /* No normalization needed, either because udiv_qrnnd doesn't require
+ it, or because DIVISOR_LIMB is already normalized. */
+
+ i = dividend_size - 1;
+ r = dividend_ptr[i];
+
+ if (r >= divisor_limb)
+ r = 0;
+ else
+ i--;
+
+ for (; i >= 0; i--)
+ {
+ n0 = dividend_ptr[i];
+ udiv_qrnnd (dummy, r, r, n0, divisor_limb);
+ }
+ return r;
+ }
+}
diff --git a/REORG.TODO/stdlib/monetary.h b/REORG.TODO/stdlib/monetary.h
new file mode 100644
index 0000000000..dcfbfc5262
--- /dev/null
+++ b/REORG.TODO/stdlib/monetary.h
@@ -0,0 +1,58 @@
+/* Header file for monetary value formatting functions.
+ Copyright (C) 1996-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef _MONETARY_H
+#define _MONETARY_H 1
+
+#include <features.h>
+
+/* Get needed types. */
+#define __need_size_t
+#include <stddef.h>
+#include <bits/types.h>
+
+#ifndef __ssize_t_defined
+typedef __ssize_t ssize_t;
+# define __ssize_t_defined
+#endif
+
+
+__BEGIN_DECLS
+
+/* Formatting a monetary value according to the current locale. */
+extern ssize_t strfmon (char *__restrict __s, size_t __maxsize,
+ const char *__restrict __format, ...)
+ __THROW __attribute_format_strfmon__ (3, 4);
+
+#ifdef __USE_XOPEN2K8
+# include <xlocale.h>
+
+/* Formatting a monetary value according to the given locale. */
+extern ssize_t strfmon_l (char *__restrict __s, size_t __maxsize,
+ __locale_t __loc,
+ const char *__restrict __format, ...)
+ __THROW __attribute_format_strfmon__ (4, 5);
+#endif
+
+#ifdef __LDBL_COMPAT
+# include <bits/monetary-ldbl.h>
+#endif
+
+__END_DECLS
+
+#endif /* monetary.h */
diff --git a/REORG.TODO/stdlib/mp_clz_tab.c b/REORG.TODO/stdlib/mp_clz_tab.c
new file mode 100644
index 0000000000..7759ce3abb
--- /dev/null
+++ b/REORG.TODO/stdlib/mp_clz_tab.c
@@ -0,0 +1,36 @@
+/* __clz_tab -- support for longlong.h
+ Copyright (C) 1991-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library. Its master source is NOT part of
+ the C library, however. The master source lives in the GNU MP 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#if 0
+#include <gmp.h>
+#include "gmp-impl.h"
+#endif
+
+const
+unsigned char __clz_tab[] =
+{
+ 0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+ 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+ 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
+ 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
+ 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
+ 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
+};
diff --git a/REORG.TODO/stdlib/mpn2dbl.c b/REORG.TODO/stdlib/mpn2dbl.c
new file mode 100644
index 0000000000..0196e50cad
--- /dev/null
+++ b/REORG.TODO/stdlib/mpn2dbl.c
@@ -0,0 +1,29 @@
+/* Copyright (C) 1995-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+#include <float.h>
+
+/* Convert a multi-precision integer of the needed number of bits and an
+ integral power of two to a `double'. */
+
+double
+__mpn_construct_double (mp_srcptr frac_ptr, int expt, int negative)
+{
+#error "__mpn_construct_double not implemented for this floating point format"
+}
diff --git a/REORG.TODO/stdlib/mpn2flt.c b/REORG.TODO/stdlib/mpn2flt.c
new file mode 100644
index 0000000000..62a208d6c7
--- /dev/null
+++ b/REORG.TODO/stdlib/mpn2flt.c
@@ -0,0 +1,29 @@
+/* Copyright (C) 1995-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include "gmp.h"
+#include "gmp-impl.h"
+#include <float.h>
+
+/* Convert a multi-precision integer of the needed number of bits and an
+ integral power of two to a `float'. */
+
+float
+__mpn_construct_float (mp_srcptr frac_ptr, int expt, int negative)
+{
+#error "__mpn_construct_float not implemented for this floating point format"
+}
diff --git a/REORG.TODO/stdlib/mpn2ldbl.c b/REORG.TODO/stdlib/mpn2ldbl.c
new file mode 100644
index 0000000000..450f9381cc
--- /dev/null
+++ b/REORG.TODO/stdlib/mpn2ldbl.c
@@ -0,0 +1 @@
+/* Empty. Not needed unless ldbl support is in. */
diff --git a/REORG.TODO/stdlib/mrand48.c b/REORG.TODO/stdlib/mrand48.c
new file mode 100644
index 0000000000..cbc8aaf786
--- /dev/null
+++ b/REORG.TODO/stdlib/mrand48.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+
+long int
+mrand48 (void)
+{
+ long int result;
+
+ (void) __jrand48_r (__libc_drand48_data.__x, &__libc_drand48_data, &result);
+
+ return result;
+}
diff --git a/REORG.TODO/stdlib/mrand48_r.c b/REORG.TODO/stdlib/mrand48_r.c
new file mode 100644
index 0000000000..a674b5b26d
--- /dev/null
+++ b/REORG.TODO/stdlib/mrand48_r.c
@@ -0,0 +1,29 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+int
+mrand48_r (struct drand48_data *buffer, long int *result)
+{
+ /* Be generous for the arguments, detect some errors. */
+ if (buffer == NULL)
+ return -1;
+
+ return __jrand48_r (buffer->__x, buffer, result);
+}
diff --git a/REORG.TODO/stdlib/msort.c b/REORG.TODO/stdlib/msort.c
new file mode 100644
index 0000000000..c00f389601
--- /dev/null
+++ b/REORG.TODO/stdlib/msort.c
@@ -0,0 +1,310 @@
+/* An alternative to qsort, with an identical interface.
+ This file is part of the GNU C Library.
+ Copyright (C) 1992-2017 Free Software Foundation, Inc.
+ Written by Mike Haertel, September 1988.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <alloca.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <memcopy.h>
+#include <errno.h>
+#include <atomic.h>
+
+struct msort_param
+{
+ size_t s;
+ size_t var;
+ __compar_d_fn_t cmp;
+ void *arg;
+ char *t;
+};
+static void msort_with_tmp (const struct msort_param *p, void *b, size_t n);
+
+static void
+msort_with_tmp (const struct msort_param *p, void *b, size_t n)
+{
+ char *b1, *b2;
+ size_t n1, n2;
+
+ if (n <= 1)
+ return;
+
+ n1 = n / 2;
+ n2 = n - n1;
+ b1 = b;
+ b2 = (char *) b + (n1 * p->s);
+
+ msort_with_tmp (p, b1, n1);
+ msort_with_tmp (p, b2, n2);
+
+ char *tmp = p->t;
+ const size_t s = p->s;
+ __compar_d_fn_t cmp = p->cmp;
+ void *arg = p->arg;
+ switch (p->var)
+ {
+ case 0:
+ while (n1 > 0 && n2 > 0)
+ {
+ if ((*cmp) (b1, b2, arg) <= 0)
+ {
+ *(uint32_t *) tmp = *(uint32_t *) b1;
+ b1 += sizeof (uint32_t);
+ --n1;
+ }
+ else
+ {
+ *(uint32_t *) tmp = *(uint32_t *) b2;
+ b2 += sizeof (uint32_t);
+ --n2;
+ }
+ tmp += sizeof (uint32_t);
+ }
+ break;
+ case 1:
+ while (n1 > 0 && n2 > 0)
+ {
+ if ((*cmp) (b1, b2, arg) <= 0)
+ {
+ *(uint64_t *) tmp = *(uint64_t *) b1;
+ b1 += sizeof (uint64_t);
+ --n1;
+ }
+ else
+ {
+ *(uint64_t *) tmp = *(uint64_t *) b2;
+ b2 += sizeof (uint64_t);
+ --n2;
+ }
+ tmp += sizeof (uint64_t);
+ }
+ break;
+ case 2:
+ while (n1 > 0 && n2 > 0)
+ {
+ unsigned long *tmpl = (unsigned long *) tmp;
+ unsigned long *bl;
+
+ tmp += s;
+ if ((*cmp) (b1, b2, arg) <= 0)
+ {
+ bl = (unsigned long *) b1;
+ b1 += s;
+ --n1;
+ }
+ else
+ {
+ bl = (unsigned long *) b2;
+ b2 += s;
+ --n2;
+ }
+ while (tmpl < (unsigned long *) tmp)
+ *tmpl++ = *bl++;
+ }
+ break;
+ case 3:
+ while (n1 > 0 && n2 > 0)
+ {
+ if ((*cmp) (*(const void **) b1, *(const void **) b2, arg) <= 0)
+ {
+ *(void **) tmp = *(void **) b1;
+ b1 += sizeof (void *);
+ --n1;
+ }
+ else
+ {
+ *(void **) tmp = *(void **) b2;
+ b2 += sizeof (void *);
+ --n2;
+ }
+ tmp += sizeof (void *);
+ }
+ break;
+ default:
+ while (n1 > 0 && n2 > 0)
+ {
+ if ((*cmp) (b1, b2, arg) <= 0)
+ {
+ tmp = (char *) __mempcpy (tmp, b1, s);
+ b1 += s;
+ --n1;
+ }
+ else
+ {
+ tmp = (char *) __mempcpy (tmp, b2, s);
+ b2 += s;
+ --n2;
+ }
+ }
+ break;
+ }
+
+ if (n1 > 0)
+ memcpy (tmp, b1, n1 * s);
+ memcpy (b, p->t, (n - n2) * s);
+}
+
+
+void
+__qsort_r (void *b, size_t n, size_t s, __compar_d_fn_t cmp, void *arg)
+{
+ size_t size = n * s;
+ char *tmp = NULL;
+ struct msort_param p;
+
+ /* For large object sizes use indirect sorting. */
+ if (s > 32)
+ size = 2 * n * sizeof (void *) + s;
+
+ if (size < 1024)
+ /* The temporary array is small, so put it on the stack. */
+ p.t = __alloca (size);
+ else
+ {
+ /* We should avoid allocating too much memory since this might
+ have to be backed up by swap space. */
+ static long int phys_pages;
+ static int pagesize;
+
+ if (pagesize == 0)
+ {
+ phys_pages = __sysconf (_SC_PHYS_PAGES);
+
+ if (phys_pages == -1)
+ /* Error while determining the memory size. So let's
+ assume there is enough memory. Otherwise the
+ implementer should provide a complete implementation of
+ the `sysconf' function. */
+ phys_pages = (long int) (~0ul >> 1);
+
+ /* The following determines that we will never use more than
+ a quarter of the physical memory. */
+ phys_pages /= 4;
+
+ /* Make sure phys_pages is written to memory. */
+ atomic_write_barrier ();
+
+ pagesize = __sysconf (_SC_PAGESIZE);
+ }
+
+ /* Just a comment here. We cannot compute
+ phys_pages * pagesize
+ and compare the needed amount of memory against this value.
+ The problem is that some systems might have more physical
+ memory then can be represented with a `size_t' value (when
+ measured in bytes. */
+
+ /* If the memory requirements are too high don't allocate memory. */
+ if (size / pagesize > (size_t) phys_pages)
+ {
+ _quicksort (b, n, s, cmp, arg);
+ return;
+ }
+
+ /* It's somewhat large, so malloc it. */
+ int save = errno;
+ tmp = malloc (size);
+ __set_errno (save);
+ if (tmp == NULL)
+ {
+ /* Couldn't get space, so use the slower algorithm
+ that doesn't need a temporary array. */
+ _quicksort (b, n, s, cmp, arg);
+ return;
+ }
+ p.t = tmp;
+ }
+
+ p.s = s;
+ p.var = 4;
+ p.cmp = cmp;
+ p.arg = arg;
+
+ if (s > 32)
+ {
+ /* Indirect sorting. */
+ char *ip = (char *) b;
+ void **tp = (void **) (p.t + n * sizeof (void *));
+ void **t = tp;
+ void *tmp_storage = (void *) (tp + n);
+
+ while ((void *) t < tmp_storage)
+ {
+ *t++ = ip;
+ ip += s;
+ }
+ p.s = sizeof (void *);
+ p.var = 3;
+ msort_with_tmp (&p, p.t + n * sizeof (void *), n);
+
+ /* tp[0] .. tp[n - 1] is now sorted, copy around entries of
+ the original array. Knuth vol. 3 (2nd ed.) exercise 5.2-10. */
+ char *kp;
+ size_t i;
+ for (i = 0, ip = (char *) b; i < n; i++, ip += s)
+ if ((kp = tp[i]) != ip)
+ {
+ size_t j = i;
+ char *jp = ip;
+ memcpy (tmp_storage, ip, s);
+
+ do
+ {
+ size_t k = (kp - (char *) b) / s;
+ tp[j] = jp;
+ memcpy (jp, kp, s);
+ j = k;
+ jp = kp;
+ kp = tp[k];
+ }
+ while (kp != ip);
+
+ tp[j] = jp;
+ memcpy (jp, tmp_storage, s);
+ }
+ }
+ else
+ {
+ if ((s & (sizeof (uint32_t) - 1)) == 0
+ && ((char *) b - (char *) 0) % __alignof__ (uint32_t) == 0)
+ {
+ if (s == sizeof (uint32_t))
+ p.var = 0;
+ else if (s == sizeof (uint64_t)
+ && ((char *) b - (char *) 0) % __alignof__ (uint64_t) == 0)
+ p.var = 1;
+ else if ((s & (sizeof (unsigned long) - 1)) == 0
+ && ((char *) b - (char *) 0)
+ % __alignof__ (unsigned long) == 0)
+ p.var = 2;
+ }
+ msort_with_tmp (&p, b, n);
+ }
+ free (tmp);
+}
+libc_hidden_def (__qsort_r)
+weak_alias (__qsort_r, qsort_r)
+
+
+void
+qsort (void *b, size_t n, size_t s, __compar_fn_t cmp)
+{
+ return __qsort_r (b, n, s, (__compar_d_fn_t) cmp, NULL);
+}
+libc_hidden_def (qsort)
diff --git a/REORG.TODO/stdlib/mul.c b/REORG.TODO/stdlib/mul.c
new file mode 100644
index 0000000000..88ba1c5176
--- /dev/null
+++ b/REORG.TODO/stdlib/mul.c
@@ -0,0 +1,142 @@
+/* mpn_mul -- Multiply two natural numbers.
+
+Copyright (C) 1991-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP 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 MP 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 MP Library; see the file COPYING.LIB. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+
+/* Multiply the natural numbers u (pointed to by UP, with USIZE limbs)
+ and v (pointed to by VP, with VSIZE limbs), and store the result at
+ PRODP. USIZE + VSIZE limbs are always stored, but if the input
+ operands are normalized. Return the most significant limb of the
+ result.
+
+ NOTE: The space pointed to by PRODP is overwritten before finished
+ with U and V, so overlap is an error.
+
+ Argument constraints:
+ 1. USIZE >= VSIZE.
+ 2. PRODP != UP and PRODP != VP, i.e. the destination
+ must be distinct from the multiplier and the multiplicand. */
+
+/* If KARATSUBA_THRESHOLD is not already defined, define it to a
+ value which is good on most machines. */
+#ifndef KARATSUBA_THRESHOLD
+#define KARATSUBA_THRESHOLD 32
+#endif
+
+mp_limb_t
+mpn_mul (mp_ptr prodp,
+ mp_srcptr up, mp_size_t usize,
+ mp_srcptr vp, mp_size_t vsize)
+{
+ mp_ptr prod_endp = prodp + usize + vsize - 1;
+ mp_limb_t cy;
+ mp_ptr tspace;
+ TMP_DECL (marker);
+
+ if (vsize < KARATSUBA_THRESHOLD)
+ {
+ /* Handle simple cases with traditional multiplication.
+
+ This is the most critical code of the entire function. All
+ multiplies rely on this, both small and huge. Small ones arrive
+ here immediately. Huge ones arrive here as this is the base case
+ for Karatsuba's recursive algorithm below. */
+ mp_size_t i;
+ mp_limb_t cy_limb;
+ mp_limb_t v_limb;
+
+ if (vsize == 0)
+ return 0;
+
+ /* Multiply by the first limb in V separately, as the result can be
+ stored (not added) to PROD. We also avoid a loop for zeroing. */
+ v_limb = vp[0];
+ if (v_limb <= 1)
+ {
+ if (v_limb == 1)
+ MPN_COPY (prodp, up, usize);
+ else
+ MPN_ZERO (prodp, usize);
+ cy_limb = 0;
+ }
+ else
+ cy_limb = mpn_mul_1 (prodp, up, usize, v_limb);
+
+ prodp[usize] = cy_limb;
+ prodp++;
+
+ /* For each iteration in the outer loop, multiply one limb from
+ U with one limb from V, and add it to PROD. */
+ for (i = 1; i < vsize; i++)
+ {
+ v_limb = vp[i];
+ if (v_limb <= 1)
+ {
+ cy_limb = 0;
+ if (v_limb == 1)
+ cy_limb = mpn_add_n (prodp, prodp, up, usize);
+ }
+ else
+ cy_limb = mpn_addmul_1 (prodp, up, usize, v_limb);
+
+ prodp[usize] = cy_limb;
+ prodp++;
+ }
+ return cy_limb;
+ }
+
+ TMP_MARK (marker);
+
+ tspace = (mp_ptr) TMP_ALLOC (2 * vsize * BYTES_PER_MP_LIMB);
+ MPN_MUL_N_RECURSE (prodp, up, vp, vsize, tspace);
+
+ prodp += vsize;
+ up += vsize;
+ usize -= vsize;
+ if (usize >= vsize)
+ {
+ mp_ptr tp = (mp_ptr) TMP_ALLOC (2 * vsize * BYTES_PER_MP_LIMB);
+ do
+ {
+ MPN_MUL_N_RECURSE (tp, up, vp, vsize, tspace);
+ cy = mpn_add_n (prodp, prodp, tp, vsize);
+ mpn_add_1 (prodp + vsize, tp + vsize, vsize, cy);
+ prodp += vsize;
+ up += vsize;
+ usize -= vsize;
+ }
+ while (usize >= vsize);
+ }
+
+ /* True: usize < vsize. */
+
+ /* Make life simple: Recurse. */
+
+ if (usize != 0)
+ {
+ mpn_mul (tspace, vp, vsize, up, usize);
+ cy = mpn_add_n (prodp, prodp, tspace, vsize);
+ mpn_add_1 (prodp + vsize, tspace + vsize, usize, cy);
+ }
+
+ TMP_FREE (marker);
+ return *prod_endp;
+}
diff --git a/REORG.TODO/stdlib/mul_1.c b/REORG.TODO/stdlib/mul_1.c
new file mode 100644
index 0000000000..2c590d2741
--- /dev/null
+++ b/REORG.TODO/stdlib/mul_1.c
@@ -0,0 +1,55 @@
+/* mpn_mul_1 -- Multiply a limb vector with a single limb and
+ store the product in a second limb vector.
+
+Copyright (C) 1991-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP 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 MP 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 MP Library; see the file COPYING.LIB. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+#include "longlong.h"
+
+mp_limb_t
+mpn_mul_1 (register mp_ptr res_ptr, register mp_srcptr s1_ptr,
+ mp_size_t s1_size, register mp_limb_t s2_limb)
+{
+ register mp_limb_t cy_limb;
+ register mp_size_t j;
+ register mp_limb_t prod_high, prod_low;
+
+ /* The loop counter and index J goes from -S1_SIZE to -1. This way
+ the loop becomes faster. */
+ j = -s1_size;
+
+ /* Offset the base pointers to compensate for the negative indices. */
+ s1_ptr -= j;
+ res_ptr -= j;
+
+ cy_limb = 0;
+ do
+ {
+ umul_ppmm (prod_high, prod_low, s1_ptr[j], s2_limb);
+
+ prod_low += cy_limb;
+ cy_limb = (prod_low < cy_limb) + prod_high;
+
+ res_ptr[j] = prod_low;
+ }
+ while (++j != 0);
+
+ return cy_limb;
+}
diff --git a/REORG.TODO/stdlib/mul_n.c b/REORG.TODO/stdlib/mul_n.c
new file mode 100644
index 0000000000..cf243242cc
--- /dev/null
+++ b/REORG.TODO/stdlib/mul_n.c
@@ -0,0 +1,360 @@
+/* mpn_mul_n -- Multiply two natural numbers of length n.
+
+Copyright (C) 1991-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP 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 MP 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 MP Library; see the file COPYING.LIB. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+
+/* Multiply the natural numbers u (pointed to by UP) and v (pointed to by VP),
+ both with SIZE limbs, and store the result at PRODP. 2 * SIZE limbs are
+ always stored. Return the most significant limb.
+
+ Argument constraints:
+ 1. PRODP != UP and PRODP != VP, i.e. the destination
+ must be distinct from the multiplier and the multiplicand. */
+
+/* If KARATSUBA_THRESHOLD is not already defined, define it to a
+ value which is good on most machines. */
+#ifndef KARATSUBA_THRESHOLD
+#define KARATSUBA_THRESHOLD 32
+#endif
+
+/* The code can't handle KARATSUBA_THRESHOLD smaller than 2. */
+#if KARATSUBA_THRESHOLD < 2
+#undef KARATSUBA_THRESHOLD
+#define KARATSUBA_THRESHOLD 2
+#endif
+
+/* Handle simple cases with traditional multiplication.
+
+ This is the most critical code of multiplication. All multiplies rely
+ on this, both small and huge. Small ones arrive here immediately. Huge
+ ones arrive here as this is the base case for Karatsuba's recursive
+ algorithm below. */
+
+void
+impn_mul_n_basecase (mp_ptr prodp, mp_srcptr up, mp_srcptr vp, mp_size_t size)
+{
+ mp_size_t i;
+ mp_limb_t cy_limb;
+ mp_limb_t v_limb;
+
+ /* Multiply by the first limb in V separately, as the result can be
+ stored (not added) to PROD. We also avoid a loop for zeroing. */
+ v_limb = vp[0];
+ if (v_limb <= 1)
+ {
+ if (v_limb == 1)
+ MPN_COPY (prodp, up, size);
+ else
+ MPN_ZERO (prodp, size);
+ cy_limb = 0;
+ }
+ else
+ cy_limb = mpn_mul_1 (prodp, up, size, v_limb);
+
+ prodp[size] = cy_limb;
+ prodp++;
+
+ /* For each iteration in the outer loop, multiply one limb from
+ U with one limb from V, and add it to PROD. */
+ for (i = 1; i < size; i++)
+ {
+ v_limb = vp[i];
+ if (v_limb <= 1)
+ {
+ cy_limb = 0;
+ if (v_limb == 1)
+ cy_limb = mpn_add_n (prodp, prodp, up, size);
+ }
+ else
+ cy_limb = mpn_addmul_1 (prodp, up, size, v_limb);
+
+ prodp[size] = cy_limb;
+ prodp++;
+ }
+}
+
+void
+impn_mul_n (mp_ptr prodp,
+ mp_srcptr up, mp_srcptr vp, mp_size_t size, mp_ptr tspace)
+{
+ if ((size & 1) != 0)
+ {
+ /* The size is odd, the code code below doesn't handle that.
+ Multiply the least significant (size - 1) limbs with a recursive
+ call, and handle the most significant limb of S1 and S2
+ separately. */
+ /* A slightly faster way to do this would be to make the Karatsuba
+ code below behave as if the size were even, and let it check for
+ odd size in the end. I.e., in essence move this code to the end.
+ Doing so would save us a recursive call, and potentially make the
+ stack grow a lot less. */
+
+ mp_size_t esize = size - 1; /* even size */
+ mp_limb_t cy_limb;
+
+ MPN_MUL_N_RECURSE (prodp, up, vp, esize, tspace);
+ cy_limb = mpn_addmul_1 (prodp + esize, up, esize, vp[esize]);
+ prodp[esize + esize] = cy_limb;
+ cy_limb = mpn_addmul_1 (prodp + esize, vp, size, up[esize]);
+
+ prodp[esize + size] = cy_limb;
+ }
+ else
+ {
+ /* Anatolij Alekseevich Karatsuba's divide-and-conquer algorithm.
+
+ Split U in two pieces, U1 and U0, such that
+ U = U0 + U1*(B**n),
+ and V in V1 and V0, such that
+ V = V0 + V1*(B**n).
+
+ UV is then computed recursively using the identity
+
+ 2n n n n
+ UV = (B + B )U V + B (U -U )(V -V ) + (B + 1)U V
+ 1 1 1 0 0 1 0 0
+
+ Where B = 2**BITS_PER_MP_LIMB. */
+
+ mp_size_t hsize = size >> 1;
+ mp_limb_t cy;
+ int negflg;
+
+ /*** Product H. ________________ ________________
+ |_____U1 x V1____||____U0 x V0_____| */
+ /* Put result in upper part of PROD and pass low part of TSPACE
+ as new TSPACE. */
+ MPN_MUL_N_RECURSE (prodp + size, up + hsize, vp + hsize, hsize, tspace);
+
+ /*** Product M. ________________
+ |_(U1-U0)(V0-V1)_| */
+ if (mpn_cmp (up + hsize, up, hsize) >= 0)
+ {
+ mpn_sub_n (prodp, up + hsize, up, hsize);
+ negflg = 0;
+ }
+ else
+ {
+ mpn_sub_n (prodp, up, up + hsize, hsize);
+ negflg = 1;
+ }
+ if (mpn_cmp (vp + hsize, vp, hsize) >= 0)
+ {
+ mpn_sub_n (prodp + hsize, vp + hsize, vp, hsize);
+ negflg ^= 1;
+ }
+ else
+ {
+ mpn_sub_n (prodp + hsize, vp, vp + hsize, hsize);
+ /* No change of NEGFLG. */
+ }
+ /* Read temporary operands from low part of PROD.
+ Put result in low part of TSPACE using upper part of TSPACE
+ as new TSPACE. */
+ MPN_MUL_N_RECURSE (tspace, prodp, prodp + hsize, hsize, tspace + size);
+
+ /*** Add/copy product H. */
+ MPN_COPY (prodp + hsize, prodp + size, hsize);
+ cy = mpn_add_n (prodp + size, prodp + size, prodp + size + hsize, hsize);
+
+ /*** Add product M (if NEGFLG M is a negative number). */
+ if (negflg)
+ cy -= mpn_sub_n (prodp + hsize, prodp + hsize, tspace, size);
+ else
+ cy += mpn_add_n (prodp + hsize, prodp + hsize, tspace, size);
+
+ /*** Product L. ________________ ________________
+ |________________||____U0 x V0_____| */
+ /* Read temporary operands from low part of PROD.
+ Put result in low part of TSPACE using upper part of TSPACE
+ as new TSPACE. */
+ MPN_MUL_N_RECURSE (tspace, up, vp, hsize, tspace + size);
+
+ /*** Add/copy Product L (twice). */
+
+ cy += mpn_add_n (prodp + hsize, prodp + hsize, tspace, size);
+ if (cy)
+ mpn_add_1 (prodp + hsize + size, prodp + hsize + size, hsize, cy);
+
+ MPN_COPY (prodp, tspace, hsize);
+ cy = mpn_add_n (prodp + hsize, prodp + hsize, tspace + hsize, hsize);
+ if (cy)
+ mpn_add_1 (prodp + size, prodp + size, size, 1);
+ }
+}
+
+void
+impn_sqr_n_basecase (mp_ptr prodp, mp_srcptr up, mp_size_t size)
+{
+ mp_size_t i;
+ mp_limb_t cy_limb;
+ mp_limb_t v_limb;
+
+ /* Multiply by the first limb in V separately, as the result can be
+ stored (not added) to PROD. We also avoid a loop for zeroing. */
+ v_limb = up[0];
+ if (v_limb <= 1)
+ {
+ if (v_limb == 1)
+ MPN_COPY (prodp, up, size);
+ else
+ MPN_ZERO (prodp, size);
+ cy_limb = 0;
+ }
+ else
+ cy_limb = mpn_mul_1 (prodp, up, size, v_limb);
+
+ prodp[size] = cy_limb;
+ prodp++;
+
+ /* For each iteration in the outer loop, multiply one limb from
+ U with one limb from V, and add it to PROD. */
+ for (i = 1; i < size; i++)
+ {
+ v_limb = up[i];
+ if (v_limb <= 1)
+ {
+ cy_limb = 0;
+ if (v_limb == 1)
+ cy_limb = mpn_add_n (prodp, prodp, up, size);
+ }
+ else
+ cy_limb = mpn_addmul_1 (prodp, up, size, v_limb);
+
+ prodp[size] = cy_limb;
+ prodp++;
+ }
+}
+
+void
+impn_sqr_n (mp_ptr prodp,
+ mp_srcptr up, mp_size_t size, mp_ptr tspace)
+{
+ if ((size & 1) != 0)
+ {
+ /* The size is odd, the code code below doesn't handle that.
+ Multiply the least significant (size - 1) limbs with a recursive
+ call, and handle the most significant limb of S1 and S2
+ separately. */
+ /* A slightly faster way to do this would be to make the Karatsuba
+ code below behave as if the size were even, and let it check for
+ odd size in the end. I.e., in essence move this code to the end.
+ Doing so would save us a recursive call, and potentially make the
+ stack grow a lot less. */
+
+ mp_size_t esize = size - 1; /* even size */
+ mp_limb_t cy_limb;
+
+ MPN_SQR_N_RECURSE (prodp, up, esize, tspace);
+ cy_limb = mpn_addmul_1 (prodp + esize, up, esize, up[esize]);
+ prodp[esize + esize] = cy_limb;
+ cy_limb = mpn_addmul_1 (prodp + esize, up, size, up[esize]);
+
+ prodp[esize + size] = cy_limb;
+ }
+ else
+ {
+ mp_size_t hsize = size >> 1;
+ mp_limb_t cy;
+
+ /*** Product H. ________________ ________________
+ |_____U1 x U1____||____U0 x U0_____| */
+ /* Put result in upper part of PROD and pass low part of TSPACE
+ as new TSPACE. */
+ MPN_SQR_N_RECURSE (prodp + size, up + hsize, hsize, tspace);
+
+ /*** Product M. ________________
+ |_(U1-U0)(U0-U1)_| */
+ if (mpn_cmp (up + hsize, up, hsize) >= 0)
+ {
+ mpn_sub_n (prodp, up + hsize, up, hsize);
+ }
+ else
+ {
+ mpn_sub_n (prodp, up, up + hsize, hsize);
+ }
+
+ /* Read temporary operands from low part of PROD.
+ Put result in low part of TSPACE using upper part of TSPACE
+ as new TSPACE. */
+ MPN_SQR_N_RECURSE (tspace, prodp, hsize, tspace + size);
+
+ /*** Add/copy product H. */
+ MPN_COPY (prodp + hsize, prodp + size, hsize);
+ cy = mpn_add_n (prodp + size, prodp + size, prodp + size + hsize, hsize);
+
+ /*** Add product M (if NEGFLG M is a negative number). */
+ cy -= mpn_sub_n (prodp + hsize, prodp + hsize, tspace, size);
+
+ /*** Product L. ________________ ________________
+ |________________||____U0 x U0_____| */
+ /* Read temporary operands from low part of PROD.
+ Put result in low part of TSPACE using upper part of TSPACE
+ as new TSPACE. */
+ MPN_SQR_N_RECURSE (tspace, up, hsize, tspace + size);
+
+ /*** Add/copy Product L (twice). */
+
+ cy += mpn_add_n (prodp + hsize, prodp + hsize, tspace, size);
+ if (cy)
+ mpn_add_1 (prodp + hsize + size, prodp + hsize + size, hsize, cy);
+
+ MPN_COPY (prodp, tspace, hsize);
+ cy = mpn_add_n (prodp + hsize, prodp + hsize, tspace + hsize, hsize);
+ if (cy)
+ mpn_add_1 (prodp + size, prodp + size, size, 1);
+ }
+}
+
+/* This should be made into an inline function in gmp.h. */
+void
+mpn_mul_n (mp_ptr prodp, mp_srcptr up, mp_srcptr vp, mp_size_t size)
+{
+ TMP_DECL (marker);
+ TMP_MARK (marker);
+ if (up == vp)
+ {
+ if (size < KARATSUBA_THRESHOLD)
+ {
+ impn_sqr_n_basecase (prodp, up, size);
+ }
+ else
+ {
+ mp_ptr tspace;
+ tspace = (mp_ptr) TMP_ALLOC (2 * size * BYTES_PER_MP_LIMB);
+ impn_sqr_n (prodp, up, size, tspace);
+ }
+ }
+ else
+ {
+ if (size < KARATSUBA_THRESHOLD)
+ {
+ impn_mul_n_basecase (prodp, up, vp, size);
+ }
+ else
+ {
+ mp_ptr tspace;
+ tspace = (mp_ptr) TMP_ALLOC (2 * size * BYTES_PER_MP_LIMB);
+ impn_mul_n (prodp, up, vp, size, tspace);
+ }
+ }
+ TMP_FREE (marker);
+}
diff --git a/REORG.TODO/stdlib/nrand48.c b/REORG.TODO/stdlib/nrand48.c
new file mode 100644
index 0000000000..9fdc62ff5f
--- /dev/null
+++ b/REORG.TODO/stdlib/nrand48.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+
+long int
+nrand48 (unsigned short int xsubi[3])
+{
+ long int result;
+
+ (void) __nrand48_r (xsubi, &__libc_drand48_data, &result);
+
+ return result;
+}
diff --git a/REORG.TODO/stdlib/nrand48_r.c b/REORG.TODO/stdlib/nrand48_r.c
new file mode 100644
index 0000000000..e6f385d907
--- /dev/null
+++ b/REORG.TODO/stdlib/nrand48_r.c
@@ -0,0 +1,37 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+int
+__nrand48_r (unsigned short int xsubi[3], struct drand48_data *buffer,
+ long int *result)
+{
+ /* Compute next state. */
+ if (__drand48_iterate (xsubi, buffer) < 0)
+ return -1;
+
+ /* Store the result. */
+ if (sizeof (unsigned short int) == 2)
+ *result = xsubi[2] << 15 | xsubi[1] >> 1;
+ else
+ *result = xsubi[2] >> 1;
+
+ return 0;
+}
+weak_alias (__nrand48_r, nrand48_r)
diff --git a/REORG.TODO/stdlib/old_atexit.c b/REORG.TODO/stdlib/old_atexit.c
new file mode 100644
index 0000000000..44bbd699bd
--- /dev/null
+++ b/REORG.TODO/stdlib/old_atexit.c
@@ -0,0 +1,8 @@
+#include <shlib-compat.h>
+
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2_2)
+# define atexit attribute_compat_text_section __dyn_atexit
+# include "atexit.c"
+# undef atexit
+compat_symbol (libc, __dyn_atexit, atexit, GLIBC_2_0);
+#endif
diff --git a/REORG.TODO/stdlib/on_exit.c b/REORG.TODO/stdlib/on_exit.c
new file mode 100644
index 0000000000..83845e76d8
--- /dev/null
+++ b/REORG.TODO/stdlib/on_exit.c
@@ -0,0 +1,41 @@
+/* Copyright (C) 1991-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include "exit.h"
+#include <atomic.h>
+#include <sysdep.h>
+
+/* Register a function to be called by exit. */
+int
+__on_exit (void (*func) (int status, void *arg), void *arg)
+{
+ struct exit_function *new = __new_exitfn (&__exit_funcs);
+
+ if (new == NULL)
+ return -1;
+
+#ifdef PTR_MANGLE
+ PTR_MANGLE (func);
+#endif
+ new->func.on.fn = func;
+ new->func.on.arg = arg;
+ atomic_write_barrier ();
+ new->flavor = ef_on;
+ return 0;
+}
+weak_alias (__on_exit, on_exit)
diff --git a/REORG.TODO/stdlib/putenv.c b/REORG.TODO/stdlib/putenv.c
new file mode 100644
index 0000000000..c0488fc505
--- /dev/null
+++ b/REORG.TODO/stdlib/putenv.c
@@ -0,0 +1,87 @@
+/* Copyright (C) 1991-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#if defined _AIX && !defined __GNUC__
+ #pragma alloca
+#endif
+
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#if _LIBC || HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+#if _LIBC || HAVE_STRING_H
+# include <string.h>
+#endif
+
+#if !__GNU_LIBRARY__ && !HAVE_STRCHR
+# define strchr index
+#endif
+
+#ifndef _LIBC
+# ifdef HAVE_ALLOCA_H
+# include <alloca.h>
+# else
+# ifdef __GNUC__
+# define alloca __builtin_alloca
+# else
+extern char *alloca ();
+# endif /* __GNUC__ */
+# endif /* HAVE_ALLOCA_H */
+#endif /* _LIBC */
+
+
+/* Put STRING, which is of the form "NAME=VALUE", in the environment. */
+int
+putenv (char *string)
+{
+ const char *const name_end = strchr (string, '=');
+
+ if (name_end != NULL)
+ {
+ char *name;
+#ifdef _LIBC
+ int use_malloc = !__libc_use_alloca (name_end - string + 1);
+ if (__builtin_expect (use_malloc, 0))
+ {
+ name = __strndup (string, name_end - string);
+ if (name == NULL)
+ return -1;
+ }
+ else
+ name = strndupa (string, name_end - string);
+#else
+# define use_malloc 1
+ name = malloc (name_end - string + 1);
+ if (name == NULL)
+ return -1;
+ memcpy (name, string, name_end - string);
+ name[name_end - string] = '\0';
+#endif
+ int result = __add_to_environ (name, NULL, string, 1);
+
+ if (__glibc_unlikely (use_malloc))
+ free (name);
+
+ return result;
+ }
+
+ __unsetenv (string);
+ return 0;
+}
diff --git a/REORG.TODO/stdlib/qsort.c b/REORG.TODO/stdlib/qsort.c
new file mode 100644
index 0000000000..9badf33ec0
--- /dev/null
+++ b/REORG.TODO/stdlib/qsort.c
@@ -0,0 +1,249 @@
+/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Written by Douglas C. Schmidt (schmidt@ics.uci.edu).
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+/* If you consider tuning this algorithm, you should consult first:
+ Engineering a sort function; Jon Bentley and M. Douglas McIlroy;
+ Software - Practice and Experience; Vol. 23 (11), 1249-1265, 1993. */
+
+#include <alloca.h>
+#include <limits.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* Byte-wise swap two items of size SIZE. */
+#define SWAP(a, b, size) \
+ do \
+ { \
+ size_t __size = (size); \
+ char *__a = (a), *__b = (b); \
+ do \
+ { \
+ char __tmp = *__a; \
+ *__a++ = *__b; \
+ *__b++ = __tmp; \
+ } while (--__size > 0); \
+ } while (0)
+
+/* Discontinue quicksort algorithm when partition gets below this size.
+ This particular magic number was chosen to work best on a Sun 4/260. */
+#define MAX_THRESH 4
+
+/* Stack node declarations used to store unfulfilled partition obligations. */
+typedef struct
+ {
+ char *lo;
+ char *hi;
+ } stack_node;
+
+/* The next 4 #defines implement a very fast in-line stack abstraction. */
+/* The stack needs log (total_elements) entries (we could even subtract
+ log(MAX_THRESH)). Since total_elements has type size_t, we get as
+ upper bound for log (total_elements):
+ bits per byte (CHAR_BIT) * sizeof(size_t). */
+#define STACK_SIZE (CHAR_BIT * sizeof(size_t))
+#define PUSH(low, high) ((void) ((top->lo = (low)), (top->hi = (high)), ++top))
+#define POP(low, high) ((void) (--top, (low = top->lo), (high = top->hi)))
+#define STACK_NOT_EMPTY (stack < top)
+
+
+/* Order size using quicksort. This implementation incorporates
+ four optimizations discussed in Sedgewick:
+
+ 1. Non-recursive, using an explicit stack of pointer that store the
+ next array partition to sort. To save time, this maximum amount
+ of space required to store an array of SIZE_MAX is allocated on the
+ stack. Assuming a 32-bit (64 bit) integer for size_t, this needs
+ only 32 * sizeof(stack_node) == 256 bytes (for 64 bit: 1024 bytes).
+ Pretty cheap, actually.
+
+ 2. Chose the pivot element using a median-of-three decision tree.
+ This reduces the probability of selecting a bad pivot value and
+ eliminates certain extraneous comparisons.
+
+ 3. Only quicksorts TOTAL_ELEMS / MAX_THRESH partitions, leaving
+ insertion sort to order the MAX_THRESH items within each partition.
+ This is a big win, since insertion sort is faster for small, mostly
+ sorted array segments.
+
+ 4. The larger of the two sub-partitions is always pushed onto the
+ stack first, with the algorithm then concentrating on the
+ smaller partition. This *guarantees* no more than log (total_elems)
+ stack size is needed (actually O(1) in this case)! */
+
+void
+_quicksort (void *const pbase, size_t total_elems, size_t size,
+ __compar_d_fn_t cmp, void *arg)
+{
+ char *base_ptr = (char *) pbase;
+
+ const size_t max_thresh = MAX_THRESH * size;
+
+ if (total_elems == 0)
+ /* Avoid lossage with unsigned arithmetic below. */
+ return;
+
+ if (total_elems > MAX_THRESH)
+ {
+ char *lo = base_ptr;
+ char *hi = &lo[size * (total_elems - 1)];
+ stack_node stack[STACK_SIZE];
+ stack_node *top = stack;
+
+ PUSH (NULL, NULL);
+
+ while (STACK_NOT_EMPTY)
+ {
+ char *left_ptr;
+ char *right_ptr;
+
+ /* Select median value from among LO, MID, and HI. Rearrange
+ LO and HI so the three values are sorted. This lowers the
+ probability of picking a pathological pivot value and
+ skips a comparison for both the LEFT_PTR and RIGHT_PTR in
+ the while loops. */
+
+ char *mid = lo + size * ((hi - lo) / size >> 1);
+
+ if ((*cmp) ((void *) mid, (void *) lo, arg) < 0)
+ SWAP (mid, lo, size);
+ if ((*cmp) ((void *) hi, (void *) mid, arg) < 0)
+ SWAP (mid, hi, size);
+ else
+ goto jump_over;
+ if ((*cmp) ((void *) mid, (void *) lo, arg) < 0)
+ SWAP (mid, lo, size);
+ jump_over:;
+
+ left_ptr = lo + size;
+ right_ptr = hi - size;
+
+ /* Here's the famous ``collapse the walls'' section of quicksort.
+ Gotta like those tight inner loops! They are the main reason
+ that this algorithm runs much faster than others. */
+ do
+ {
+ while ((*cmp) ((void *) left_ptr, (void *) mid, arg) < 0)
+ left_ptr += size;
+
+ while ((*cmp) ((void *) mid, (void *) right_ptr, arg) < 0)
+ right_ptr -= size;
+
+ if (left_ptr < right_ptr)
+ {
+ SWAP (left_ptr, right_ptr, size);
+ if (mid == left_ptr)
+ mid = right_ptr;
+ else if (mid == right_ptr)
+ mid = left_ptr;
+ left_ptr += size;
+ right_ptr -= size;
+ }
+ else if (left_ptr == right_ptr)
+ {
+ left_ptr += size;
+ right_ptr -= size;
+ break;
+ }
+ }
+ while (left_ptr <= right_ptr);
+
+ /* Set up pointers for next iteration. First determine whether
+ left and right partitions are below the threshold size. If so,
+ ignore one or both. Otherwise, push the larger partition's
+ bounds on the stack and continue sorting the smaller one. */
+
+ if ((size_t) (right_ptr - lo) <= max_thresh)
+ {
+ if ((size_t) (hi - left_ptr) <= max_thresh)
+ /* Ignore both small partitions. */
+ POP (lo, hi);
+ else
+ /* Ignore small left partition. */
+ lo = left_ptr;
+ }
+ else if ((size_t) (hi - left_ptr) <= max_thresh)
+ /* Ignore small right partition. */
+ hi = right_ptr;
+ else if ((right_ptr - lo) > (hi - left_ptr))
+ {
+ /* Push larger left partition indices. */
+ PUSH (lo, right_ptr);
+ lo = left_ptr;
+ }
+ else
+ {
+ /* Push larger right partition indices. */
+ PUSH (left_ptr, hi);
+ hi = right_ptr;
+ }
+ }
+ }
+
+ /* Once the BASE_PTR array is partially sorted by quicksort the rest
+ is completely sorted using insertion sort, since this is efficient
+ for partitions below MAX_THRESH size. BASE_PTR points to the beginning
+ of the array to sort, and END_PTR points at the very last element in
+ the array (*not* one beyond it!). */
+
+#define min(x, y) ((x) < (y) ? (x) : (y))
+
+ {
+ char *const end_ptr = &base_ptr[size * (total_elems - 1)];
+ char *tmp_ptr = base_ptr;
+ char *thresh = min(end_ptr, base_ptr + max_thresh);
+ char *run_ptr;
+
+ /* Find smallest element in first threshold and place it at the
+ array's beginning. This is the smallest array element,
+ and the operation speeds up insertion sort's inner loop. */
+
+ for (run_ptr = tmp_ptr + size; run_ptr <= thresh; run_ptr += size)
+ if ((*cmp) ((void *) run_ptr, (void *) tmp_ptr, arg) < 0)
+ tmp_ptr = run_ptr;
+
+ if (tmp_ptr != base_ptr)
+ SWAP (tmp_ptr, base_ptr, size);
+
+ /* Insertion sort, running from left-hand-side up to right-hand-side. */
+
+ run_ptr = base_ptr + size;
+ while ((run_ptr += size) <= end_ptr)
+ {
+ tmp_ptr = run_ptr - size;
+ while ((*cmp) ((void *) run_ptr, (void *) tmp_ptr, arg) < 0)
+ tmp_ptr -= size;
+
+ tmp_ptr += size;
+ if (tmp_ptr != run_ptr)
+ {
+ char *trav;
+
+ trav = run_ptr + size;
+ while (--trav >= run_ptr)
+ {
+ char c = *trav;
+ char *hi, *lo;
+
+ for (hi = lo = trav; (lo -= size) >= tmp_ptr; hi = lo)
+ *hi = *lo;
+ *hi = c;
+ }
+ }
+ }
+ }
+}
diff --git a/REORG.TODO/stdlib/quick_exit.c b/REORG.TODO/stdlib/quick_exit.c
new file mode 100644
index 0000000000..67ad043727
--- /dev/null
+++ b/REORG.TODO/stdlib/quick_exit.c
@@ -0,0 +1,48 @@
+/* Copyright (C) 2009-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sysdep.h>
+#include <signal.h>
+#include <errno.h>
+#include <shlib-compat.h>
+#include "exit.h"
+
+void
+__new_quick_exit (int status)
+{
+ /* The new quick_exit, following C++11 18.5.12, does not run object
+ destructors. While C11 says nothing about object destructors,
+ since it has none, the intent is to run the registered
+ at_quick_exit handlers and then run _Exit immediately without
+ disturbing the state of the process and threads. */
+ __run_exit_handlers (status, &__quick_exit_funcs, false, false);
+}
+versioned_symbol (libc, __new_quick_exit, quick_exit, GLIBC_2_24);
+
+#if SHLIB_COMPAT(libc, GLIBC_2_10, GLIBC_2_24)
+void
+attribute_compat_text_section
+__old_quick_exit (int status)
+{
+ /* The old quick_exit runs thread_local destructors. */
+ __run_exit_handlers (status, &__quick_exit_funcs, false, true);
+}
+compat_symbol (libc, __old_quick_exit, quick_exit, GLIBC_2_10);
+#endif
diff --git a/REORG.TODO/stdlib/rand.c b/REORG.TODO/stdlib/rand.c
new file mode 100644
index 0000000000..a036319ce7
--- /dev/null
+++ b/REORG.TODO/stdlib/rand.c
@@ -0,0 +1,28 @@
+/* Copyright (C) 1991-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+#undef rand
+
+
+/* Return a random integer between 0 and RAND_MAX. */
+int
+rand (void)
+{
+ return (int) __random ();
+}
diff --git a/REORG.TODO/stdlib/rand_r.c b/REORG.TODO/stdlib/rand_r.c
new file mode 100644
index 0000000000..ca681e8b53
--- /dev/null
+++ b/REORG.TODO/stdlib/rand_r.c
@@ -0,0 +1,48 @@
+/* Reentrant random function from POSIX.1c.
+ Copyright (C) 1996-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+
+/* This algorithm is mentioned in the ISO C standard, here extended
+ for 32 bits. */
+int
+rand_r (unsigned int *seed)
+{
+ unsigned int next = *seed;
+ int result;
+
+ next *= 1103515245;
+ next += 12345;
+ result = (unsigned int) (next / 65536) % 2048;
+
+ next *= 1103515245;
+ next += 12345;
+ result <<= 10;
+ result ^= (unsigned int) (next / 65536) % 1024;
+
+ next *= 1103515245;
+ next += 12345;
+ result <<= 10;
+ result ^= (unsigned int) (next / 65536) % 1024;
+
+ *seed = next;
+
+ return result;
+}
diff --git a/REORG.TODO/stdlib/random.c b/REORG.TODO/stdlib/random.c
new file mode 100644
index 0000000000..43bdb1232e
--- /dev/null
+++ b/REORG.TODO/stdlib/random.c
@@ -0,0 +1,300 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+/*
+ * This is derived from the Berkeley source:
+ * @(#)random.c 5.5 (Berkeley) 7/6/88
+ * It was reworked for the GNU C Library by Roland McGrath.
+ * Rewritten to use reentrant functions by Ulrich Drepper, 1995.
+ */
+
+/*
+ Copyright (C) 1983 Regents of the University of California.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 4. Neither the name of the University nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.*/
+
+#include <libc-lock.h>
+#include <limits.h>
+#include <stddef.h>
+#include <stdlib.h>
+
+
+/* An improved random number generation package. In addition to the standard
+ rand()/srand() like interface, this package also has a special state info
+ interface. The initstate() routine is called with a seed, an array of
+ bytes, and a count of how many bytes are being passed in; this array is
+ then initialized to contain information for random number generation with
+ that much state information. Good sizes for the amount of state
+ information are 32, 64, 128, and 256 bytes. The state can be switched by
+ calling the setstate() function with the same array as was initialized
+ with initstate(). By default, the package runs with 128 bytes of state
+ information and generates far better random numbers than a linear
+ congruential generator. If the amount of state information is less than
+ 32 bytes, a simple linear congruential R.N.G. is used. Internally, the
+ state information is treated as an array of longs; the zeroth element of
+ the array is the type of R.N.G. being used (small integer); the remainder
+ of the array is the state information for the R.N.G. Thus, 32 bytes of
+ state information will give 7 longs worth of state information, which will
+ allow a degree seven polynomial. (Note: The zeroth word of state
+ information also has some other information stored in it; see setstate
+ for details). The random number generation technique is a linear feedback
+ shift register approach, employing trinomials (since there are fewer terms
+ to sum up that way). In this approach, the least significant bit of all
+ the numbers in the state table will act as a linear feedback shift register,
+ and will have period 2^deg - 1 (where deg is the degree of the polynomial
+ being used, assuming that the polynomial is irreducible and primitive).
+ The higher order bits will have longer periods, since their values are
+ also influenced by pseudo-random carries out of the lower bits. The
+ total period of the generator is approximately deg*(2**deg - 1); thus
+ doubling the amount of state information has a vast influence on the
+ period of the generator. Note: The deg*(2**deg - 1) is an approximation
+ only good for large deg, when the period of the shift register is the
+ dominant factor. With deg equal to seven, the period is actually much
+ longer than the 7*(2**7 - 1) predicted by this formula. */
+
+
+
+/* For each of the currently supported random number generators, we have a
+ break value on the amount of state information (you need at least this many
+ bytes of state info to support this random number generator), a degree for
+ the polynomial (actually a trinomial) that the R.N.G. is based on, and
+ separation between the two lower order coefficients of the trinomial. */
+
+/* Linear congruential. */
+#define TYPE_0 0
+#define BREAK_0 8
+#define DEG_0 0
+#define SEP_0 0
+
+/* x**7 + x**3 + 1. */
+#define TYPE_1 1
+#define BREAK_1 32
+#define DEG_1 7
+#define SEP_1 3
+
+/* x**15 + x + 1. */
+#define TYPE_2 2
+#define BREAK_2 64
+#define DEG_2 15
+#define SEP_2 1
+
+/* x**31 + x**3 + 1. */
+#define TYPE_3 3
+#define BREAK_3 128
+#define DEG_3 31
+#define SEP_3 3
+
+/* x**63 + x + 1. */
+#define TYPE_4 4
+#define BREAK_4 256
+#define DEG_4 63
+#define SEP_4 1
+
+
+/* Array versions of the above information to make code run faster.
+ Relies on fact that TYPE_i == i. */
+
+#define MAX_TYPES 5 /* Max number of types above. */
+
+
+/* Initially, everything is set up as if from:
+ initstate(1, randtbl, 128);
+ Note that this initialization takes advantage of the fact that srandom
+ advances the front and rear pointers 10*rand_deg times, and hence the
+ rear pointer which starts at 0 will also end up at zero; thus the zeroth
+ element of the state information, which contains info about the current
+ position of the rear pointer is just
+ (MAX_TYPES * (rptr - state)) + TYPE_3 == TYPE_3. */
+
+static int32_t randtbl[DEG_3 + 1] =
+ {
+ TYPE_3,
+
+ -1726662223, 379960547, 1735697613, 1040273694, 1313901226,
+ 1627687941, -179304937, -2073333483, 1780058412, -1989503057,
+ -615974602, 344556628, 939512070, -1249116260, 1507946756,
+ -812545463, 154635395, 1388815473, -1926676823, 525320961,
+ -1009028674, 968117788, -123449607, 1284210865, 435012392,
+ -2017506339, -911064859, -370259173, 1132637927, 1398500161,
+ -205601318,
+ };
+
+
+static struct random_data unsafe_state =
+ {
+/* FPTR and RPTR are two pointers into the state info, a front and a rear
+ pointer. These two pointers are always rand_sep places apart, as they
+ cycle through the state information. (Yes, this does mean we could get
+ away with just one pointer, but the code for random is more efficient
+ this way). The pointers are left positioned as they would be from the call:
+ initstate(1, randtbl, 128);
+ (The position of the rear pointer, rptr, is really 0 (as explained above
+ in the initialization of randtbl) because the state table pointer is set
+ to point to randtbl[1] (as explained below).) */
+
+ .fptr = &randtbl[SEP_3 + 1],
+ .rptr = &randtbl[1],
+
+/* The following things are the pointer to the state information table,
+ the type of the current generator, the degree of the current polynomial
+ being used, and the separation between the two pointers.
+ Note that for efficiency of random, we remember the first location of
+ the state information, not the zeroth. Hence it is valid to access
+ state[-1], which is used to store the type of the R.N.G.
+ Also, we remember the last location, since this is more efficient than
+ indexing every time to find the address of the last element to see if
+ the front and rear pointers have wrapped. */
+
+ .state = &randtbl[1],
+
+ .rand_type = TYPE_3,
+ .rand_deg = DEG_3,
+ .rand_sep = SEP_3,
+
+ .end_ptr = &randtbl[sizeof (randtbl) / sizeof (randtbl[0])]
+};
+
+/* POSIX.1c requires that there is mutual exclusion for the `rand' and
+ `srand' functions to prevent concurrent calls from modifying common
+ data. */
+__libc_lock_define_initialized (static, lock)
+
+/* Initialize the random number generator based on the given seed. If the
+ type is the trivial no-state-information type, just remember the seed.
+ Otherwise, initializes state[] based on the given "seed" via a linear
+ congruential generator. Then, the pointers are set to known locations
+ that are exactly rand_sep places apart. Lastly, it cycles the state
+ information a given number of times to get rid of any initial dependencies
+ introduced by the L.C.R.N.G. Note that the initialization of randtbl[]
+ for default usage relies on values produced by this routine. */
+void
+__srandom (unsigned int x)
+{
+ __libc_lock_lock (lock);
+ (void) __srandom_r (x, &unsafe_state);
+ __libc_lock_unlock (lock);
+}
+
+weak_alias (__srandom, srandom)
+weak_alias (__srandom, srand)
+
+/* Initialize the state information in the given array of N bytes for
+ future random number generation. Based on the number of bytes we
+ are given, and the break values for the different R.N.G.'s, we choose
+ the best (largest) one we can and set things up for it. srandom is
+ then called to initialize the state information. Note that on return
+ from srandom, we set state[-1] to be the type multiplexed with the current
+ value of the rear pointer; this is so successive calls to initstate won't
+ lose this information and will be able to restart with setstate.
+ Note: The first thing we do is save the current state, if any, just like
+ setstate so that it doesn't matter when initstate is called.
+ Returns a pointer to the old state. */
+char *
+__initstate (unsigned int seed, char *arg_state, size_t n)
+{
+ int32_t *ostate;
+ int ret;
+
+ __libc_lock_lock (lock);
+
+ ostate = &unsafe_state.state[-1];
+
+ ret = __initstate_r (seed, arg_state, n, &unsafe_state);
+
+ __libc_lock_unlock (lock);
+
+ return ret == -1 ? NULL : (char *) ostate;
+}
+
+weak_alias (__initstate, initstate)
+
+/* Restore the state from the given state array.
+ Note: It is important that we also remember the locations of the pointers
+ in the current state information, and restore the locations of the pointers
+ from the old state information. This is done by multiplexing the pointer
+ location into the zeroth word of the state information. Note that due
+ to the order in which things are done, it is OK to call setstate with the
+ same state as the current state
+ Returns a pointer to the old state information. */
+char *
+__setstate (char *arg_state)
+{
+ int32_t *ostate;
+
+ __libc_lock_lock (lock);
+
+ ostate = &unsafe_state.state[-1];
+
+ if (__setstate_r (arg_state, &unsafe_state) < 0)
+ ostate = NULL;
+
+ __libc_lock_unlock (lock);
+
+ return (char *) ostate;
+}
+
+weak_alias (__setstate, setstate)
+
+/* If we are using the trivial TYPE_0 R.N.G., just do the old linear
+ congruential bit. Otherwise, we do our fancy trinomial stuff, which is the
+ same in all the other cases due to all the global variables that have been
+ set up. The basic operation is to add the number at the rear pointer into
+ the one at the front pointer. Then both pointers are advanced to the next
+ location cyclically in the table. The value returned is the sum generated,
+ reduced to 31 bits by throwing away the "least random" low bit.
+ Note: The code takes advantage of the fact that both the front and
+ rear pointers can't wrap on the same call by not testing the rear
+ pointer if the front one has wrapped. Returns a 31-bit random number. */
+
+long int
+__random (void)
+{
+ int32_t retval;
+
+ __libc_lock_lock (lock);
+
+ (void) __random_r (&unsafe_state, &retval);
+
+ __libc_lock_unlock (lock);
+
+ return retval;
+}
+
+weak_alias (__random, random)
diff --git a/REORG.TODO/stdlib/random_r.c b/REORG.TODO/stdlib/random_r.c
new file mode 100644
index 0000000000..c3f6f9aede
--- /dev/null
+++ b/REORG.TODO/stdlib/random_r.c
@@ -0,0 +1,401 @@
+/*
+ Copyright (C) 1995-2017 Free Software Foundation, Inc.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+/*
+ Copyright (C) 1983 Regents of the University of California.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 4. Neither the name of the University nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.*/
+
+/*
+ * This is derived from the Berkeley source:
+ * @(#)random.c 5.5 (Berkeley) 7/6/88
+ * It was reworked for the GNU C Library by Roland McGrath.
+ * Rewritten to be reentrant by Ulrich Drepper, 1995
+ */
+
+#include <errno.h>
+#include <limits.h>
+#include <stddef.h>
+#include <stdlib.h>
+
+
+/* An improved random number generation package. In addition to the standard
+ rand()/srand() like interface, this package also has a special state info
+ interface. The initstate() routine is called with a seed, an array of
+ bytes, and a count of how many bytes are being passed in; this array is
+ then initialized to contain information for random number generation with
+ that much state information. Good sizes for the amount of state
+ information are 32, 64, 128, and 256 bytes. The state can be switched by
+ calling the setstate() function with the same array as was initialized
+ with initstate(). By default, the package runs with 128 bytes of state
+ information and generates far better random numbers than a linear
+ congruential generator. If the amount of state information is less than
+ 32 bytes, a simple linear congruential R.N.G. is used. Internally, the
+ state information is treated as an array of longs; the zeroth element of
+ the array is the type of R.N.G. being used (small integer); the remainder
+ of the array is the state information for the R.N.G. Thus, 32 bytes of
+ state information will give 7 longs worth of state information, which will
+ allow a degree seven polynomial. (Note: The zeroth word of state
+ information also has some other information stored in it; see setstate
+ for details). The random number generation technique is a linear feedback
+ shift register approach, employing trinomials (since there are fewer terms
+ to sum up that way). In this approach, the least significant bit of all
+ the numbers in the state table will act as a linear feedback shift register,
+ and will have period 2^deg - 1 (where deg is the degree of the polynomial
+ being used, assuming that the polynomial is irreducible and primitive).
+ The higher order bits will have longer periods, since their values are
+ also influenced by pseudo-random carries out of the lower bits. The
+ total period of the generator is approximately deg*(2**deg - 1); thus
+ doubling the amount of state information has a vast influence on the
+ period of the generator. Note: The deg*(2**deg - 1) is an approximation
+ only good for large deg, when the period of the shift register is the
+ dominant factor. With deg equal to seven, the period is actually much
+ longer than the 7*(2**7 - 1) predicted by this formula. */
+
+
+
+/* For each of the currently supported random number generators, we have a
+ break value on the amount of state information (you need at least this many
+ bytes of state info to support this random number generator), a degree for
+ the polynomial (actually a trinomial) that the R.N.G. is based on, and
+ separation between the two lower order coefficients of the trinomial. */
+
+/* Linear congruential. */
+#define TYPE_0 0
+#define BREAK_0 8
+#define DEG_0 0
+#define SEP_0 0
+
+/* x**7 + x**3 + 1. */
+#define TYPE_1 1
+#define BREAK_1 32
+#define DEG_1 7
+#define SEP_1 3
+
+/* x**15 + x + 1. */
+#define TYPE_2 2
+#define BREAK_2 64
+#define DEG_2 15
+#define SEP_2 1
+
+/* x**31 + x**3 + 1. */
+#define TYPE_3 3
+#define BREAK_3 128
+#define DEG_3 31
+#define SEP_3 3
+
+/* x**63 + x + 1. */
+#define TYPE_4 4
+#define BREAK_4 256
+#define DEG_4 63
+#define SEP_4 1
+
+
+/* Array versions of the above information to make code run faster.
+ Relies on fact that TYPE_i == i. */
+
+#define MAX_TYPES 5 /* Max number of types above. */
+
+struct random_poly_info
+{
+ int seps[MAX_TYPES];
+ int degrees[MAX_TYPES];
+};
+
+static const struct random_poly_info random_poly_info =
+{
+ { SEP_0, SEP_1, SEP_2, SEP_3, SEP_4 },
+ { DEG_0, DEG_1, DEG_2, DEG_3, DEG_4 }
+};
+
+
+
+
+/* Initialize the random number generator based on the given seed. If the
+ type is the trivial no-state-information type, just remember the seed.
+ Otherwise, initializes state[] based on the given "seed" via a linear
+ congruential generator. Then, the pointers are set to known locations
+ that are exactly rand_sep places apart. Lastly, it cycles the state
+ information a given number of times to get rid of any initial dependencies
+ introduced by the L.C.R.N.G. Note that the initialization of randtbl[]
+ for default usage relies on values produced by this routine. */
+int
+__srandom_r (unsigned int seed, struct random_data *buf)
+{
+ int type;
+ int32_t *state;
+ long int i;
+ int32_t word;
+ int32_t *dst;
+ int kc;
+
+ if (buf == NULL)
+ goto fail;
+ type = buf->rand_type;
+ if ((unsigned int) type >= MAX_TYPES)
+ goto fail;
+
+ state = buf->state;
+ /* We must make sure the seed is not 0. Take arbitrarily 1 in this case. */
+ if (seed == 0)
+ seed = 1;
+ state[0] = seed;
+ if (type == TYPE_0)
+ goto done;
+
+ dst = state;
+ word = seed;
+ kc = buf->rand_deg;
+ for (i = 1; i < kc; ++i)
+ {
+ /* This does:
+ state[i] = (16807 * state[i - 1]) % 2147483647;
+ but avoids overflowing 31 bits. */
+ long int hi = word / 127773;
+ long int lo = word % 127773;
+ word = 16807 * lo - 2836 * hi;
+ if (word < 0)
+ word += 2147483647;
+ *++dst = word;
+ }
+
+ buf->fptr = &state[buf->rand_sep];
+ buf->rptr = &state[0];
+ kc *= 10;
+ while (--kc >= 0)
+ {
+ int32_t discard;
+ (void) __random_r (buf, &discard);
+ }
+
+ done:
+ return 0;
+
+ fail:
+ return -1;
+}
+
+weak_alias (__srandom_r, srandom_r)
+
+/* Initialize the state information in the given array of N bytes for
+ future random number generation. Based on the number of bytes we
+ are given, and the break values for the different R.N.G.'s, we choose
+ the best (largest) one we can and set things up for it. srandom is
+ then called to initialize the state information. Note that on return
+ from srandom, we set state[-1] to be the type multiplexed with the current
+ value of the rear pointer; this is so successive calls to initstate won't
+ lose this information and will be able to restart with setstate.
+ Note: The first thing we do is save the current state, if any, just like
+ setstate so that it doesn't matter when initstate is called.
+ Returns 0 on success, non-zero on failure. */
+int
+__initstate_r (unsigned int seed, char *arg_state, size_t n,
+ struct random_data *buf)
+{
+ if (buf == NULL)
+ goto fail;
+
+ int32_t *old_state = buf->state;
+ if (old_state != NULL)
+ {
+ int old_type = buf->rand_type;
+ if (old_type == TYPE_0)
+ old_state[-1] = TYPE_0;
+ else
+ old_state[-1] = (MAX_TYPES * (buf->rptr - old_state)) + old_type;
+ }
+
+ int type;
+ if (n >= BREAK_3)
+ type = n < BREAK_4 ? TYPE_3 : TYPE_4;
+ else if (n < BREAK_1)
+ {
+ if (n < BREAK_0)
+ goto fail;
+
+ type = TYPE_0;
+ }
+ else
+ type = n < BREAK_2 ? TYPE_1 : TYPE_2;
+
+ int degree = random_poly_info.degrees[type];
+ int separation = random_poly_info.seps[type];
+
+ buf->rand_type = type;
+ buf->rand_sep = separation;
+ buf->rand_deg = degree;
+ int32_t *state = &((int32_t *) arg_state)[1]; /* First location. */
+ /* Must set END_PTR before srandom. */
+ buf->end_ptr = &state[degree];
+
+ buf->state = state;
+
+ __srandom_r (seed, buf);
+
+ state[-1] = TYPE_0;
+ if (type != TYPE_0)
+ state[-1] = (buf->rptr - state) * MAX_TYPES + type;
+
+ return 0;
+
+ fail:
+ __set_errno (EINVAL);
+ return -1;
+}
+
+weak_alias (__initstate_r, initstate_r)
+
+/* Restore the state from the given state array.
+ Note: It is important that we also remember the locations of the pointers
+ in the current state information, and restore the locations of the pointers
+ from the old state information. This is done by multiplexing the pointer
+ location into the zeroth word of the state information. Note that due
+ to the order in which things are done, it is OK to call setstate with the
+ same state as the current state
+ Returns 0 on success, non-zero on failure. */
+int
+__setstate_r (char *arg_state, struct random_data *buf)
+{
+ int32_t *new_state = 1 + (int32_t *) arg_state;
+ int type;
+ int old_type;
+ int32_t *old_state;
+ int degree;
+ int separation;
+
+ if (arg_state == NULL || buf == NULL)
+ goto fail;
+
+ old_type = buf->rand_type;
+ old_state = buf->state;
+ if (old_type == TYPE_0)
+ old_state[-1] = TYPE_0;
+ else
+ old_state[-1] = (MAX_TYPES * (buf->rptr - old_state)) + old_type;
+
+ type = new_state[-1] % MAX_TYPES;
+ if (type < TYPE_0 || type > TYPE_4)
+ goto fail;
+
+ buf->rand_deg = degree = random_poly_info.degrees[type];
+ buf->rand_sep = separation = random_poly_info.seps[type];
+ buf->rand_type = type;
+
+ if (type != TYPE_0)
+ {
+ int rear = new_state[-1] / MAX_TYPES;
+ buf->rptr = &new_state[rear];
+ buf->fptr = &new_state[(rear + separation) % degree];
+ }
+ buf->state = new_state;
+ /* Set end_ptr too. */
+ buf->end_ptr = &new_state[degree];
+
+ return 0;
+
+ fail:
+ __set_errno (EINVAL);
+ return -1;
+}
+
+weak_alias (__setstate_r, setstate_r)
+
+/* If we are using the trivial TYPE_0 R.N.G., just do the old linear
+ congruential bit. Otherwise, we do our fancy trinomial stuff, which is the
+ same in all the other cases due to all the global variables that have been
+ set up. The basic operation is to add the number at the rear pointer into
+ the one at the front pointer. Then both pointers are advanced to the next
+ location cyclically in the table. The value returned is the sum generated,
+ reduced to 31 bits by throwing away the "least random" low bit.
+ Note: The code takes advantage of the fact that both the front and
+ rear pointers can't wrap on the same call by not testing the rear
+ pointer if the front one has wrapped. Returns a 31-bit random number. */
+
+int
+__random_r (struct random_data *buf, int32_t *result)
+{
+ int32_t *state;
+
+ if (buf == NULL || result == NULL)
+ goto fail;
+
+ state = buf->state;
+
+ if (buf->rand_type == TYPE_0)
+ {
+ int32_t val = state[0];
+ val = ((state[0] * 1103515245) + 12345) & 0x7fffffff;
+ state[0] = val;
+ *result = val;
+ }
+ else
+ {
+ int32_t *fptr = buf->fptr;
+ int32_t *rptr = buf->rptr;
+ int32_t *end_ptr = buf->end_ptr;
+ int32_t val;
+
+ val = *fptr += *rptr;
+ /* Chucking least random bit. */
+ *result = (val >> 1) & 0x7fffffff;
+ ++fptr;
+ if (fptr >= end_ptr)
+ {
+ fptr = state;
+ ++rptr;
+ }
+ else
+ {
+ ++rptr;
+ if (rptr >= end_ptr)
+ rptr = state;
+ }
+ buf->fptr = fptr;
+ buf->rptr = rptr;
+ }
+ return 0;
+
+ fail:
+ __set_errno (EINVAL);
+ return -1;
+}
+
+weak_alias (__random_r, random_r)
diff --git a/REORG.TODO/stdlib/rpmatch.c b/REORG.TODO/stdlib/rpmatch.c
new file mode 100644
index 0000000000..965c2999d8
--- /dev/null
+++ b/REORG.TODO/stdlib/rpmatch.c
@@ -0,0 +1,61 @@
+/* Determine whether string value is affirmation or negative response
+ according to current locale's data.
+ This file is part of the GNU C Library.
+ Copyright (C) 1996-2017 Free Software Foundation, Inc.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <langinfo.h>
+#include <stdlib.h>
+#include <regex.h>
+
+
+/* Match against one of the response patterns, compiling the pattern
+ first if necessary. */
+static int
+try (const char *response,
+ const int tag, const int match, const int nomatch,
+ const char **lastp, regex_t *re)
+{
+ const char *pattern = nl_langinfo (tag);
+ if (pattern != *lastp)
+ {
+ /* The pattern has changed. */
+ if (*lastp != NULL)
+ {
+ /* Free the old compiled pattern. */
+ __regfree (re);
+ *lastp = NULL;
+ }
+ /* Compile the pattern and cache it for future runs. */
+ if (__regcomp (re, pattern, REG_EXTENDED) != 0)
+ return -1;
+ *lastp = pattern;
+ }
+
+ /* Try the pattern. */
+ return __regexec (re, response, 0, NULL, 0) == 0 ? match : nomatch;
+}
+
+int
+rpmatch (const char *response)
+{
+ /* We cache the response patterns and compiled regexps here. */
+ static const char *yesexpr, *noexpr;
+ static regex_t yesre, nore;
+
+ return (try (response, YESEXPR, 1, 0, &yesexpr, &yesre) ?:
+ try (response, NOEXPR, 0, -1, &noexpr, &nore));
+}
diff --git a/REORG.TODO/stdlib/rshift.c b/REORG.TODO/stdlib/rshift.c
new file mode 100644
index 0000000000..d4c7f77769
--- /dev/null
+++ b/REORG.TODO/stdlib/rshift.c
@@ -0,0 +1,78 @@
+/* mpn_rshift -- Shift right a low-level natural-number integer.
+
+Copyright (C) 1991-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP 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 MP 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 MP Library; see the file COPYING.LIB. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+
+#include <assert.h>
+
+/* Shift U (pointed to by UP and USIZE limbs long) CNT bits to the right
+ and store the USIZE least significant limbs of the result at WP.
+ The bits shifted out to the right are returned.
+
+ Argument constraints:
+ 1. 0 < CNT < BITS_PER_MP_LIMB
+ 2. If the result is to be written over the input, WP must be <= UP.
+*/
+
+mp_limb_t
+mpn_rshift (register mp_ptr wp,
+ register mp_srcptr up, mp_size_t usize,
+ register unsigned int cnt)
+{
+ register mp_limb_t high_limb, low_limb;
+ register unsigned sh_1, sh_2;
+ register mp_size_t i;
+ mp_limb_t retval;
+
+ assert (usize != 0 && cnt != 0);
+
+ sh_1 = cnt;
+
+#if 0
+ if (sh_1 == 0)
+ {
+ if (wp != up)
+ {
+ /* Copy from low end to high end, to allow specified input/output
+ overlapping. */
+ for (i = 0; i < usize; i++)
+ wp[i] = up[i];
+ }
+ return usize;
+ }
+#endif
+
+ wp -= 1;
+ sh_2 = BITS_PER_MP_LIMB - sh_1;
+ high_limb = up[0];
+ retval = high_limb << sh_2;
+ low_limb = high_limb;
+
+ for (i = 1; i < usize; i++)
+ {
+ high_limb = up[i];
+ wp[i] = (low_limb >> sh_1) | (high_limb << sh_2);
+ low_limb = high_limb;
+ }
+ wp[i] = low_limb >> sh_1;
+
+ return retval;
+}
diff --git a/REORG.TODO/stdlib/secure-getenv.c b/REORG.TODO/stdlib/secure-getenv.c
new file mode 100644
index 0000000000..8d6a7e39a6
--- /dev/null
+++ b/REORG.TODO/stdlib/secure-getenv.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 1991-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include <unistd.h>
+
+#include <shlib-compat.h>
+
+/* Some programs and especially the libc itself have to be careful
+ what values to accept from the environment. This special version
+ checks for SUID or SGID first before doing any work. */
+char *
+__libc_secure_getenv (const char *name)
+{
+ return __libc_enable_secure ? NULL : getenv (name);
+}
+weak_alias (__libc_secure_getenv, secure_getenv)
+libc_hidden_weak (__libc_secure_getenv)
+
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_17)
+compat_symbol (libc, __libc_secure_getenv, __secure_getenv, GLIBC_2_0);
+#endif
diff --git a/REORG.TODO/stdlib/seed48.c b/REORG.TODO/stdlib/seed48.c
new file mode 100644
index 0000000000..3108b0ca76
--- /dev/null
+++ b/REORG.TODO/stdlib/seed48.c
@@ -0,0 +1,28 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+
+unsigned short int *
+seed48 (unsigned short int seed16v[3])
+{
+ (void) __seed48_r (seed16v, &__libc_drand48_data);
+
+ return __libc_drand48_data.__old_x;
+}
diff --git a/REORG.TODO/stdlib/seed48_r.c b/REORG.TODO/stdlib/seed48_r.c
new file mode 100644
index 0000000000..3cdf351dfd
--- /dev/null
+++ b/REORG.TODO/stdlib/seed48_r.c
@@ -0,0 +1,39 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+int
+__seed48_r (unsigned short int seed16v[3], struct drand48_data *buffer)
+{
+ /* Save old value at a private place to be used as return value. */
+ memcpy (buffer->__old_x, buffer->__x, sizeof (buffer->__x));
+
+ /* Install new state. */
+ buffer->__x[2] = seed16v[2];
+ buffer->__x[1] = seed16v[1];
+ buffer->__x[0] = seed16v[0];
+ buffer->__a = 0x5deece66dull;
+ buffer->__c = 0xb;
+ buffer->__init = 1;
+
+ return 0;
+}
+weak_alias (__seed48_r, seed48_r)
diff --git a/REORG.TODO/stdlib/setcontext.c b/REORG.TODO/stdlib/setcontext.c
new file mode 100644
index 0000000000..3fe77177a2
--- /dev/null
+++ b/REORG.TODO/stdlib/setcontext.c
@@ -0,0 +1,29 @@
+/* Copyright (C) 1998-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <ucontext.h>
+
+int
+setcontext (const ucontext_t *ucp)
+{
+ __set_errno (ENOSYS);
+ return -1;
+}
+
+
+stub_warning (setcontext)
diff --git a/REORG.TODO/stdlib/setenv.c b/REORG.TODO/stdlib/setenv.c
new file mode 100644
index 0000000000..f3c0220045
--- /dev/null
+++ b/REORG.TODO/stdlib/setenv.c
@@ -0,0 +1,340 @@
+/* Copyright (C) 1992-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+/* Pacify GCC; see the commentary about VALLEN below. This is needed
+ at least through GCC 4.9.2. Pacify GCC for the entire file, as
+ there seems to be no way to pacify GCC selectively, only for the
+ place where it's needed. Do not use DIAG_IGNORE_NEEDS_COMMENT
+ here, as it's not defined yet. */
+#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
+
+#include <errno.h>
+#if !_LIBC
+# if !defined errno && !defined HAVE_ERRNO_DECL
+extern int errno;
+# endif
+# define __set_errno(ev) ((errno) = (ev))
+#endif
+
+#if _LIBC || HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+#if _LIBC || HAVE_STRING_H
+# include <string.h>
+#endif
+#if _LIBC || HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#if !_LIBC
+# define __environ environ
+# ifndef HAVE_ENVIRON_DECL
+extern char **environ;
+# endif
+#endif
+
+#if _LIBC
+/* This lock protects against simultaneous modifications of `environ'. */
+# include <libc-lock.h>
+__libc_lock_define_initialized (static, envlock)
+# define LOCK __libc_lock_lock (envlock)
+# define UNLOCK __libc_lock_unlock (envlock)
+#else
+# define LOCK
+# define UNLOCK
+#endif
+
+/* In the GNU C library we must keep the namespace clean. */
+#ifdef _LIBC
+# define setenv __setenv
+# define unsetenv __unsetenv
+# define clearenv __clearenv
+# define tfind __tfind
+# define tsearch __tsearch
+#endif
+
+/* In the GNU C library implementation we try to be more clever and
+ allow arbitrarily many changes of the environment given that the used
+ values are from a small set. Outside glibc this will eat up all
+ memory after a while. */
+#if defined _LIBC || (defined HAVE_SEARCH_H && defined HAVE_TSEARCH \
+ && defined __GNUC__)
+# define USE_TSEARCH 1
+# include <search.h>
+
+/* This is a pointer to the root of the search tree with the known
+ values. */
+static void *known_values;
+
+# define KNOWN_VALUE(Str) \
+ ({ \
+ void *value = tfind (Str, &known_values, (__compar_fn_t) strcmp); \
+ value != NULL ? *(char **) value : NULL; \
+ })
+# define STORE_VALUE(Str) \
+ tsearch (Str, &known_values, (__compar_fn_t) strcmp)
+
+#else
+# undef USE_TSEARCH
+
+# define KNOWN_VALUE(Str) NULL
+# define STORE_VALUE(Str) do { } while (0)
+
+#endif
+
+
+/* If this variable is not a null pointer we allocated the current
+ environment. */
+static char **last_environ;
+
+
+/* This function is used by `setenv' and `putenv'. The difference between
+ the two functions is that for the former must create a new string which
+ is then placed in the environment, while the argument of `putenv'
+ must be used directly. This is all complicated by the fact that we try
+ to reuse values once generated for a `setenv' call since we can never
+ free the strings. */
+int
+__add_to_environ (const char *name, const char *value, const char *combined,
+ int replace)
+{
+ char **ep;
+ size_t size;
+
+ /* Compute lengths before locking, so that the critical section is
+ less of a performance bottleneck. VALLEN is needed only if
+ COMBINED is null (unfortunately GCC is not smart enough to deduce
+ this; see the #pragma at the start of this file). Testing
+ COMBINED instead of VALUE causes setenv (..., NULL, ...) to dump
+ core now instead of corrupting memory later. */
+ const size_t namelen = strlen (name);
+ size_t vallen;
+ if (combined == NULL)
+ vallen = strlen (value) + 1;
+
+ LOCK;
+
+ /* We have to get the pointer now that we have the lock and not earlier
+ since another thread might have created a new environment. */
+ ep = __environ;
+
+ size = 0;
+ if (ep != NULL)
+ {
+ for (; *ep != NULL; ++ep)
+ if (!strncmp (*ep, name, namelen) && (*ep)[namelen] == '=')
+ break;
+ else
+ ++size;
+ }
+
+ if (ep == NULL || __builtin_expect (*ep == NULL, 1))
+ {
+ char **new_environ;
+
+ /* We allocated this space; we can extend it. */
+ new_environ = (char **) realloc (last_environ,
+ (size + 2) * sizeof (char *));
+ if (new_environ == NULL)
+ {
+ UNLOCK;
+ return -1;
+ }
+
+ if (__environ != last_environ)
+ memcpy ((char *) new_environ, (char *) __environ,
+ size * sizeof (char *));
+
+ new_environ[size] = NULL;
+ new_environ[size + 1] = NULL;
+ ep = new_environ + size;
+
+ last_environ = __environ = new_environ;
+ }
+ if (*ep == NULL || replace)
+ {
+ char *np;
+
+ /* Use the user string if given. */
+ if (combined != NULL)
+ np = (char *) combined;
+ else
+ {
+ const size_t varlen = namelen + 1 + vallen;
+#ifdef USE_TSEARCH
+ char *new_value;
+ int use_alloca = __libc_use_alloca (varlen);
+ if (__builtin_expect (use_alloca, 1))
+ new_value = (char *) alloca (varlen);
+ else
+ {
+ new_value = malloc (varlen);
+ if (new_value == NULL)
+ {
+ UNLOCK;
+ return -1;
+ }
+ }
+# ifdef _LIBC
+ __mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1),
+ value, vallen);
+# else
+ memcpy (new_value, name, namelen);
+ new_value[namelen] = '=';
+ memcpy (&new_value[namelen + 1], value, vallen);
+# endif
+
+ np = KNOWN_VALUE (new_value);
+ if (__glibc_likely (np == NULL))
+#endif
+ {
+#ifdef USE_TSEARCH
+ if (__glibc_unlikely (! use_alloca))
+ np = new_value;
+ else
+#endif
+ {
+ np = malloc (varlen);
+ if (__glibc_unlikely (np == NULL))
+ {
+ UNLOCK;
+ return -1;
+ }
+
+#ifdef USE_TSEARCH
+ memcpy (np, new_value, varlen);
+#else
+ memcpy (np, name, namelen);
+ np[namelen] = '=';
+ memcpy (&np[namelen + 1], value, vallen);
+#endif
+ }
+ /* And remember the value. */
+ STORE_VALUE (np);
+ }
+#ifdef USE_TSEARCH
+ else
+ {
+ if (__glibc_unlikely (! use_alloca))
+ free (new_value);
+ }
+#endif
+ }
+
+ *ep = np;
+ }
+
+ UNLOCK;
+
+ return 0;
+}
+
+int
+setenv (const char *name, const char *value, int replace)
+{
+ if (name == NULL || *name == '\0' || strchr (name, '=') != NULL)
+ {
+ __set_errno (EINVAL);
+ return -1;
+ }
+
+ return __add_to_environ (name, value, NULL, replace);
+}
+
+int
+unsetenv (const char *name)
+{
+ size_t len;
+ char **ep;
+
+ if (name == NULL || *name == '\0' || strchr (name, '=') != NULL)
+ {
+ __set_errno (EINVAL);
+ return -1;
+ }
+
+ len = strlen (name);
+
+ LOCK;
+
+ ep = __environ;
+ if (ep != NULL)
+ while (*ep != NULL)
+ {
+ if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
+ {
+ /* Found it. Remove this pointer by moving later ones back. */
+ char **dp = ep;
+
+ do
+ dp[0] = dp[1];
+ while (*dp++);
+ /* Continue the loop in case NAME appears again. */
+ }
+ else
+ ++ep;
+ }
+
+ UNLOCK;
+
+ return 0;
+}
+
+/* The `clearenv' was planned to be added to POSIX.1 but probably
+ never made it. Nevertheless the POSIX.9 standard (POSIX bindings
+ for Fortran 77) requires this function. */
+int
+clearenv (void)
+{
+ LOCK;
+
+ if (__environ == last_environ && __environ != NULL)
+ {
+ /* We allocated this environment so we can free it. */
+ free (__environ);
+ last_environ = NULL;
+ }
+
+ /* Clear the environment pointer removes the whole environment. */
+ __environ = NULL;
+
+ UNLOCK;
+
+ return 0;
+}
+#ifdef _LIBC
+libc_freeres_fn (free_mem)
+{
+ /* Remove all traces. */
+ clearenv ();
+
+ /* Now remove the search tree. */
+ __tdestroy (known_values, free);
+ known_values = NULL;
+}
+
+# undef setenv
+# undef unsetenv
+# undef clearenv
+weak_alias (__setenv, setenv)
+weak_alias (__unsetenv, unsetenv)
+weak_alias (__clearenv, clearenv)
+#endif
diff --git a/REORG.TODO/stdlib/srand48.c b/REORG.TODO/stdlib/srand48.c
new file mode 100644
index 0000000000..9d665055a0
--- /dev/null
+++ b/REORG.TODO/stdlib/srand48.c
@@ -0,0 +1,26 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+
+void
+srand48 (long seedval)
+{
+ (void) __srand48_r (seedval, &__libc_drand48_data);
+}
diff --git a/REORG.TODO/stdlib/srand48_r.c b/REORG.TODO/stdlib/srand48_r.c
new file mode 100644
index 0000000000..43bca37062
--- /dev/null
+++ b/REORG.TODO/stdlib/srand48_r.c
@@ -0,0 +1,39 @@
+/* Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include <limits.h>
+
+int
+__srand48_r (long int seedval, struct drand48_data *buffer)
+{
+ /* The standards say we only have 32 bits. */
+ if (sizeof (long int) > 4)
+ seedval &= 0xffffffffl;
+
+ buffer->__x[2] = seedval >> 16;
+ buffer->__x[1] = seedval & 0xffffl;
+ buffer->__x[0] = 0x330e;
+
+ buffer->__a = 0x5deece66dull;
+ buffer->__c = 0xb;
+ buffer->__init = 1;
+
+ return 0;
+}
+weak_alias (__srand48_r, srand48_r)
diff --git a/REORG.TODO/stdlib/stdlib.h b/REORG.TODO/stdlib/stdlib.h
new file mode 100644
index 0000000000..0a693c2b41
--- /dev/null
+++ b/REORG.TODO/stdlib/stdlib.h
@@ -0,0 +1,911 @@
+/* Copyright (C) 1991-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+/*
+ * ISO C99 Standard: 7.20 General utilities <stdlib.h>
+ */
+
+#ifndef _STDLIB_H
+
+#define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION
+#include <bits/libc-header-start.h>
+
+/* Get size_t, wchar_t and NULL from <stddef.h>. */
+#define __need_size_t
+#define __need_wchar_t
+#define __need_NULL
+#include <stddef.h>
+
+__BEGIN_DECLS
+
+#define _STDLIB_H 1
+
+#if (defined __USE_XOPEN || defined __USE_XOPEN2K8) && !defined _SYS_WAIT_H
+/* XPG requires a few symbols from <sys/wait.h> being defined. */
+# include <bits/waitflags.h>
+# include <bits/waitstatus.h>
+
+/* Define the macros <sys/wait.h> also would define this way. */
+# define WEXITSTATUS(status) __WEXITSTATUS (status)
+# define WTERMSIG(status) __WTERMSIG (status)
+# define WSTOPSIG(status) __WSTOPSIG (status)
+# define WIFEXITED(status) __WIFEXITED (status)
+# define WIFSIGNALED(status) __WIFSIGNALED (status)
+# define WIFSTOPPED(status) __WIFSTOPPED (status)
+# ifdef __WIFCONTINUED
+# define WIFCONTINUED(status) __WIFCONTINUED (status)
+# endif
+#endif /* X/Open or XPG7 and <sys/wait.h> not included. */
+
+/* _FloatN API tests for enablement. */
+#include <bits/floatn.h>
+
+/* Returned by `div'. */
+typedef struct
+ {
+ int quot; /* Quotient. */
+ int rem; /* Remainder. */
+ } div_t;
+
+/* Returned by `ldiv'. */
+#ifndef __ldiv_t_defined
+typedef struct
+ {
+ long int quot; /* Quotient. */
+ long int rem; /* Remainder. */
+ } ldiv_t;
+# define __ldiv_t_defined 1
+#endif
+
+#if defined __USE_ISOC99 && !defined __lldiv_t_defined
+/* Returned by `lldiv'. */
+__extension__ typedef struct
+ {
+ long long int quot; /* Quotient. */
+ long long int rem; /* Remainder. */
+ } lldiv_t;
+# define __lldiv_t_defined 1
+#endif
+
+
+/* The largest number rand will return (same as INT_MAX). */
+#define RAND_MAX 2147483647
+
+
+/* We define these the same for all machines.
+ Changes from this to the outside world should be done in `_exit'. */
+#define EXIT_FAILURE 1 /* Failing exit status. */
+#define EXIT_SUCCESS 0 /* Successful exit status. */
+
+
+/* Maximum length of a multibyte character in the current locale. */
+#define MB_CUR_MAX (__ctype_get_mb_cur_max ())
+extern size_t __ctype_get_mb_cur_max (void) __THROW __wur;
+
+
+/* Convert a string to a floating-point number. */
+extern double atof (const char *__nptr)
+ __THROW __attribute_pure__ __nonnull ((1)) __wur;
+/* Convert a string to an integer. */
+extern int atoi (const char *__nptr)
+ __THROW __attribute_pure__ __nonnull ((1)) __wur;
+/* Convert a string to a long integer. */
+extern long int atol (const char *__nptr)
+ __THROW __attribute_pure__ __nonnull ((1)) __wur;
+
+#ifdef __USE_ISOC99
+/* Convert a string to a long long integer. */
+__extension__ extern long long int atoll (const char *__nptr)
+ __THROW __attribute_pure__ __nonnull ((1)) __wur;
+#endif
+
+/* Convert a string to a floating-point number. */
+extern double strtod (const char *__restrict __nptr,
+ char **__restrict __endptr)
+ __THROW __nonnull ((1));
+
+#ifdef __USE_ISOC99
+/* Likewise for `float' and `long double' sizes of floating-point numbers. */
+extern float strtof (const char *__restrict __nptr,
+ char **__restrict __endptr) __THROW __nonnull ((1));
+
+extern long double strtold (const char *__restrict __nptr,
+ char **__restrict __endptr)
+ __THROW __nonnull ((1));
+#endif
+
+/* Convert a string to a long integer. */
+extern long int strtol (const char *__restrict __nptr,
+ char **__restrict __endptr, int __base)
+ __THROW __nonnull ((1));
+/* Convert a string to an unsigned long integer. */
+extern unsigned long int strtoul (const char *__restrict __nptr,
+ char **__restrict __endptr, int __base)
+ __THROW __nonnull ((1));
+
+#ifdef __USE_MISC
+/* Convert a string to a quadword integer. */
+__extension__
+extern long long int strtoq (const char *__restrict __nptr,
+ char **__restrict __endptr, int __base)
+ __THROW __nonnull ((1));
+/* Convert a string to an unsigned quadword integer. */
+__extension__
+extern unsigned long long int strtouq (const char *__restrict __nptr,
+ char **__restrict __endptr, int __base)
+ __THROW __nonnull ((1));
+#endif /* Use misc. */
+
+#ifdef __USE_ISOC99
+/* Convert a string to a quadword integer. */
+__extension__
+extern long long int strtoll (const char *__restrict __nptr,
+ char **__restrict __endptr, int __base)
+ __THROW __nonnull ((1));
+/* Convert a string to an unsigned quadword integer. */
+__extension__
+extern unsigned long long int strtoull (const char *__restrict __nptr,
+ char **__restrict __endptr, int __base)
+ __THROW __nonnull ((1));
+#endif /* ISO C99 or use MISC. */
+
+/* Convert a floating-point number to a string. */
+#if __GLIBC_USE (IEC_60559_BFP_EXT)
+extern int strfromd (char *__dest, size_t __size, const char *__format,
+ double __f)
+ __THROW __nonnull ((3));
+
+extern int strfromf (char *__dest, size_t __size, const char *__format,
+ float __f)
+ __THROW __nonnull ((3));
+
+extern int strfroml (char *__dest, size_t __size, const char *__format,
+ long double __f)
+ __THROW __nonnull ((3));
+#endif
+
+#if __HAVE_FLOAT128 && __GLIBC_USE (IEC_60559_TYPES_EXT)
+extern int strfromf128 (char *__dest, size_t __size, const char * __format,
+ _Float128 __f)
+ __THROW __nonnull ((3));
+#endif
+
+
+#ifdef __USE_GNU
+/* The concept of one static locale per category is not very well
+ thought out. Many applications will need to process its data using
+ information from several different locales. Another problem is
+ the implementation of the internationalization handling in the
+ ISO C++ standard library. To support this another set of
+ the functions using locale data exist which take an additional
+ argument.
+
+ Attention: even though several *_l interfaces are part of POSIX:2008,
+ these are not. */
+
+/* Structure for reentrant locale using functions. This is an
+ (almost) opaque type for the user level programs. */
+# include <xlocale.h>
+
+/* Special versions of the functions above which take the locale to
+ use as an additional parameter. */
+extern long int strtol_l (const char *__restrict __nptr,
+ char **__restrict __endptr, int __base,
+ __locale_t __loc) __THROW __nonnull ((1, 4));
+
+extern unsigned long int strtoul_l (const char *__restrict __nptr,
+ char **__restrict __endptr,
+ int __base, __locale_t __loc)
+ __THROW __nonnull ((1, 4));
+
+__extension__
+extern long long int strtoll_l (const char *__restrict __nptr,
+ char **__restrict __endptr, int __base,
+ __locale_t __loc)
+ __THROW __nonnull ((1, 4));
+
+__extension__
+extern unsigned long long int strtoull_l (const char *__restrict __nptr,
+ char **__restrict __endptr,
+ int __base, __locale_t __loc)
+ __THROW __nonnull ((1, 4));
+
+extern double strtod_l (const char *__restrict __nptr,
+ char **__restrict __endptr, __locale_t __loc)
+ __THROW __nonnull ((1, 3));
+
+extern float strtof_l (const char *__restrict __nptr,
+ char **__restrict __endptr, __locale_t __loc)
+ __THROW __nonnull ((1, 3));
+
+extern long double strtold_l (const char *__restrict __nptr,
+ char **__restrict __endptr,
+ __locale_t __loc)
+ __THROW __nonnull ((1, 3));
+#endif /* GNU */
+
+
+#ifdef __USE_EXTERN_INLINES
+__extern_inline int
+__NTH (atoi (const char *__nptr))
+{
+ return (int) strtol (__nptr, (char **) NULL, 10);
+}
+__extern_inline long int
+__NTH (atol (const char *__nptr))
+{
+ return strtol (__nptr, (char **) NULL, 10);
+}
+
+# ifdef __USE_ISOC99
+__extension__ __extern_inline long long int
+__NTH (atoll (const char *__nptr))
+{
+ return strtoll (__nptr, (char **) NULL, 10);
+}
+# endif
+#endif /* Optimizing and Inlining. */
+
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+/* Convert N to base 64 using the digits "./0-9A-Za-z", least-significant
+ digit first. Returns a pointer to static storage overwritten by the
+ next call. */
+extern char *l64a (long int __n) __THROW __wur;
+
+/* Read a number from a string S in base 64 as above. */
+extern long int a64l (const char *__s)
+ __THROW __attribute_pure__ __nonnull ((1)) __wur;
+
+#endif /* Use misc || extended X/Open. */
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+# include <sys/types.h> /* we need int32_t... */
+
+/* These are the functions that actually do things. The `random', `srandom',
+ `initstate' and `setstate' functions are those from BSD Unices.
+ The `rand' and `srand' functions are required by the ANSI standard.
+ We provide both interfaces to the same random number generator. */
+/* Return a random long integer between 0 and RAND_MAX inclusive. */
+extern long int random (void) __THROW;
+
+/* Seed the random number generator with the given number. */
+extern void srandom (unsigned int __seed) __THROW;
+
+/* Initialize the random number generator to use state buffer STATEBUF,
+ of length STATELEN, and seed it with SEED. Optimal lengths are 8, 16,
+ 32, 64, 128 and 256, the bigger the better; values less than 8 will
+ cause an error and values greater than 256 will be rounded down. */
+extern char *initstate (unsigned int __seed, char *__statebuf,
+ size_t __statelen) __THROW __nonnull ((2));
+
+/* Switch the random number generator to state buffer STATEBUF,
+ which should have been previously initialized by `initstate'. */
+extern char *setstate (char *__statebuf) __THROW __nonnull ((1));
+
+
+# ifdef __USE_MISC
+/* Reentrant versions of the `random' family of functions.
+ These functions all use the following data structure to contain
+ state, rather than global state variables. */
+
+struct random_data
+ {
+ int32_t *fptr; /* Front pointer. */
+ int32_t *rptr; /* Rear pointer. */
+ int32_t *state; /* Array of state values. */
+ int rand_type; /* Type of random number generator. */
+ int rand_deg; /* Degree of random number generator. */
+ int rand_sep; /* Distance between front and rear. */
+ int32_t *end_ptr; /* Pointer behind state table. */
+ };
+
+extern int random_r (struct random_data *__restrict __buf,
+ int32_t *__restrict __result) __THROW __nonnull ((1, 2));
+
+extern int srandom_r (unsigned int __seed, struct random_data *__buf)
+ __THROW __nonnull ((2));
+
+extern int initstate_r (unsigned int __seed, char *__restrict __statebuf,
+ size_t __statelen,
+ struct random_data *__restrict __buf)
+ __THROW __nonnull ((2, 4));
+
+extern int setstate_r (char *__restrict __statebuf,
+ struct random_data *__restrict __buf)
+ __THROW __nonnull ((1, 2));
+# endif /* Use misc. */
+#endif /* Use extended X/Open || misc. */
+
+
+/* Return a random integer between 0 and RAND_MAX inclusive. */
+extern int rand (void) __THROW;
+/* Seed the random number generator with the given number. */
+extern void srand (unsigned int __seed) __THROW;
+
+#ifdef __USE_POSIX199506
+/* Reentrant interface according to POSIX.1. */
+extern int rand_r (unsigned int *__seed) __THROW;
+#endif
+
+
+#if defined __USE_MISC || defined __USE_XOPEN
+/* System V style 48-bit random number generator functions. */
+
+/* Return non-negative, double-precision floating-point value in [0.0,1.0). */
+extern double drand48 (void) __THROW;
+extern double erand48 (unsigned short int __xsubi[3]) __THROW __nonnull ((1));
+
+/* Return non-negative, long integer in [0,2^31). */
+extern long int lrand48 (void) __THROW;
+extern long int nrand48 (unsigned short int __xsubi[3])
+ __THROW __nonnull ((1));
+
+/* Return signed, long integers in [-2^31,2^31). */
+extern long int mrand48 (void) __THROW;
+extern long int jrand48 (unsigned short int __xsubi[3])
+ __THROW __nonnull ((1));
+
+/* Seed random number generator. */
+extern void srand48 (long int __seedval) __THROW;
+extern unsigned short int *seed48 (unsigned short int __seed16v[3])
+ __THROW __nonnull ((1));
+extern void lcong48 (unsigned short int __param[7]) __THROW __nonnull ((1));
+
+# ifdef __USE_MISC
+/* Data structure for communication with thread safe versions. This
+ type is to be regarded as opaque. It's only exported because users
+ have to allocate objects of this type. */
+struct drand48_data
+ {
+ unsigned short int __x[3]; /* Current state. */
+ unsigned short int __old_x[3]; /* Old state. */
+ unsigned short int __c; /* Additive const. in congruential formula. */
+ unsigned short int __init; /* Flag for initializing. */
+ __extension__ unsigned long long int __a; /* Factor in congruential
+ formula. */
+ };
+
+/* Return non-negative, double-precision floating-point value in [0.0,1.0). */
+extern int drand48_r (struct drand48_data *__restrict __buffer,
+ double *__restrict __result) __THROW __nonnull ((1, 2));
+extern int erand48_r (unsigned short int __xsubi[3],
+ struct drand48_data *__restrict __buffer,
+ double *__restrict __result) __THROW __nonnull ((1, 2));
+
+/* Return non-negative, long integer in [0,2^31). */
+extern int lrand48_r (struct drand48_data *__restrict __buffer,
+ long int *__restrict __result)
+ __THROW __nonnull ((1, 2));
+extern int nrand48_r (unsigned short int __xsubi[3],
+ struct drand48_data *__restrict __buffer,
+ long int *__restrict __result)
+ __THROW __nonnull ((1, 2));
+
+/* Return signed, long integers in [-2^31,2^31). */
+extern int mrand48_r (struct drand48_data *__restrict __buffer,
+ long int *__restrict __result)
+ __THROW __nonnull ((1, 2));
+extern int jrand48_r (unsigned short int __xsubi[3],
+ struct drand48_data *__restrict __buffer,
+ long int *__restrict __result)
+ __THROW __nonnull ((1, 2));
+
+/* Seed random number generator. */
+extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
+ __THROW __nonnull ((2));
+
+extern int seed48_r (unsigned short int __seed16v[3],
+ struct drand48_data *__buffer) __THROW __nonnull ((1, 2));
+
+extern int lcong48_r (unsigned short int __param[7],
+ struct drand48_data *__buffer)
+ __THROW __nonnull ((1, 2));
+# endif /* Use misc. */
+#endif /* Use misc or X/Open. */
+
+/* Allocate SIZE bytes of memory. */
+extern void *malloc (size_t __size) __THROW __attribute_malloc__ __wur;
+/* Allocate NMEMB elements of SIZE bytes each, all initialized to 0. */
+extern void *calloc (size_t __nmemb, size_t __size)
+ __THROW __attribute_malloc__ __wur;
+
+/* Re-allocate the previously allocated block
+ in PTR, making the new block SIZE bytes long. */
+/* __attribute_malloc__ is not used, because if realloc returns
+ the same pointer that was passed to it, aliasing needs to be allowed
+ between objects pointed by the old and new pointers. */
+extern void *realloc (void *__ptr, size_t __size)
+ __THROW __attribute_warn_unused_result__;
+
+#ifdef __USE_GNU
+/* Re-allocate the previously allocated block in PTR, making the new
+ block large enough for NMEMB elements of SIZE bytes each. */
+/* __attribute_malloc__ is not used, because if reallocarray returns
+ the same pointer that was passed to it, aliasing needs to be allowed
+ between objects pointed by the old and new pointers. */
+extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size)
+ __THROW __attribute_warn_unused_result__;
+#endif
+
+/* Free a block allocated by `malloc', `realloc' or `calloc'. */
+extern void free (void *__ptr) __THROW;
+
+#ifdef __USE_MISC
+# include <alloca.h>
+#endif /* Use misc. */
+
+#if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K) \
+ || defined __USE_MISC
+/* Allocate SIZE bytes on a page boundary. The storage cannot be freed. */
+extern void *valloc (size_t __size) __THROW __attribute_malloc__ __wur;
+#endif
+
+#ifdef __USE_XOPEN2K
+/* Allocate memory of SIZE bytes with an alignment of ALIGNMENT. */
+extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
+ __THROW __nonnull ((1)) __wur;
+#endif
+
+#ifdef __USE_ISOC11
+/* ISO C variant of aligned allocation. */
+extern void *aligned_alloc (size_t __alignment, size_t __size)
+ __THROW __attribute_malloc__ __attribute_alloc_size__ ((2)) __wur;
+#endif
+
+/* Abort execution and generate a core-dump. */
+extern void abort (void) __THROW __attribute__ ((__noreturn__));
+
+
+/* Register a function to be called when `exit' is called. */
+extern int atexit (void (*__func) (void)) __THROW __nonnull ((1));
+
+#if defined __USE_ISOC11 || defined __USE_ISOCXX11
+/* Register a function to be called when `quick_exit' is called. */
+# ifdef __cplusplus
+extern "C++" int at_quick_exit (void (*__func) (void))
+ __THROW __asm ("at_quick_exit") __nonnull ((1));
+# else
+extern int at_quick_exit (void (*__func) (void)) __THROW __nonnull ((1));
+# endif
+#endif
+
+#ifdef __USE_MISC
+/* Register a function to be called with the status
+ given to `exit' and the given argument. */
+extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
+ __THROW __nonnull ((1));
+#endif
+
+/* Call all functions registered with `atexit' and `on_exit',
+ in the reverse of the order in which they were registered,
+ perform stdio cleanup, and terminate program execution with STATUS. */
+extern void exit (int __status) __THROW __attribute__ ((__noreturn__));
+
+#if defined __USE_ISOC11 || defined __USE_ISOCXX11
+/* Call all functions registered with `at_quick_exit' in the reverse
+ of the order in which they were registered and terminate program
+ execution with STATUS. */
+extern void quick_exit (int __status) __THROW __attribute__ ((__noreturn__));
+#endif
+
+#ifdef __USE_ISOC99
+/* Terminate the program with STATUS without calling any of the
+ functions registered with `atexit' or `on_exit'. */
+extern void _Exit (int __status) __THROW __attribute__ ((__noreturn__));
+#endif
+
+
+/* Return the value of envariable NAME, or NULL if it doesn't exist. */
+extern char *getenv (const char *__name) __THROW __nonnull ((1)) __wur;
+
+#ifdef __USE_GNU
+/* This function is similar to the above but returns NULL if the
+ programs is running with SUID or SGID enabled. */
+extern char *secure_getenv (const char *__name)
+ __THROW __nonnull ((1)) __wur;
+#endif
+
+#if defined __USE_MISC || defined __USE_XOPEN
+/* The SVID says this is in <stdio.h>, but this seems a better place. */
+/* Put STRING, which is of the form "NAME=VALUE", in the environment.
+ If there is no `=', remove NAME from the environment. */
+extern int putenv (char *__string) __THROW __nonnull ((1));
+#endif
+
+#ifdef __USE_XOPEN2K
+/* Set NAME to VALUE in the environment.
+ If REPLACE is nonzero, overwrite an existing value. */
+extern int setenv (const char *__name, const char *__value, int __replace)
+ __THROW __nonnull ((2));
+
+/* Remove the variable NAME from the environment. */
+extern int unsetenv (const char *__name) __THROW __nonnull ((1));
+#endif
+
+#ifdef __USE_MISC
+/* The `clearenv' was planned to be added to POSIX.1 but probably
+ never made it. Nevertheless the POSIX.9 standard (POSIX bindings
+ for Fortran 77) requires this function. */
+extern int clearenv (void) __THROW;
+#endif
+
+
+#if defined __USE_MISC \
+ || (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8)
+/* Generate a unique temporary file name from TEMPLATE.
+ The last six characters of TEMPLATE must be "XXXXXX";
+ they are replaced with a string that makes the file name unique.
+ Always returns TEMPLATE, it's either a temporary file name or a null
+ string if it cannot get a unique file name. */
+extern char *mktemp (char *__template) __THROW __nonnull ((1));
+#endif
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
+/* Generate a unique temporary file name from TEMPLATE.
+ The last six characters of TEMPLATE must be "XXXXXX";
+ they are replaced with a string that makes the filename unique.
+ Returns a file descriptor open on the file for reading and writing,
+ or -1 if it cannot create a uniquely-named file.
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+# ifndef __USE_FILE_OFFSET64
+extern int mkstemp (char *__template) __nonnull ((1)) __wur;
+# else
+# ifdef __REDIRECT
+extern int __REDIRECT (mkstemp, (char *__template), mkstemp64)
+ __nonnull ((1)) __wur;
+# else
+# define mkstemp mkstemp64
+# endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int mkstemp64 (char *__template) __nonnull ((1)) __wur;
+# endif
+#endif
+
+#ifdef __USE_MISC
+/* Similar to mkstemp, but the template can have a suffix after the
+ XXXXXX. The length of the suffix is specified in the second
+ parameter.
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+# ifndef __USE_FILE_OFFSET64
+extern int mkstemps (char *__template, int __suffixlen) __nonnull ((1)) __wur;
+# else
+# ifdef __REDIRECT
+extern int __REDIRECT (mkstemps, (char *__template, int __suffixlen),
+ mkstemps64) __nonnull ((1)) __wur;
+# else
+# define mkstemps mkstemps64
+# endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int mkstemps64 (char *__template, int __suffixlen)
+ __nonnull ((1)) __wur;
+# endif
+#endif
+
+#ifdef __USE_XOPEN2K8
+/* Create a unique temporary directory from TEMPLATE.
+ The last six characters of TEMPLATE must be "XXXXXX";
+ they are replaced with a string that makes the directory name unique.
+ Returns TEMPLATE, or a null pointer if it cannot get a unique name.
+ The directory is created mode 700. */
+extern char *mkdtemp (char *__template) __THROW __nonnull ((1)) __wur;
+#endif
+
+#ifdef __USE_GNU
+/* Generate a unique temporary file name from TEMPLATE similar to
+ mkstemp. But allow the caller to pass additional flags which are
+ used in the open call to create the file..
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+# ifndef __USE_FILE_OFFSET64
+extern int mkostemp (char *__template, int __flags) __nonnull ((1)) __wur;
+# else
+# ifdef __REDIRECT
+extern int __REDIRECT (mkostemp, (char *__template, int __flags), mkostemp64)
+ __nonnull ((1)) __wur;
+# else
+# define mkostemp mkostemp64
+# endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int mkostemp64 (char *__template, int __flags) __nonnull ((1)) __wur;
+# endif
+
+/* Similar to mkostemp, but the template can have a suffix after the
+ XXXXXX. The length of the suffix is specified in the second
+ parameter.
+
+ This function is a possible cancellation point and therefore not
+ marked with __THROW. */
+# ifndef __USE_FILE_OFFSET64
+extern int mkostemps (char *__template, int __suffixlen, int __flags)
+ __nonnull ((1)) __wur;
+# else
+# ifdef __REDIRECT
+extern int __REDIRECT (mkostemps, (char *__template, int __suffixlen,
+ int __flags), mkostemps64)
+ __nonnull ((1)) __wur;
+# else
+# define mkostemps mkostemps64
+# endif
+# endif
+# ifdef __USE_LARGEFILE64
+extern int mkostemps64 (char *__template, int __suffixlen, int __flags)
+ __nonnull ((1)) __wur;
+# endif
+#endif
+
+
+/* Execute the given line as a shell command.
+
+ This function is a cancellation point and therefore not marked with
+ __THROW. */
+extern int system (const char *__command) __wur;
+
+
+#ifdef __USE_GNU
+/* Return a malloc'd string containing the canonical absolute name of the
+ existing named file. */
+extern char *canonicalize_file_name (const char *__name)
+ __THROW __nonnull ((1)) __wur;
+#endif
+
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
+/* Return the canonical absolute name of file NAME. If RESOLVED is
+ null, the result is malloc'd; otherwise, if the canonical name is
+ PATH_MAX chars or more, returns null with `errno' set to
+ ENAMETOOLONG; if the name fits in fewer than PATH_MAX chars,
+ returns the name in RESOLVED. */
+extern char *realpath (const char *__restrict __name,
+ char *__restrict __resolved) __THROW __wur;
+#endif
+
+
+/* Shorthand for type of comparison functions. */
+#ifndef __COMPAR_FN_T
+# define __COMPAR_FN_T
+typedef int (*__compar_fn_t) (const void *, const void *);
+
+# ifdef __USE_GNU
+typedef __compar_fn_t comparison_fn_t;
+# endif
+#endif
+#ifdef __USE_GNU
+typedef int (*__compar_d_fn_t) (const void *, const void *, void *);
+#endif
+
+/* Do a binary search for KEY in BASE, which consists of NMEMB elements
+ of SIZE bytes each, using COMPAR to perform the comparisons. */
+extern void *bsearch (const void *__key, const void *__base,
+ size_t __nmemb, size_t __size, __compar_fn_t __compar)
+ __nonnull ((1, 2, 5)) __wur;
+
+#ifdef __USE_EXTERN_INLINES
+# include <bits/stdlib-bsearch.h>
+#endif
+
+/* Sort NMEMB elements of BASE, of SIZE bytes each,
+ using COMPAR to perform the comparisons. */
+extern void qsort (void *__base, size_t __nmemb, size_t __size,
+ __compar_fn_t __compar) __nonnull ((1, 4));
+#ifdef __USE_GNU
+extern void qsort_r (void *__base, size_t __nmemb, size_t __size,
+ __compar_d_fn_t __compar, void *__arg)
+ __nonnull ((1, 4));
+#endif
+
+
+/* Return the absolute value of X. */
+extern int abs (int __x) __THROW __attribute__ ((__const__)) __wur;
+extern long int labs (long int __x) __THROW __attribute__ ((__const__)) __wur;
+
+#ifdef __USE_ISOC99
+__extension__ extern long long int llabs (long long int __x)
+ __THROW __attribute__ ((__const__)) __wur;
+#endif
+
+
+/* Return the `div_t', `ldiv_t' or `lldiv_t' representation
+ of the value of NUMER over DENOM. */
+/* GCC may have built-ins for these someday. */
+extern div_t div (int __numer, int __denom)
+ __THROW __attribute__ ((__const__)) __wur;
+extern ldiv_t ldiv (long int __numer, long int __denom)
+ __THROW __attribute__ ((__const__)) __wur;
+
+#ifdef __USE_ISOC99
+__extension__ extern lldiv_t lldiv (long long int __numer,
+ long long int __denom)
+ __THROW __attribute__ ((__const__)) __wur;
+#endif
+
+
+#if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8) \
+ || defined __USE_MISC
+/* Convert floating point numbers to strings. The returned values are
+ valid only until another call to the same function. */
+
+/* Convert VALUE to a string with NDIGIT digits and return a pointer to
+ this. Set *DECPT with the position of the decimal character and *SIGN
+ with the sign of the number. */
+extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
+ int *__restrict __sign) __THROW __nonnull ((3, 4)) __wur;
+
+/* Convert VALUE to a string rounded to NDIGIT decimal digits. Set *DECPT
+ with the position of the decimal character and *SIGN with the sign of
+ the number. */
+extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
+ int *__restrict __sign) __THROW __nonnull ((3, 4)) __wur;
+
+/* If possible convert VALUE to a string with NDIGIT significant digits.
+ Otherwise use exponential representation. The resulting string will
+ be written to BUF. */
+extern char *gcvt (double __value, int __ndigit, char *__buf)
+ __THROW __nonnull ((3)) __wur;
+#endif
+
+#ifdef __USE_MISC
+/* Long double versions of above functions. */
+extern char *qecvt (long double __value, int __ndigit,
+ int *__restrict __decpt, int *__restrict __sign)
+ __THROW __nonnull ((3, 4)) __wur;
+extern char *qfcvt (long double __value, int __ndigit,
+ int *__restrict __decpt, int *__restrict __sign)
+ __THROW __nonnull ((3, 4)) __wur;
+extern char *qgcvt (long double __value, int __ndigit, char *__buf)
+ __THROW __nonnull ((3)) __wur;
+
+
+/* Reentrant version of the functions above which provide their own
+ buffers. */
+extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
+ int *__restrict __sign, char *__restrict __buf,
+ size_t __len) __THROW __nonnull ((3, 4, 5));
+extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
+ int *__restrict __sign, char *__restrict __buf,
+ size_t __len) __THROW __nonnull ((3, 4, 5));
+
+extern int qecvt_r (long double __value, int __ndigit,
+ int *__restrict __decpt, int *__restrict __sign,
+ char *__restrict __buf, size_t __len)
+ __THROW __nonnull ((3, 4, 5));
+extern int qfcvt_r (long double __value, int __ndigit,
+ int *__restrict __decpt, int *__restrict __sign,
+ char *__restrict __buf, size_t __len)
+ __THROW __nonnull ((3, 4, 5));
+#endif /* misc */
+
+
+/* Return the length of the multibyte character
+ in S, which is no longer than N. */
+extern int mblen (const char *__s, size_t __n) __THROW;
+/* Return the length of the given multibyte character,
+ putting its `wchar_t' representation in *PWC. */
+extern int mbtowc (wchar_t *__restrict __pwc,
+ const char *__restrict __s, size_t __n) __THROW;
+/* Put the multibyte character represented
+ by WCHAR in S, returning its length. */
+extern int wctomb (char *__s, wchar_t __wchar) __THROW;
+
+
+/* Convert a multibyte string to a wide char string. */
+extern size_t mbstowcs (wchar_t *__restrict __pwcs,
+ const char *__restrict __s, size_t __n) __THROW;
+/* Convert a wide char string to multibyte string. */
+extern size_t wcstombs (char *__restrict __s,
+ const wchar_t *__restrict __pwcs, size_t __n)
+ __THROW;
+
+
+#ifdef __USE_MISC
+/* Determine whether the string value of RESPONSE matches the affirmation
+ or negative response expression as specified by the LC_MESSAGES category
+ in the program's current locale. Returns 1 if affirmative, 0 if
+ negative, and -1 if not matching. */
+extern int rpmatch (const char *__response) __THROW __nonnull ((1)) __wur;
+#endif
+
+
+#if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8
+/* Parse comma separated suboption from *OPTIONP and match against
+ strings in TOKENS. If found return index and set *VALUEP to
+ optional value introduced by an equal sign. If the suboption is
+ not part of TOKENS return in *VALUEP beginning of unknown
+ suboption. On exit *OPTIONP is set to the beginning of the next
+ token or at the terminating NUL character. */
+extern int getsubopt (char **__restrict __optionp,
+ char *const *__restrict __tokens,
+ char **__restrict __valuep)
+ __THROW __nonnull ((1, 2, 3)) __wur;
+#endif
+
+
+#ifdef __USE_XOPEN
+/* Setup DES tables according KEY. */
+extern void setkey (const char *__key) __THROW __nonnull ((1));
+#endif
+
+
+/* X/Open pseudo terminal handling. */
+
+#ifdef __USE_XOPEN2KXSI
+/* Return a master pseudo-terminal handle. */
+extern int posix_openpt (int __oflag) __wur;
+#endif
+
+#ifdef __USE_XOPEN_EXTENDED
+/* The next four functions all take a master pseudo-tty fd and
+ perform an operation on the associated slave: */
+
+/* Chown the slave to the calling user. */
+extern int grantpt (int __fd) __THROW;
+
+/* Release an internal lock so the slave can be opened.
+ Call after grantpt(). */
+extern int unlockpt (int __fd) __THROW;
+
+/* Return the pathname of the pseudo terminal slave associated with
+ the master FD is open on, or NULL on errors.
+ The returned storage is good until the next call to this function. */
+extern char *ptsname (int __fd) __THROW __wur;
+#endif
+
+#ifdef __USE_GNU
+/* Store at most BUFLEN characters of the pathname of the slave pseudo
+ terminal associated with the master FD is open on in BUF.
+ Return 0 on success, otherwise an error number. */
+extern int ptsname_r (int __fd, char *__buf, size_t __buflen)
+ __THROW __nonnull ((2));
+
+/* Open a master pseudo terminal and return its file descriptor. */
+extern int getpt (void);
+#endif
+
+#ifdef __USE_MISC
+/* Put the 1 minute, 5 minute and 15 minute load averages into the first
+ NELEM elements of LOADAVG. Return the number written (never more than
+ three, but may be less than NELEM), or -1 if an error occurred. */
+extern int getloadavg (double __loadavg[], int __nelem)
+ __THROW __nonnull ((1));
+#endif
+
+#if defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K
+/* Return the index into the active-logins file (utmp) for
+ the controlling terminal. */
+extern int ttyslot (void) __THROW;
+#endif
+
+#include <bits/stdlib-float.h>
+
+/* Define some macros helping to catch buffer overflows. */
+#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
+# include <bits/stdlib.h>
+#endif
+#ifdef __LDBL_COMPAT
+# include <bits/stdlib-ldbl.h>
+#endif
+
+__END_DECLS
+
+#endif /* stdlib.h */
diff --git a/REORG.TODO/stdlib/strfmon.c b/REORG.TODO/stdlib/strfmon.c
new file mode 100644
index 0000000000..dfaa9e0d9c
--- /dev/null
+++ b/REORG.TODO/stdlib/strfmon.c
@@ -0,0 +1,39 @@
+/* Formatting a monetary value according to the current locale.
+ Copyright (C) 1996-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>
+ and Jochen Hein <Jochen.Hein@informatik.TU-Clausthal.de>, 1996.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <monetary.h>
+#include <stdarg.h>
+#include <locale/localeinfo.h>
+#include <math_ldbl_opt.h>
+
+ssize_t
+__strfmon (char *s, size_t maxsize, const char *format, ...)
+{
+ va_list ap;
+
+ va_start (ap, format);
+
+ ssize_t res = __vstrfmon_l (s, maxsize, _NL_CURRENT_LOCALE, format, ap);
+
+ va_end (ap);
+
+ return res;
+}
+ldbl_strong_alias (__strfmon, strfmon)
diff --git a/REORG.TODO/stdlib/strfmon_l.c b/REORG.TODO/stdlib/strfmon_l.c
new file mode 100644
index 0000000000..af64173800
--- /dev/null
+++ b/REORG.TODO/stdlib/strfmon_l.c
@@ -0,0 +1,625 @@
+/* Formatting a monetary value according to the given locale.
+ Copyright (C) 1996-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <ctype.h>
+#include <errno.h>
+#include <langinfo.h>
+#include <locale.h>
+#include <monetary.h>
+#include "../libio/libioP.h"
+#include "../libio/strfile.h"
+#include <printf.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <string.h>
+#include "../locale/localeinfo.h"
+
+
+#define out_char(Ch) \
+ do { \
+ if (dest >= s + maxsize - 1) \
+ { \
+ __set_errno (E2BIG); \
+ va_end (ap); \
+ return -1; \
+ } \
+ *dest++ = (Ch); \
+ } while (0)
+
+#define out_string(String) \
+ do { \
+ const char *_s = (String); \
+ while (*_s) \
+ out_char (*_s++); \
+ } while (0)
+
+#define out_nstring(String, N) \
+ do { \
+ int _n = (N); \
+ const char *_s = (String); \
+ while (_n-- > 0) \
+ out_char (*_s++); \
+ } while (0)
+
+#define to_digit(Ch) ((Ch) - '0')
+
+
+/* We use this code also for the extended locale handling where the
+ function gets as an additional argument the locale which has to be
+ used. To access the values we have to redefine the _NL_CURRENT
+ macro. */
+#undef _NL_CURRENT
+#define _NL_CURRENT(category, item) \
+ (current->values[_NL_ITEM_INDEX (item)].string)
+
+/* This function determines the number of digit groups in the output.
+ The definition is in printf_fp.c. */
+extern unsigned int __guess_grouping (unsigned int intdig_max,
+ const char *grouping, wchar_t sepchar);
+
+
+/* We have to overcome some problems with this implementation. On the
+ one hand the strfmon() function is specified in XPG4 and of course
+ it has to follow this. But on the other hand POSIX.2 specifies
+ some information in the LC_MONETARY category which should be used,
+ too. Some of the information contradicts the information which can
+ be specified in format string. */
+ssize_t
+__vstrfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format,
+ va_list ap)
+{
+ struct __locale_data *current = loc->__locales[LC_MONETARY];
+ _IO_strfile f;
+ struct printf_info info;
+ char *dest; /* Pointer so copy the output. */
+ const char *fmt; /* Pointer that walks through format. */
+
+ dest = s;
+ fmt = format;
+
+ /* Loop through the format-string. */
+ while (*fmt != '\0')
+ {
+ /* The floating-point value to output. */
+ union
+ {
+ double dbl;
+ __long_double_t ldbl;
+ }
+ fpnum;
+ int int_format;
+ int print_curr_symbol;
+ int left_prec;
+ int left_pad;
+ int right_prec;
+ int group;
+ char pad;
+ int is_long_double;
+ int p_sign_posn;
+ int n_sign_posn;
+ int sign_posn;
+ int other_sign_posn;
+ int left;
+ int is_negative;
+ int sep_by_space;
+ int other_sep_by_space;
+ int cs_precedes;
+ int other_cs_precedes;
+ const char *sign_string;
+ const char *other_sign_string;
+ int done;
+ const char *currency_symbol;
+ size_t currency_symbol_len;
+ long int width;
+ char *startp;
+ const void *ptr;
+ char space_char;
+
+ /* Process all character which do not introduce a format
+ specification. */
+ if (*fmt != '%')
+ {
+ out_char (*fmt++);
+ continue;
+ }
+
+ /* "%%" means a single '%' character. */
+ if (fmt[1] == '%')
+ {
+ out_char (*++fmt);
+ ++fmt;
+ continue;
+ }
+
+ /* Defaults for formatting. */
+ int_format = 0; /* Use international curr. symbol */
+ print_curr_symbol = 1; /* Print the currency symbol. */
+ left_prec = -1; /* No left precision specified. */
+ right_prec = -1; /* No right precision specified. */
+ group = 1; /* Print digits grouped. */
+ pad = ' '; /* Fill character is <SP>. */
+ is_long_double = 0; /* Double argument by default. */
+ p_sign_posn = -2; /* This indicates whether the */
+ n_sign_posn = -2; /* '(' flag is given. */
+ width = -1; /* No width specified so far. */
+ left = 0; /* Right justified by default. */
+
+ /* Parse group characters. */
+ while (1)
+ {
+ switch (*++fmt)
+ {
+ case '=': /* Set fill character. */
+ pad = *++fmt;
+ if (pad == '\0')
+ {
+ /* Premature EOS. */
+ __set_errno (EINVAL);
+ return -1;
+ }
+ continue;
+ case '^': /* Don't group digits. */
+ group = 0;
+ continue;
+ case '+': /* Use +/- for sign of number. */
+ if (n_sign_posn != -2)
+ {
+ __set_errno (EINVAL);
+ return -1;
+ }
+ p_sign_posn = *_NL_CURRENT (LC_MONETARY, P_SIGN_POSN);
+ n_sign_posn = *_NL_CURRENT (LC_MONETARY, N_SIGN_POSN);
+ continue;
+ case '(': /* Use ( ) for negative sign. */
+ if (n_sign_posn != -2)
+ {
+ __set_errno (EINVAL);
+ return -1;
+ }
+ p_sign_posn = 0;
+ n_sign_posn = 0;
+ continue;
+ case '!': /* Don't print the currency symbol. */
+ print_curr_symbol = 0;
+ continue;
+ case '-': /* Print left justified. */
+ left = 1;
+ continue;
+ default:
+ /* Will stop the loop. */;
+ }
+ break;
+ }
+
+ if (isdigit (*fmt))
+ {
+ /* Parse field width. */
+ width = to_digit (*fmt);
+
+ while (isdigit (*++fmt))
+ {
+ int val = to_digit (*fmt);
+
+ if (width > LONG_MAX / 10
+ || (width == LONG_MAX && val > LONG_MAX % 10))
+ {
+ __set_errno (E2BIG);
+ return -1;
+ }
+
+ width = width * 10 + val;
+ }
+
+ /* If we don't have enough room for the demanded width we
+ can stop now and return an error. */
+ if (width >= maxsize - (dest - s))
+ {
+ __set_errno (E2BIG);
+ return -1;
+ }
+ }
+
+ /* Recognize left precision. */
+ if (*fmt == '#')
+ {
+ if (!isdigit (*++fmt))
+ {
+ __set_errno (EINVAL);
+ return -1;
+ }
+ left_prec = to_digit (*fmt);
+
+ while (isdigit (*++fmt))
+ {
+ left_prec *= 10;
+ left_prec += to_digit (*fmt);
+ }
+ }
+
+ /* Recognize right precision. */
+ if (*fmt == '.')
+ {
+ if (!isdigit (*++fmt))
+ {
+ __set_errno (EINVAL);
+ return -1;
+ }
+ right_prec = to_digit (*fmt);
+
+ while (isdigit (*++fmt))
+ {
+ right_prec *= 10;
+ right_prec += to_digit (*fmt);
+ }
+ }
+
+ /* Handle modifier. This is an extension. */
+ if (*fmt == 'L')
+ {
+ ++fmt;
+ if (!__ldbl_is_dbl)
+ is_long_double = 1;
+ }
+
+ /* Handle format specifier. */
+ char int_symbol[4];
+ switch (*fmt++)
+ {
+ case 'i': { /* Use international currency symbol. */
+ const char *int_curr_symbol;
+
+ int_curr_symbol = _NL_CURRENT (LC_MONETARY, INT_CURR_SYMBOL);
+ strncpy(int_symbol, int_curr_symbol, 3);
+ int_symbol[3] = '\0';
+
+ currency_symbol_len = 3;
+ currency_symbol = &int_symbol[0];
+ space_char = int_curr_symbol[3];
+ int_format = 1;
+ break;
+ }
+ case 'n': /* Use national currency symbol. */
+ currency_symbol = _NL_CURRENT (LC_MONETARY, CURRENCY_SYMBOL);
+ currency_symbol_len = strlen (currency_symbol);
+ space_char = ' ';
+ int_format = 0;
+ break;
+ default: /* Any unrecognized format is an error. */
+ __set_errno (EINVAL);
+ return -1;
+ }
+
+ /* If not specified by the format string now find the values for
+ the format specification. */
+ if (p_sign_posn == -2)
+ p_sign_posn = *_NL_CURRENT (LC_MONETARY, int_format ? INT_P_SIGN_POSN : P_SIGN_POSN);
+ if (n_sign_posn == -2)
+ n_sign_posn = *_NL_CURRENT (LC_MONETARY, int_format ? INT_N_SIGN_POSN : N_SIGN_POSN);
+
+ if (right_prec == -1)
+ {
+ right_prec = *_NL_CURRENT (LC_MONETARY, int_format ? INT_FRAC_DIGITS : FRAC_DIGITS);
+
+ if (right_prec == '\377')
+ right_prec = 2;
+ }
+
+ /* If we have to print the digits grouped determine how many
+ extra characters this means. */
+ if (group && left_prec != -1)
+ left_prec += __guess_grouping (left_prec,
+ _NL_CURRENT (LC_MONETARY, MON_GROUPING),
+ *_NL_CURRENT (LC_MONETARY,
+ MON_THOUSANDS_SEP));
+
+ /* Now it's time to get the value. */
+ if (is_long_double == 1)
+ {
+ fpnum.ldbl = va_arg (ap, long double);
+ is_negative = fpnum.ldbl < 0;
+ if (is_negative)
+ fpnum.ldbl = -fpnum.ldbl;
+ }
+ else
+ {
+ fpnum.dbl = va_arg (ap, double);
+ is_negative = fpnum.dbl < 0;
+ if (is_negative)
+ fpnum.dbl = -fpnum.dbl;
+ }
+
+ /* We now know the sign of the value and can determine the format. */
+ if (is_negative)
+ {
+ sign_string = _NL_CURRENT (LC_MONETARY, NEGATIVE_SIGN);
+ /* If the locale does not specify a character for the
+ negative sign we use a '-'. */
+ if (*sign_string == '\0')
+ sign_string = (const char *) "-";
+ cs_precedes = *_NL_CURRENT (LC_MONETARY, int_format ? INT_N_CS_PRECEDES : N_CS_PRECEDES);
+ sep_by_space = *_NL_CURRENT (LC_MONETARY, int_format ? INT_N_SEP_BY_SPACE : N_SEP_BY_SPACE);
+ sign_posn = n_sign_posn;
+
+ other_sign_string = _NL_CURRENT (LC_MONETARY, POSITIVE_SIGN);
+ other_cs_precedes = *_NL_CURRENT (LC_MONETARY, int_format ? INT_P_CS_PRECEDES : P_CS_PRECEDES);
+ other_sep_by_space = *_NL_CURRENT (LC_MONETARY, int_format ? INT_P_SEP_BY_SPACE : P_SEP_BY_SPACE);
+ other_sign_posn = p_sign_posn;
+ }
+ else
+ {
+ sign_string = _NL_CURRENT (LC_MONETARY, POSITIVE_SIGN);
+ cs_precedes = *_NL_CURRENT (LC_MONETARY, int_format ? INT_P_CS_PRECEDES : P_CS_PRECEDES);
+ sep_by_space = *_NL_CURRENT (LC_MONETARY, int_format ? INT_P_SEP_BY_SPACE : P_SEP_BY_SPACE);
+ sign_posn = p_sign_posn;
+
+ other_sign_string = _NL_CURRENT (LC_MONETARY, NEGATIVE_SIGN);
+ if (*other_sign_string == '\0')
+ other_sign_string = (const char *) "-";
+ other_cs_precedes = *_NL_CURRENT (LC_MONETARY, int_format ? INT_N_CS_PRECEDES : N_CS_PRECEDES);
+ other_sep_by_space = *_NL_CURRENT (LC_MONETARY, int_format ? INT_N_SEP_BY_SPACE : N_SEP_BY_SPACE);
+ other_sign_posn = n_sign_posn;
+ }
+
+ /* Set default values for unspecified information. */
+ if (cs_precedes != 0)
+ cs_precedes = 1;
+ if (other_cs_precedes != 0)
+ other_cs_precedes = 1;
+ if (sep_by_space == '\377')
+ sep_by_space = 0;
+ if (other_sep_by_space == '\377')
+ other_sep_by_space = 0;
+ if (sign_posn == '\377')
+ sign_posn = 1;
+ if (other_sign_posn == '\377')
+ other_sign_posn = 1;
+
+ /* Check for degenerate cases */
+ if (sep_by_space == 2)
+ {
+ if (sign_posn == 0 ||
+ (sign_posn == 1 && !cs_precedes) ||
+ (sign_posn == 2 && cs_precedes))
+ /* sign and symbol are not adjacent, so no separator */
+ sep_by_space = 0;
+ }
+ if (other_sep_by_space == 2)
+ {
+ if (other_sign_posn == 0 ||
+ (other_sign_posn == 1 && !other_cs_precedes) ||
+ (other_sign_posn == 2 && other_cs_precedes))
+ /* sign and symbol are not adjacent, so no separator */
+ other_sep_by_space = 0;
+ }
+
+ /* Set the left precision and padding needed for alignment */
+ if (left_prec == -1)
+ {
+ left_prec = 0;
+ left_pad = 0;
+ }
+ else
+ {
+ /* Set left_pad to number of spaces needed to align positive
+ and negative formats */
+
+ int left_bytes = 0;
+ int other_left_bytes = 0;
+
+ /* Work out number of bytes for currency string and separator
+ preceding the value */
+ if (cs_precedes)
+ {
+ left_bytes += currency_symbol_len;
+ if (sep_by_space != 0)
+ ++left_bytes;
+ }
+
+ if (other_cs_precedes)
+ {
+ other_left_bytes += currency_symbol_len;
+ if (other_sep_by_space != 0)
+ ++other_left_bytes;
+ }
+
+ /* Work out number of bytes for the sign (or left parenthesis)
+ preceding the value */
+ if (sign_posn == 0 && is_negative)
+ ++left_bytes;
+ else if (sign_posn == 1)
+ left_bytes += strlen (sign_string);
+ else if (cs_precedes && (sign_posn == 3 || sign_posn == 4))
+ left_bytes += strlen (sign_string);
+
+ if (other_sign_posn == 0 && !is_negative)
+ ++other_left_bytes;
+ else if (other_sign_posn == 1)
+ other_left_bytes += strlen (other_sign_string);
+ else if (other_cs_precedes &&
+ (other_sign_posn == 3 || other_sign_posn == 4))
+ other_left_bytes += strlen (other_sign_string);
+
+ /* Compare the number of bytes preceding the value for
+ each format, and set the padding accordingly */
+ if (other_left_bytes > left_bytes)
+ left_pad = other_left_bytes - left_bytes;
+ else
+ left_pad = 0;
+ }
+
+ /* Perhaps we'll someday make these things configurable so
+ better start using symbolic names now. */
+#define left_paren '('
+#define right_paren ')'
+
+ startp = dest; /* Remember start so we can compute length. */
+
+ while (left_pad-- > 0)
+ out_char (' ');
+
+ if (sign_posn == 0 && is_negative)
+ out_char (left_paren);
+
+ if (cs_precedes)
+ {
+ if (sign_posn != 0 && sign_posn != 2 && sign_posn != 4
+ && sign_posn != 5)
+ {
+ out_string (sign_string);
+ if (sep_by_space == 2)
+ out_char (' ');
+ }
+
+ if (print_curr_symbol)
+ out_string (currency_symbol);
+
+ if (sign_posn == 4)
+ {
+ if (print_curr_symbol && sep_by_space == 2)
+ out_char (space_char);
+ out_string (sign_string);
+ if (sep_by_space == 1)
+ /* POSIX.2 and SUS are not clear on this case, but C99
+ says a space follows the adjacent-symbol-and-sign */
+ out_char (' ');
+ }
+ else
+ if (print_curr_symbol && sep_by_space == 1)
+ out_char (space_char);
+ }
+ else
+ if (sign_posn != 0 && sign_posn != 2 && sign_posn != 3
+ && sign_posn != 4 && sign_posn != 5)
+ out_string (sign_string);
+
+ /* Print the number. */
+#ifdef _IO_MTSAFE_IO
+ f._sbf._f._lock = NULL;
+#endif
+ _IO_init_internal (&f._sbf._f, 0);
+ _IO_JUMPS (&f._sbf) = &_IO_str_jumps;
+ _IO_str_init_static_internal (&f, dest, (s + maxsize) - dest, dest);
+ /* We clear the last available byte so we can find out whether
+ the numeric representation is too long. */
+ s[maxsize - 1] = '\0';
+
+ memset (&info, '\0', sizeof (info));
+ info.prec = right_prec;
+ info.width = left_prec + (right_prec ? (right_prec + 1) : 0);
+ info.spec = 'f';
+ info.is_long_double = is_long_double;
+ info.group = group;
+ info.pad = pad;
+ info.extra = 1; /* This means use values from LC_MONETARY. */
+
+ ptr = &fpnum;
+ done = __printf_fp_l (&f._sbf._f, loc, &info, &ptr);
+ if (done < 0)
+ return -1;
+
+ if (s[maxsize - 1] != '\0')
+ {
+ __set_errno (E2BIG);
+ return -1;
+ }
+
+ dest += done;
+
+ if (!cs_precedes)
+ {
+ if (sign_posn == 3)
+ {
+ if (sep_by_space == 1)
+ out_char (' ');
+ out_string (sign_string);
+ }
+
+ if (print_curr_symbol)
+ {
+ if ((sign_posn == 3 && sep_by_space == 2)
+ || (sign_posn == 4 && sep_by_space == 1)
+ || (sign_posn == 2 && sep_by_space == 1)
+ || (sign_posn == 1 && sep_by_space == 1)
+ || (sign_posn == 0 && sep_by_space == 1))
+ out_char (space_char);
+ out_nstring (currency_symbol, currency_symbol_len);
+ }
+
+ if (sign_posn == 4)
+ {
+ if (sep_by_space == 2)
+ out_char (' ');
+ out_string (sign_string);
+ }
+ }
+
+ if (sign_posn == 2)
+ {
+ if (sep_by_space == 2)
+ out_char (' ');
+ out_string (sign_string);
+ }
+
+ if (sign_posn == 0 && is_negative)
+ out_char (right_paren);
+
+ /* Now test whether the output width is filled. */
+ if (dest - startp < width)
+ {
+ if (left)
+ /* We simply have to fill using spaces. */
+ do
+ out_char (' ');
+ while (dest - startp < width);
+ else
+ {
+ long int dist = width - (dest - startp);
+ for (char *cp = dest - 1; cp >= startp; --cp)
+ cp[dist] = cp[0];
+
+ dest += dist;
+
+ do
+ startp[--dist] = ' ';
+ while (dist > 0);
+ }
+ }
+ }
+
+ /* Terminate the string. */
+ *dest = '\0';
+
+ return dest - s;
+}
+
+ssize_t
+___strfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format, ...)
+{
+ va_list ap;
+
+ va_start (ap, format);
+
+ ssize_t res = __vstrfmon_l (s, maxsize, loc, format, ap);
+
+ va_end (ap);
+
+ return res;
+}
+ldbl_strong_alias (___strfmon_l, __strfmon_l)
+ldbl_weak_alias (___strfmon_l, strfmon_l)
diff --git a/REORG.TODO/stdlib/strfrom-skeleton.c b/REORG.TODO/stdlib/strfrom-skeleton.c
new file mode 100644
index 0000000000..5841919fe4
--- /dev/null
+++ b/REORG.TODO/stdlib/strfrom-skeleton.c
@@ -0,0 +1,155 @@
+/* Convert a floating-point number to string.
+ Copyright (C) 2016-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+/* Generic implementation for strfrom functions. The implementation is generic
+ for several floating-point types (e.g.: float, double), so that each
+ function, such as strfromf and strfroml, share the same code, thus avoiding
+ code duplication. */
+
+#include <ctype.h>
+#include "../libio/libioP.h"
+#include "../libio/strfile.h"
+#include <printf.h>
+#include <string.h>
+#include <locale/localeinfo.h>
+
+#define UCHAR_T char
+#define L_(Str) Str
+#define ISDIGIT(Ch) isdigit (Ch)
+#include "stdio-common/printf-parse.h"
+
+int
+STRFROM (char *dest, size_t size, const char *format, FLOAT f)
+{
+ _IO_strnfile sfile;
+#ifdef _IO_MTSAFE_IO
+ sfile.f._sbf._f._lock = NULL;
+#endif
+
+ int done;
+
+ /* Single-precision values need to be stored in a double type, because
+ __printf_fp_l and __printf_fphex do not accept the float type. */
+ union {
+ double flt;
+ FLOAT value;
+ } fpnum;
+ const void *fpptr;
+ fpptr = &fpnum;
+
+ /* Variables to control the output format. */
+ int precision = -1; /* printf_fp and printf_fphex treat this internally. */
+ int specifier;
+ struct printf_info info;
+
+ /* Single-precision values need to be converted into double-precision,
+ because __printf_fp and __printf_fphex only accept double and long double
+ as the floating-point argument. */
+ if (__builtin_types_compatible_p (FLOAT, float))
+ fpnum.flt = f;
+ else
+ fpnum.value = f;
+
+ /* Check if the first character in the format string is indeed the '%'
+ character. Otherwise, abort. */
+ if (*format == '%')
+ format++;
+ else
+ abort ();
+
+ /* The optional precision specification always starts with a '.'. If such
+ character is present, read the precision. */
+ if (*format == '.')
+ {
+ format++;
+
+ /* Parse the precision. */
+ if (ISDIGIT (*format))
+ precision = read_int (&format);
+ /* If only the period is specified, the precision is taken as zero, as
+ described in ISO/IEC 9899:2011, section 7.21.6.1, 4th paragraph, 3rd
+ item. */
+ else
+ precision = 0;
+ }
+
+ /* Now there is only the conversion specifier to be read. */
+ switch (*format)
+ {
+ case 'a':
+ case 'A':
+ case 'e':
+ case 'E':
+ case 'f':
+ case 'F':
+ case 'g':
+ case 'G':
+ specifier = *format;
+ break;
+ default:
+ abort ();
+ }
+
+ /* The following code to prepare the virtual file has been adapted from the
+ function _IO_vsnprintf from libio. */
+
+ if (size == 0)
+ {
+ /* When size is zero, nothing is written and dest may be a null pointer.
+ This is specified for snprintf in ISO/IEC 9899:2011, Section 7.21.6.5,
+ in the second paragraph. Thus, if size is zero, prepare to use the
+ overflow buffer right from the start. */
+ dest = sfile.overflow_buf;
+ size = sizeof (sfile.overflow_buf);
+ }
+
+ /* Prepare the virtual string file. */
+ _IO_no_init (&sfile.f._sbf._f, _IO_USER_LOCK, -1, NULL, NULL);
+ _IO_JUMPS (&sfile.f._sbf) = &_IO_strn_jumps;
+ _IO_str_init_static_internal (&sfile.f, dest, size - 1, dest);
+
+ /* Prepare the format specification for printf_fp. */
+ memset (&info, '\0', sizeof (info));
+
+ /* The functions strfromd and strfromf pass a floating-point number with
+ double precision to printf_fp, whereas strfroml passes a floating-point
+ number with long double precision. The following line informs printf_fp
+ which type of floating-point number is being passed. */
+ info.is_long_double = __builtin_types_compatible_p (FLOAT, long double);
+
+ /* Similarly, the function strfromf128 passes a floating-point number in
+ _Float128 format to printf_fp. */
+#if __HAVE_DISTINCT_FLOAT128
+ info.is_binary128 = __builtin_types_compatible_p (FLOAT, _Float128);
+#endif
+
+ /* Set info according to the format string. */
+ info.prec = precision;
+ info.spec = specifier;
+
+ if (info.spec != 'a' && info.spec != 'A')
+ done = __printf_fp_l (&sfile.f._sbf._f, _NL_CURRENT_LOCALE, &info, &fpptr);
+ else
+ done = __printf_fphex (&sfile.f._sbf._f, &info, &fpptr);
+
+ /* Terminate the string. */
+ if (sfile.f._sbf._f._IO_buf_base != sfile.overflow_buf)
+ *sfile.f._sbf._f._IO_write_ptr = '\0';
+
+ return done;
+}
diff --git a/REORG.TODO/stdlib/strfromd.c b/REORG.TODO/stdlib/strfromd.c
new file mode 100644
index 0000000000..5342059008
--- /dev/null
+++ b/REORG.TODO/stdlib/strfromd.c
@@ -0,0 +1,22 @@
+/* Definitions for strfromd. Implementation in stdlib/strfrom-skeleton.c.
+ Copyright (C) 2016-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#define FLOAT double
+#define STRFROM strfromd
+
+#include "strfrom-skeleton.c"
diff --git a/REORG.TODO/stdlib/strfromf.c b/REORG.TODO/stdlib/strfromf.c
new file mode 100644
index 0000000000..20c674414d
--- /dev/null
+++ b/REORG.TODO/stdlib/strfromf.c
@@ -0,0 +1,22 @@
+/* Definitions for strfromf. Implementation in stdlib/strfrom-skeleton.c.
+ Copyright (C) 2016-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#define FLOAT float
+#define STRFROM strfromf
+
+#include "strfrom-skeleton.c"
diff --git a/REORG.TODO/stdlib/strfroml.c b/REORG.TODO/stdlib/strfroml.c
new file mode 100644
index 0000000000..f8c8a4fcc5
--- /dev/null
+++ b/REORG.TODO/stdlib/strfroml.c
@@ -0,0 +1,22 @@
+/* Definitions for strfroml. Implementation in stdlib/strfrom-skeleton.c.
+ Copyright (C) 2016-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#define FLOAT long double
+#define STRFROM strfroml
+
+#include "strfrom-skeleton.c"
diff --git a/REORG.TODO/stdlib/strtod.c b/REORG.TODO/stdlib/strtod.c
new file mode 100644
index 0000000000..2ac1b2e57a
--- /dev/null
+++ b/REORG.TODO/stdlib/strtod.c
@@ -0,0 +1,80 @@
+/* Read decimal floating point numbers.
+ This file is part of the GNU C Library.
+ Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ Contributed by Ulrich Drepper <drepper@gnu.org>, 1995.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include <wchar.h>
+#include <locale/localeinfo.h>
+
+
+#ifndef FLOAT
+# include <math_ldbl_opt.h>
+# define FLOAT double
+# ifdef USE_WIDE_CHAR
+# define STRTOF wcstod
+# define STRTOF_L __wcstod_l
+# else
+# define STRTOF strtod
+# define STRTOF_L __strtod_l
+# endif
+#endif
+
+#ifdef USE_WIDE_CHAR
+# include <wctype.h>
+# define STRING_TYPE wchar_t
+#else
+# define STRING_TYPE char
+#endif
+
+#define INTERNAL(x) INTERNAL1(x)
+#define INTERNAL1(x) __##x##_internal
+
+
+FLOAT
+INTERNAL (STRTOF) (const STRING_TYPE *nptr, STRING_TYPE **endptr, int group)
+{
+ return INTERNAL(STRTOF_L) (nptr, endptr, group, _NL_CURRENT_LOCALE);
+}
+#if defined _LIBC
+libc_hidden_def (INTERNAL (STRTOF))
+#endif
+
+
+FLOAT
+#ifdef weak_function
+weak_function
+#endif
+STRTOF (const STRING_TYPE *nptr, STRING_TYPE **endptr)
+{
+ return INTERNAL(STRTOF_L) (nptr, endptr, 0, _NL_CURRENT_LOCALE);
+}
+#if defined _LIBC
+libc_hidden_def (STRTOF)
+#endif
+
+#ifdef LONG_DOUBLE_COMPAT
+# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0)
+# ifdef USE_WIDE_CHAR
+compat_symbol (libc, wcstod, wcstold, GLIBC_2_0);
+compat_symbol (libc, __wcstod_internal, __wcstold_internal, GLIBC_2_0);
+# else
+compat_symbol (libc, strtod, strtold, GLIBC_2_0);
+compat_symbol (libc, __strtod_internal, __strtold_internal, GLIBC_2_0);
+# endif
+# endif
+#endif
diff --git a/REORG.TODO/stdlib/strtod_l.c b/REORG.TODO/stdlib/strtod_l.c
new file mode 100644
index 0000000000..99c2af357e
--- /dev/null
+++ b/REORG.TODO/stdlib/strtod_l.c
@@ -0,0 +1,1787 @@
+/* Convert string representing a number to float value, using given locale.
+ Copyright (C) 1997-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <xlocale.h>
+
+extern double ____strtod_l_internal (const char *, char **, int, __locale_t);
+
+/* Configuration part. These macros are defined by `strtold.c',
+ `strtof.c', `wcstod.c', `wcstold.c', and `wcstof.c' to produce the
+ `long double' and `float' versions of the reader. */
+#ifndef FLOAT
+# include <math_ldbl_opt.h>
+# define FLOAT double
+# define FLT DBL
+# ifdef USE_WIDE_CHAR
+# define STRTOF wcstod_l
+# define __STRTOF __wcstod_l
+# define STRTOF_NAN __wcstod_nan
+# else
+# define STRTOF strtod_l
+# define __STRTOF __strtod_l
+# define STRTOF_NAN __strtod_nan
+# endif
+# define MPN2FLOAT __mpn_construct_double
+# define FLOAT_HUGE_VAL HUGE_VAL
+#endif
+/* End of configuration part. */
+
+#include <ctype.h>
+#include <errno.h>
+#include <float.h>
+#include "../locale/localeinfo.h"
+#include <locale.h>
+#include <math.h>
+#include <math_private.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdint.h>
+#include <rounding-mode.h>
+#include <tininess.h>
+
+/* The gmp headers need some configuration frobs. */
+#define HAVE_ALLOCA 1
+
+/* Include gmp-mparam.h first, such that definitions of _SHORT_LIMB
+ and _LONG_LONG_LIMB in it can take effect into gmp.h. */
+#include <gmp-mparam.h>
+#include <gmp.h>
+#include "gmp-impl.h"
+#include "longlong.h"
+#include "fpioconst.h"
+
+#include <assert.h>
+
+
+/* We use this code for the extended locale handling where the
+ function gets as an additional argument the locale which has to be
+ used. To access the values we have to redefine the _NL_CURRENT and
+ _NL_CURRENT_WORD macros. */
+#undef _NL_CURRENT
+#define _NL_CURRENT(category, item) \
+ (current->values[_NL_ITEM_INDEX (item)].string)
+#undef _NL_CURRENT_WORD
+#define _NL_CURRENT_WORD(category, item) \
+ ((uint32_t) current->values[_NL_ITEM_INDEX (item)].word)
+
+#if defined _LIBC || defined HAVE_WCHAR_H
+# include <wchar.h>
+#endif
+
+#ifdef USE_WIDE_CHAR
+# include <wctype.h>
+# define STRING_TYPE wchar_t
+# define CHAR_TYPE wint_t
+# define L_(Ch) L##Ch
+# define ISSPACE(Ch) __iswspace_l ((Ch), loc)
+# define ISDIGIT(Ch) __iswdigit_l ((Ch), loc)
+# define ISXDIGIT(Ch) __iswxdigit_l ((Ch), loc)
+# define TOLOWER(Ch) __towlower_l ((Ch), loc)
+# define TOLOWER_C(Ch) __towlower_l ((Ch), _nl_C_locobj_ptr)
+# define STRNCASECMP(S1, S2, N) \
+ __wcsncasecmp_l ((S1), (S2), (N), _nl_C_locobj_ptr)
+#else
+# define STRING_TYPE char
+# define CHAR_TYPE char
+# define L_(Ch) Ch
+# define ISSPACE(Ch) __isspace_l ((Ch), loc)
+# define ISDIGIT(Ch) __isdigit_l ((Ch), loc)
+# define ISXDIGIT(Ch) __isxdigit_l ((Ch), loc)
+# define TOLOWER(Ch) __tolower_l ((Ch), loc)
+# define TOLOWER_C(Ch) __tolower_l ((Ch), _nl_C_locobj_ptr)
+# define STRNCASECMP(S1, S2, N) \
+ __strncasecmp_l ((S1), (S2), (N), _nl_C_locobj_ptr)
+#endif
+
+
+/* Constants we need from float.h; select the set for the FLOAT precision. */
+#define MANT_DIG PASTE(FLT,_MANT_DIG)
+#define DIG PASTE(FLT,_DIG)
+#define MAX_EXP PASTE(FLT,_MAX_EXP)
+#define MIN_EXP PASTE(FLT,_MIN_EXP)
+#define MAX_10_EXP PASTE(FLT,_MAX_10_EXP)
+#define MIN_10_EXP PASTE(FLT,_MIN_10_EXP)
+#define MAX_VALUE PASTE(FLT,_MAX)
+#define MIN_VALUE PASTE(FLT,_MIN)
+
+/* Extra macros required to get FLT expanded before the pasting. */
+#define PASTE(a,b) PASTE1(a,b)
+#define PASTE1(a,b) a##b
+
+/* Function to construct a floating point number from an MP integer
+ containing the fraction bits, a base 2 exponent, and a sign flag. */
+extern FLOAT MPN2FLOAT (mp_srcptr mpn, int exponent, int negative);
+
+/* Definitions according to limb size used. */
+#if BITS_PER_MP_LIMB == 32
+# define MAX_DIG_PER_LIMB 9
+# define MAX_FAC_PER_LIMB 1000000000UL
+#elif BITS_PER_MP_LIMB == 64
+# define MAX_DIG_PER_LIMB 19
+# define MAX_FAC_PER_LIMB 10000000000000000000ULL
+#else
+# error "mp_limb_t size " BITS_PER_MP_LIMB "not accounted for"
+#endif
+
+extern const mp_limb_t _tens_in_limb[MAX_DIG_PER_LIMB + 1];
+
+#ifndef howmany
+#define howmany(x,y) (((x)+((y)-1))/(y))
+#endif
+#define SWAP(x, y) ({ typeof(x) _tmp = x; x = y; y = _tmp; })
+
+#define RETURN_LIMB_SIZE howmany (MANT_DIG, BITS_PER_MP_LIMB)
+
+#define RETURN(val,end) \
+ do { if (endptr != NULL) *endptr = (STRING_TYPE *) (end); \
+ return val; } while (0)
+
+/* Maximum size necessary for mpn integers to hold floating point
+ numbers. The largest number we need to hold is 10^n where 2^-n is
+ 1/4 ulp of the smallest representable value (that is, n = MANT_DIG
+ - MIN_EXP + 2). Approximate using 10^3 < 2^10. */
+#define MPNSIZE (howmany (1 + ((MANT_DIG - MIN_EXP + 2) * 10) / 3, \
+ BITS_PER_MP_LIMB) + 2)
+/* Declare an mpn integer variable that big. */
+#define MPN_VAR(name) mp_limb_t name[MPNSIZE]; mp_size_t name##size
+/* Copy an mpn integer value. */
+#define MPN_ASSIGN(dst, src) \
+ memcpy (dst, src, (dst##size = src##size) * sizeof (mp_limb_t))
+
+
+/* Set errno and return an overflowing value with sign specified by
+ NEGATIVE. */
+static FLOAT
+overflow_value (int negative)
+{
+ __set_errno (ERANGE);
+ FLOAT result = math_narrow_eval ((negative ? -MAX_VALUE : MAX_VALUE)
+ * MAX_VALUE);
+ return result;
+}
+
+
+/* Set errno and return an underflowing value with sign specified by
+ NEGATIVE. */
+static FLOAT
+underflow_value (int negative)
+{
+ __set_errno (ERANGE);
+ FLOAT result = math_narrow_eval ((negative ? -MIN_VALUE : MIN_VALUE)
+ * MIN_VALUE);
+ return result;
+}
+
+
+/* Return a floating point number of the needed type according to the given
+ multi-precision number after possible rounding. */
+static FLOAT
+round_and_return (mp_limb_t *retval, intmax_t exponent, int negative,
+ mp_limb_t round_limb, mp_size_t round_bit, int more_bits)
+{
+ int mode = get_rounding_mode ();
+
+ if (exponent < MIN_EXP - 1)
+ {
+ if (exponent < MIN_EXP - 1 - MANT_DIG)
+ return underflow_value (negative);
+
+ mp_size_t shift = MIN_EXP - 1 - exponent;
+ bool is_tiny = true;
+
+ more_bits |= (round_limb & ((((mp_limb_t) 1) << round_bit) - 1)) != 0;
+ if (shift == MANT_DIG)
+ /* This is a special case to handle the very seldom case where
+ the mantissa will be empty after the shift. */
+ {
+ int i;
+
+ round_limb = retval[RETURN_LIMB_SIZE - 1];
+ round_bit = (MANT_DIG - 1) % BITS_PER_MP_LIMB;
+ for (i = 0; i < RETURN_LIMB_SIZE - 1; ++i)
+ more_bits |= retval[i] != 0;
+ MPN_ZERO (retval, RETURN_LIMB_SIZE);
+ }
+ else if (shift >= BITS_PER_MP_LIMB)
+ {
+ int i;
+
+ round_limb = retval[(shift - 1) / BITS_PER_MP_LIMB];
+ round_bit = (shift - 1) % BITS_PER_MP_LIMB;
+ for (i = 0; i < (shift - 1) / BITS_PER_MP_LIMB; ++i)
+ more_bits |= retval[i] != 0;
+ more_bits |= ((round_limb & ((((mp_limb_t) 1) << round_bit) - 1))
+ != 0);
+
+ /* __mpn_rshift requires 0 < shift < BITS_PER_MP_LIMB. */
+ if ((shift % BITS_PER_MP_LIMB) != 0)
+ (void) __mpn_rshift (retval, &retval[shift / BITS_PER_MP_LIMB],
+ RETURN_LIMB_SIZE - (shift / BITS_PER_MP_LIMB),
+ shift % BITS_PER_MP_LIMB);
+ else
+ for (i = 0; i < RETURN_LIMB_SIZE - (shift / BITS_PER_MP_LIMB); i++)
+ retval[i] = retval[i + (shift / BITS_PER_MP_LIMB)];
+ MPN_ZERO (&retval[RETURN_LIMB_SIZE - (shift / BITS_PER_MP_LIMB)],
+ shift / BITS_PER_MP_LIMB);
+ }
+ else if (shift > 0)
+ {
+ if (TININESS_AFTER_ROUNDING && shift == 1)
+ {
+ /* Whether the result counts as tiny depends on whether,
+ after rounding to the normal precision, it still has
+ a subnormal exponent. */
+ mp_limb_t retval_normal[RETURN_LIMB_SIZE];
+ if (round_away (negative,
+ (retval[0] & 1) != 0,
+ (round_limb
+ & (((mp_limb_t) 1) << round_bit)) != 0,
+ (more_bits
+ || ((round_limb
+ & ((((mp_limb_t) 1) << round_bit) - 1))
+ != 0)),
+ mode))
+ {
+ mp_limb_t cy = __mpn_add_1 (retval_normal, retval,
+ RETURN_LIMB_SIZE, 1);
+
+ if (((MANT_DIG % BITS_PER_MP_LIMB) == 0 && cy) ||
+ ((MANT_DIG % BITS_PER_MP_LIMB) != 0 &&
+ ((retval_normal[RETURN_LIMB_SIZE - 1]
+ & (((mp_limb_t) 1) << (MANT_DIG % BITS_PER_MP_LIMB)))
+ != 0)))
+ is_tiny = false;
+ }
+ }
+ round_limb = retval[0];
+ round_bit = shift - 1;
+ (void) __mpn_rshift (retval, retval, RETURN_LIMB_SIZE, shift);
+ }
+ /* This is a hook for the m68k long double format, where the
+ exponent bias is the same for normalized and denormalized
+ numbers. */
+#ifndef DENORM_EXP
+# define DENORM_EXP (MIN_EXP - 2)
+#endif
+ exponent = DENORM_EXP;
+ if (is_tiny
+ && ((round_limb & (((mp_limb_t) 1) << round_bit)) != 0
+ || more_bits
+ || (round_limb & ((((mp_limb_t) 1) << round_bit) - 1)) != 0))
+ {
+ __set_errno (ERANGE);
+ FLOAT force_underflow = MIN_VALUE * MIN_VALUE;
+ math_force_eval (force_underflow);
+ }
+ }
+
+ if (exponent > MAX_EXP)
+ goto overflow;
+
+ bool half_bit = (round_limb & (((mp_limb_t) 1) << round_bit)) != 0;
+ bool more_bits_nonzero
+ = (more_bits
+ || (round_limb & ((((mp_limb_t) 1) << round_bit) - 1)) != 0);
+ if (round_away (negative,
+ (retval[0] & 1) != 0,
+ half_bit,
+ more_bits_nonzero,
+ mode))
+ {
+ mp_limb_t cy = __mpn_add_1 (retval, retval, RETURN_LIMB_SIZE, 1);
+
+ if (((MANT_DIG % BITS_PER_MP_LIMB) == 0 && cy) ||
+ ((MANT_DIG % BITS_PER_MP_LIMB) != 0 &&
+ (retval[RETURN_LIMB_SIZE - 1]
+ & (((mp_limb_t) 1) << (MANT_DIG % BITS_PER_MP_LIMB))) != 0))
+ {
+ ++exponent;
+ (void) __mpn_rshift (retval, retval, RETURN_LIMB_SIZE, 1);
+ retval[RETURN_LIMB_SIZE - 1]
+ |= ((mp_limb_t) 1) << ((MANT_DIG - 1) % BITS_PER_MP_LIMB);
+ }
+ else if (exponent == DENORM_EXP
+ && (retval[RETURN_LIMB_SIZE - 1]
+ & (((mp_limb_t) 1) << ((MANT_DIG - 1) % BITS_PER_MP_LIMB)))
+ != 0)
+ /* The number was denormalized but now normalized. */
+ exponent = MIN_EXP - 1;
+ }
+
+ if (exponent > MAX_EXP)
+ overflow:
+ return overflow_value (negative);
+
+ if (half_bit || more_bits_nonzero)
+ {
+ FLOAT force_inexact = (FLOAT) 1 + MIN_VALUE;
+ math_force_eval (force_inexact);
+ }
+ return MPN2FLOAT (retval, exponent, negative);
+}
+
+
+/* Read a multi-precision integer starting at STR with exactly DIGCNT digits
+ into N. Return the size of the number limbs in NSIZE at the first
+ character od the string that is not part of the integer as the function
+ value. If the EXPONENT is small enough to be taken as an additional
+ factor for the resulting number (see code) multiply by it. */
+static const STRING_TYPE *
+str_to_mpn (const STRING_TYPE *str, int digcnt, mp_limb_t *n, mp_size_t *nsize,
+ intmax_t *exponent
+#ifndef USE_WIDE_CHAR
+ , const char *decimal, size_t decimal_len, const char *thousands
+#endif
+
+ )
+{
+ /* Number of digits for actual limb. */
+ int cnt = 0;
+ mp_limb_t low = 0;
+ mp_limb_t start;
+
+ *nsize = 0;
+ assert (digcnt > 0);
+ do
+ {
+ if (cnt == MAX_DIG_PER_LIMB)
+ {
+ if (*nsize == 0)
+ {
+ n[0] = low;
+ *nsize = 1;
+ }
+ else
+ {
+ mp_limb_t cy;
+ cy = __mpn_mul_1 (n, n, *nsize, MAX_FAC_PER_LIMB);
+ cy += __mpn_add_1 (n, n, *nsize, low);
+ if (cy != 0)
+ {
+ assert (*nsize < MPNSIZE);
+ n[*nsize] = cy;
+ ++(*nsize);
+ }
+ }
+ cnt = 0;
+ low = 0;
+ }
+
+ /* There might be thousands separators or radix characters in
+ the string. But these all can be ignored because we know the
+ format of the number is correct and we have an exact number
+ of characters to read. */
+#ifdef USE_WIDE_CHAR
+ if (*str < L'0' || *str > L'9')
+ ++str;
+#else
+ if (*str < '0' || *str > '9')
+ {
+ int inner = 0;
+ if (thousands != NULL && *str == *thousands
+ && ({ for (inner = 1; thousands[inner] != '\0'; ++inner)
+ if (thousands[inner] != str[inner])
+ break;
+ thousands[inner] == '\0'; }))
+ str += inner;
+ else
+ str += decimal_len;
+ }
+#endif
+ low = low * 10 + *str++ - L_('0');
+ ++cnt;
+ }
+ while (--digcnt > 0);
+
+ if (*exponent > 0 && *exponent <= MAX_DIG_PER_LIMB - cnt)
+ {
+ low *= _tens_in_limb[*exponent];
+ start = _tens_in_limb[cnt + *exponent];
+ *exponent = 0;
+ }
+ else
+ start = _tens_in_limb[cnt];
+
+ if (*nsize == 0)
+ {
+ n[0] = low;
+ *nsize = 1;
+ }
+ else
+ {
+ mp_limb_t cy;
+ cy = __mpn_mul_1 (n, n, *nsize, start);
+ cy += __mpn_add_1 (n, n, *nsize, low);
+ if (cy != 0)
+ {
+ assert (*nsize < MPNSIZE);
+ n[(*nsize)++] = cy;
+ }
+ }
+
+ return str;
+}
+
+
+/* Shift {PTR, SIZE} COUNT bits to the left, and fill the vacated bits
+ with the COUNT most significant bits of LIMB.
+
+ Implemented as a macro, so that __builtin_constant_p works even at -O0.
+
+ Tege doesn't like this macro so I have to write it here myself. :)
+ --drepper */
+#define __mpn_lshift_1(ptr, size, count, limb) \
+ do \
+ { \
+ mp_limb_t *__ptr = (ptr); \
+ if (__builtin_constant_p (count) && count == BITS_PER_MP_LIMB) \
+ { \
+ mp_size_t i; \
+ for (i = (size) - 1; i > 0; --i) \
+ __ptr[i] = __ptr[i - 1]; \
+ __ptr[0] = (limb); \
+ } \
+ else \
+ { \
+ /* We assume count > 0 && count < BITS_PER_MP_LIMB here. */ \
+ unsigned int __count = (count); \
+ (void) __mpn_lshift (__ptr, __ptr, size, __count); \
+ __ptr[0] |= (limb) >> (BITS_PER_MP_LIMB - __count); \
+ } \
+ } \
+ while (0)
+
+
+#define INTERNAL(x) INTERNAL1(x)
+#define INTERNAL1(x) __##x##_internal
+#ifndef ____STRTOF_INTERNAL
+# define ____STRTOF_INTERNAL INTERNAL (__STRTOF)
+#endif
+
+/* This file defines a function to check for correct grouping. */
+#include "grouping.h"
+
+
+/* Return a floating point number with the value of the given string NPTR.
+ Set *ENDPTR to the character after the last used one. If the number is
+ smaller than the smallest representable number, set `errno' to ERANGE and
+ return 0.0. If the number is too big to be represented, set `errno' to
+ ERANGE and return HUGE_VAL with the appropriate sign. */
+FLOAT
+____STRTOF_INTERNAL (const STRING_TYPE *nptr, STRING_TYPE **endptr, int group,
+ __locale_t loc)
+{
+ int negative; /* The sign of the number. */
+ MPN_VAR (num); /* MP representation of the number. */
+ intmax_t exponent; /* Exponent of the number. */
+
+ /* Numbers starting `0X' or `0x' have to be processed with base 16. */
+ int base = 10;
+
+ /* When we have to compute fractional digits we form a fraction with a
+ second multi-precision number (and we sometimes need a second for
+ temporary results). */
+ MPN_VAR (den);
+
+ /* Representation for the return value. */
+ mp_limb_t retval[RETURN_LIMB_SIZE];
+ /* Number of bits currently in result value. */
+ int bits;
+
+ /* Running pointer after the last character processed in the string. */
+ const STRING_TYPE *cp, *tp;
+ /* Start of significant part of the number. */
+ const STRING_TYPE *startp, *start_of_digits;
+ /* Points at the character following the integer and fractional digits. */
+ const STRING_TYPE *expp;
+ /* Total number of digit and number of digits in integer part. */
+ size_t dig_no, int_no, lead_zero;
+ /* Contains the last character read. */
+ CHAR_TYPE c;
+
+/* We should get wint_t from <stddef.h>, but not all GCC versions define it
+ there. So define it ourselves if it remains undefined. */
+#ifndef _WINT_T
+ typedef unsigned int wint_t;
+#endif
+ /* The radix character of the current locale. */
+#ifdef USE_WIDE_CHAR
+ wchar_t decimal;
+#else
+ const char *decimal;
+ size_t decimal_len;
+#endif
+ /* The thousands character of the current locale. */
+#ifdef USE_WIDE_CHAR
+ wchar_t thousands = L'\0';
+#else
+ const char *thousands = NULL;
+#endif
+ /* The numeric grouping specification of the current locale,
+ in the format described in <locale.h>. */
+ const char *grouping;
+ /* Used in several places. */
+ int cnt;
+
+ struct __locale_data *current = loc->__locales[LC_NUMERIC];
+
+ if (__glibc_unlikely (group))
+ {
+ grouping = _NL_CURRENT (LC_NUMERIC, GROUPING);
+ if (*grouping <= 0 || *grouping == CHAR_MAX)
+ grouping = NULL;
+ else
+ {
+ /* Figure out the thousands separator character. */
+#ifdef USE_WIDE_CHAR
+ thousands = _NL_CURRENT_WORD (LC_NUMERIC,
+ _NL_NUMERIC_THOUSANDS_SEP_WC);
+ if (thousands == L'\0')
+ grouping = NULL;
+#else
+ thousands = _NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP);
+ if (*thousands == '\0')
+ {
+ thousands = NULL;
+ grouping = NULL;
+ }
+#endif
+ }
+ }
+ else
+ grouping = NULL;
+
+ /* Find the locale's decimal point character. */
+#ifdef USE_WIDE_CHAR
+ decimal = _NL_CURRENT_WORD (LC_NUMERIC, _NL_NUMERIC_DECIMAL_POINT_WC);
+ assert (decimal != L'\0');
+# define decimal_len 1
+#else
+ decimal = _NL_CURRENT (LC_NUMERIC, DECIMAL_POINT);
+ decimal_len = strlen (decimal);
+ assert (decimal_len > 0);
+#endif
+
+ /* Prepare number representation. */
+ exponent = 0;
+ negative = 0;
+ bits = 0;
+
+ /* Parse string to get maximal legal prefix. We need the number of
+ characters of the integer part, the fractional part and the exponent. */
+ cp = nptr - 1;
+ /* Ignore leading white space. */
+ do
+ c = *++cp;
+ while (ISSPACE (c));
+
+ /* Get sign of the result. */
+ if (c == L_('-'))
+ {
+ negative = 1;
+ c = *++cp;
+ }
+ else if (c == L_('+'))
+ c = *++cp;
+
+ /* Return 0.0 if no legal string is found.
+ No character is used even if a sign was found. */
+#ifdef USE_WIDE_CHAR
+ if (c == (wint_t) decimal
+ && (wint_t) cp[1] >= L'0' && (wint_t) cp[1] <= L'9')
+ {
+ /* We accept it. This funny construct is here only to indent
+ the code correctly. */
+ }
+#else
+ for (cnt = 0; decimal[cnt] != '\0'; ++cnt)
+ if (cp[cnt] != decimal[cnt])
+ break;
+ if (decimal[cnt] == '\0' && cp[cnt] >= '0' && cp[cnt] <= '9')
+ {
+ /* We accept it. This funny construct is here only to indent
+ the code correctly. */
+ }
+#endif
+ else if (c < L_('0') || c > L_('9'))
+ {
+ /* Check for `INF' or `INFINITY'. */
+ CHAR_TYPE lowc = TOLOWER_C (c);
+
+ if (lowc == L_('i') && STRNCASECMP (cp, L_("inf"), 3) == 0)
+ {
+ /* Return +/- infinity. */
+ if (endptr != NULL)
+ *endptr = (STRING_TYPE *)
+ (cp + (STRNCASECMP (cp + 3, L_("inity"), 5) == 0
+ ? 8 : 3));
+
+ return negative ? -FLOAT_HUGE_VAL : FLOAT_HUGE_VAL;
+ }
+
+ if (lowc == L_('n') && STRNCASECMP (cp, L_("nan"), 3) == 0)
+ {
+ /* Return NaN. */
+ FLOAT retval = NAN;
+
+ cp += 3;
+
+ /* Match `(n-char-sequence-digit)'. */
+ if (*cp == L_('('))
+ {
+ const STRING_TYPE *startp = cp;
+ STRING_TYPE *endp;
+ retval = STRTOF_NAN (cp + 1, &endp, L_(')'));
+ if (*endp == L_(')'))
+ /* Consume the closing parenthesis. */
+ cp = endp + 1;
+ else
+ /* Only match the NAN part. */
+ cp = startp;
+ }
+
+ if (endptr != NULL)
+ *endptr = (STRING_TYPE *) cp;
+
+ return retval;
+ }
+
+ /* It is really a text we do not recognize. */
+ RETURN (0.0, nptr);
+ }
+
+ /* First look whether we are faced with a hexadecimal number. */
+ if (c == L_('0') && TOLOWER (cp[1]) == L_('x'))
+ {
+ /* Okay, it is a hexa-decimal number. Remember this and skip
+ the characters. BTW: hexadecimal numbers must not be
+ grouped. */
+ base = 16;
+ cp += 2;
+ c = *cp;
+ grouping = NULL;
+ }
+
+ /* Record the start of the digits, in case we will check their grouping. */
+ start_of_digits = startp = cp;
+
+ /* Ignore leading zeroes. This helps us to avoid useless computations. */
+#ifdef USE_WIDE_CHAR
+ while (c == L'0' || ((wint_t) thousands != L'\0' && c == (wint_t) thousands))
+ c = *++cp;
+#else
+ if (__glibc_likely (thousands == NULL))
+ while (c == '0')
+ c = *++cp;
+ else
+ {
+ /* We also have the multibyte thousands string. */
+ while (1)
+ {
+ if (c != '0')
+ {
+ for (cnt = 0; thousands[cnt] != '\0'; ++cnt)
+ if (thousands[cnt] != cp[cnt])
+ break;
+ if (thousands[cnt] != '\0')
+ break;
+ cp += cnt - 1;
+ }
+ c = *++cp;
+ }
+ }
+#endif
+
+ /* If no other digit but a '0' is found the result is 0.0.
+ Return current read pointer. */
+ CHAR_TYPE lowc = TOLOWER (c);
+ if (!((c >= L_('0') && c <= L_('9'))
+ || (base == 16 && lowc >= L_('a') && lowc <= L_('f'))
+ || (
+#ifdef USE_WIDE_CHAR
+ c == (wint_t) decimal
+#else
+ ({ for (cnt = 0; decimal[cnt] != '\0'; ++cnt)
+ if (decimal[cnt] != cp[cnt])
+ break;
+ decimal[cnt] == '\0'; })
+#endif
+ /* '0x.' alone is not a valid hexadecimal number.
+ '.' alone is not valid either, but that has been checked
+ already earlier. */
+ && (base != 16
+ || cp != start_of_digits
+ || (cp[decimal_len] >= L_('0') && cp[decimal_len] <= L_('9'))
+ || ({ CHAR_TYPE lo = TOLOWER (cp[decimal_len]);
+ lo >= L_('a') && lo <= L_('f'); })))
+ || (base == 16 && (cp != start_of_digits
+ && lowc == L_('p')))
+ || (base != 16 && lowc == L_('e'))))
+ {
+#ifdef USE_WIDE_CHAR
+ tp = __correctly_grouped_prefixwc (start_of_digits, cp, thousands,
+ grouping);
+#else
+ tp = __correctly_grouped_prefixmb (start_of_digits, cp, thousands,
+ grouping);
+#endif
+ /* If TP is at the start of the digits, there was no correctly
+ grouped prefix of the string; so no number found. */
+ RETURN (negative ? -0.0 : 0.0,
+ tp == start_of_digits ? (base == 16 ? cp - 1 : nptr) : tp);
+ }
+
+ /* Remember first significant digit and read following characters until the
+ decimal point, exponent character or any non-FP number character. */
+ startp = cp;
+ dig_no = 0;
+ while (1)
+ {
+ if ((c >= L_('0') && c <= L_('9'))
+ || (base == 16
+ && ({ CHAR_TYPE lo = TOLOWER (c);
+ lo >= L_('a') && lo <= L_('f'); })))
+ ++dig_no;
+ else
+ {
+#ifdef USE_WIDE_CHAR
+ if (__builtin_expect ((wint_t) thousands == L'\0', 1)
+ || c != (wint_t) thousands)
+ /* Not a digit or separator: end of the integer part. */
+ break;
+#else
+ if (__glibc_likely (thousands == NULL))
+ break;
+ else
+ {
+ for (cnt = 0; thousands[cnt] != '\0'; ++cnt)
+ if (thousands[cnt] != cp[cnt])
+ break;
+ if (thousands[cnt] != '\0')
+ break;
+ cp += cnt - 1;
+ }
+#endif
+ }
+ c = *++cp;
+ }
+
+ if (__builtin_expect (grouping != NULL, 0) && cp > start_of_digits)
+ {
+ /* Check the grouping of the digits. */
+#ifdef USE_WIDE_CHAR
+ tp = __correctly_grouped_prefixwc (start_of_digits, cp, thousands,
+ grouping);
+#else
+ tp = __correctly_grouped_prefixmb (start_of_digits, cp, thousands,
+ grouping);
+#endif
+ if (cp != tp)
+ {
+ /* Less than the entire string was correctly grouped. */
+
+ if (tp == start_of_digits)
+ /* No valid group of numbers at all: no valid number. */
+ RETURN (0.0, nptr);
+
+ if (tp < startp)
+ /* The number is validly grouped, but consists
+ only of zeroes. The whole value is zero. */
+ RETURN (negative ? -0.0 : 0.0, tp);
+
+ /* Recompute DIG_NO so we won't read more digits than
+ are properly grouped. */
+ cp = tp;
+ dig_no = 0;
+ for (tp = startp; tp < cp; ++tp)
+ if (*tp >= L_('0') && *tp <= L_('9'))
+ ++dig_no;
+
+ int_no = dig_no;
+ lead_zero = 0;
+
+ goto number_parsed;
+ }
+ }
+
+ /* We have the number of digits in the integer part. Whether these
+ are all or any is really a fractional digit will be decided
+ later. */
+ int_no = dig_no;
+ lead_zero = int_no == 0 ? (size_t) -1 : 0;
+
+ /* Read the fractional digits. A special case are the 'american
+ style' numbers like `16.' i.e. with decimal point but without
+ trailing digits. */
+ if (
+#ifdef USE_WIDE_CHAR
+ c == (wint_t) decimal
+#else
+ ({ for (cnt = 0; decimal[cnt] != '\0'; ++cnt)
+ if (decimal[cnt] != cp[cnt])
+ break;
+ decimal[cnt] == '\0'; })
+#endif
+ )
+ {
+ cp += decimal_len;
+ c = *cp;
+ while ((c >= L_('0') && c <= L_('9')) ||
+ (base == 16 && ({ CHAR_TYPE lo = TOLOWER (c);
+ lo >= L_('a') && lo <= L_('f'); })))
+ {
+ if (c != L_('0') && lead_zero == (size_t) -1)
+ lead_zero = dig_no - int_no;
+ ++dig_no;
+ c = *++cp;
+ }
+ }
+ assert (dig_no <= (uintmax_t) INTMAX_MAX);
+
+ /* Remember start of exponent (if any). */
+ expp = cp;
+
+ /* Read exponent. */
+ lowc = TOLOWER (c);
+ if ((base == 16 && lowc == L_('p'))
+ || (base != 16 && lowc == L_('e')))
+ {
+ int exp_negative = 0;
+
+ c = *++cp;
+ if (c == L_('-'))
+ {
+ exp_negative = 1;
+ c = *++cp;
+ }
+ else if (c == L_('+'))
+ c = *++cp;
+
+ if (c >= L_('0') && c <= L_('9'))
+ {
+ intmax_t exp_limit;
+
+ /* Get the exponent limit. */
+ if (base == 16)
+ {
+ if (exp_negative)
+ {
+ assert (int_no <= (uintmax_t) (INTMAX_MAX
+ + MIN_EXP - MANT_DIG) / 4);
+ exp_limit = -MIN_EXP + MANT_DIG + 4 * (intmax_t) int_no;
+ }
+ else
+ {
+ if (int_no)
+ {
+ assert (lead_zero == 0
+ && int_no <= (uintmax_t) INTMAX_MAX / 4);
+ exp_limit = MAX_EXP - 4 * (intmax_t) int_no + 3;
+ }
+ else if (lead_zero == (size_t) -1)
+ {
+ /* The number is zero and this limit is
+ arbitrary. */
+ exp_limit = MAX_EXP + 3;
+ }
+ else
+ {
+ assert (lead_zero
+ <= (uintmax_t) (INTMAX_MAX - MAX_EXP - 3) / 4);
+ exp_limit = (MAX_EXP
+ + 4 * (intmax_t) lead_zero
+ + 3);
+ }
+ }
+ }
+ else
+ {
+ if (exp_negative)
+ {
+ assert (int_no
+ <= (uintmax_t) (INTMAX_MAX + MIN_10_EXP - MANT_DIG));
+ exp_limit = -MIN_10_EXP + MANT_DIG + (intmax_t) int_no;
+ }
+ else
+ {
+ if (int_no)
+ {
+ assert (lead_zero == 0
+ && int_no <= (uintmax_t) INTMAX_MAX);
+ exp_limit = MAX_10_EXP - (intmax_t) int_no + 1;
+ }
+ else if (lead_zero == (size_t) -1)
+ {
+ /* The number is zero and this limit is
+ arbitrary. */
+ exp_limit = MAX_10_EXP + 1;
+ }
+ else
+ {
+ assert (lead_zero
+ <= (uintmax_t) (INTMAX_MAX - MAX_10_EXP - 1));
+ exp_limit = MAX_10_EXP + (intmax_t) lead_zero + 1;
+ }
+ }
+ }
+
+ if (exp_limit < 0)
+ exp_limit = 0;
+
+ do
+ {
+ if (__builtin_expect ((exponent > exp_limit / 10
+ || (exponent == exp_limit / 10
+ && c - L_('0') > exp_limit % 10)), 0))
+ /* The exponent is too large/small to represent a valid
+ number. */
+ {
+ FLOAT result;
+
+ /* We have to take care for special situation: a joker
+ might have written "0.0e100000" which is in fact
+ zero. */
+ if (lead_zero == (size_t) -1)
+ result = negative ? -0.0 : 0.0;
+ else
+ {
+ /* Overflow or underflow. */
+ result = (exp_negative
+ ? underflow_value (negative)
+ : overflow_value (negative));
+ }
+
+ /* Accept all following digits as part of the exponent. */
+ do
+ ++cp;
+ while (*cp >= L_('0') && *cp <= L_('9'));
+
+ RETURN (result, cp);
+ /* NOTREACHED */
+ }
+
+ exponent *= 10;
+ exponent += c - L_('0');
+
+ c = *++cp;
+ }
+ while (c >= L_('0') && c <= L_('9'));
+
+ if (exp_negative)
+ exponent = -exponent;
+ }
+ else
+ cp = expp;
+ }
+
+ /* We don't want to have to work with trailing zeroes after the radix. */
+ if (dig_no > int_no)
+ {
+ while (expp[-1] == L_('0'))
+ {
+ --expp;
+ --dig_no;
+ }
+ assert (dig_no >= int_no);
+ }
+
+ if (dig_no == int_no && dig_no > 0 && exponent < 0)
+ do
+ {
+ while (! (base == 16 ? ISXDIGIT (expp[-1]) : ISDIGIT (expp[-1])))
+ --expp;
+
+ if (expp[-1] != L_('0'))
+ break;
+
+ --expp;
+ --dig_no;
+ --int_no;
+ exponent += base == 16 ? 4 : 1;
+ }
+ while (dig_no > 0 && exponent < 0);
+
+ number_parsed:
+
+ /* The whole string is parsed. Store the address of the next character. */
+ if (endptr)
+ *endptr = (STRING_TYPE *) cp;
+
+ if (dig_no == 0)
+ return negative ? -0.0 : 0.0;
+
+ if (lead_zero)
+ {
+ /* Find the decimal point */
+#ifdef USE_WIDE_CHAR
+ while (*startp != decimal)
+ ++startp;
+#else
+ while (1)
+ {
+ if (*startp == decimal[0])
+ {
+ for (cnt = 1; decimal[cnt] != '\0'; ++cnt)
+ if (decimal[cnt] != startp[cnt])
+ break;
+ if (decimal[cnt] == '\0')
+ break;
+ }
+ ++startp;
+ }
+#endif
+ startp += lead_zero + decimal_len;
+ assert (lead_zero <= (base == 16
+ ? (uintmax_t) INTMAX_MAX / 4
+ : (uintmax_t) INTMAX_MAX));
+ assert (lead_zero <= (base == 16
+ ? ((uintmax_t) exponent
+ - (uintmax_t) INTMAX_MIN) / 4
+ : ((uintmax_t) exponent - (uintmax_t) INTMAX_MIN)));
+ exponent -= base == 16 ? 4 * (intmax_t) lead_zero : (intmax_t) lead_zero;
+ dig_no -= lead_zero;
+ }
+
+ /* If the BASE is 16 we can use a simpler algorithm. */
+ if (base == 16)
+ {
+ static const int nbits[16] = { 0, 1, 2, 2, 3, 3, 3, 3,
+ 4, 4, 4, 4, 4, 4, 4, 4 };
+ int idx = (MANT_DIG - 1) / BITS_PER_MP_LIMB;
+ int pos = (MANT_DIG - 1) % BITS_PER_MP_LIMB;
+ mp_limb_t val;
+
+ while (!ISXDIGIT (*startp))
+ ++startp;
+ while (*startp == L_('0'))
+ ++startp;
+ if (ISDIGIT (*startp))
+ val = *startp++ - L_('0');
+ else
+ val = 10 + TOLOWER (*startp++) - L_('a');
+ bits = nbits[val];
+ /* We cannot have a leading zero. */
+ assert (bits != 0);
+
+ if (pos + 1 >= 4 || pos + 1 >= bits)
+ {
+ /* We don't have to care for wrapping. This is the normal
+ case so we add the first clause in the `if' expression as
+ an optimization. It is a compile-time constant and so does
+ not cost anything. */
+ retval[idx] = val << (pos - bits + 1);
+ pos -= bits;
+ }
+ else
+ {
+ retval[idx--] = val >> (bits - pos - 1);
+ retval[idx] = val << (BITS_PER_MP_LIMB - (bits - pos - 1));
+ pos = BITS_PER_MP_LIMB - 1 - (bits - pos - 1);
+ }
+
+ /* Adjust the exponent for the bits we are shifting in. */
+ assert (int_no <= (uintmax_t) (exponent < 0
+ ? (INTMAX_MAX - bits + 1) / 4
+ : (INTMAX_MAX - exponent - bits + 1) / 4));
+ exponent += bits - 1 + ((intmax_t) int_no - 1) * 4;
+
+ while (--dig_no > 0 && idx >= 0)
+ {
+ if (!ISXDIGIT (*startp))
+ startp += decimal_len;
+ if (ISDIGIT (*startp))
+ val = *startp++ - L_('0');
+ else
+ val = 10 + TOLOWER (*startp++) - L_('a');
+
+ if (pos + 1 >= 4)
+ {
+ retval[idx] |= val << (pos - 4 + 1);
+ pos -= 4;
+ }
+ else
+ {
+ retval[idx--] |= val >> (4 - pos - 1);
+ val <<= BITS_PER_MP_LIMB - (4 - pos - 1);
+ if (idx < 0)
+ {
+ int rest_nonzero = 0;
+ while (--dig_no > 0)
+ {
+ if (*startp != L_('0'))
+ {
+ rest_nonzero = 1;
+ break;
+ }
+ startp++;
+ }
+ return round_and_return (retval, exponent, negative, val,
+ BITS_PER_MP_LIMB - 1, rest_nonzero);
+ }
+
+ retval[idx] = val;
+ pos = BITS_PER_MP_LIMB - 1 - (4 - pos - 1);
+ }
+ }
+
+ /* We ran out of digits. */
+ MPN_ZERO (retval, idx);
+
+ return round_and_return (retval, exponent, negative, 0, 0, 0);
+ }
+
+ /* Now we have the number of digits in total and the integer digits as well
+ as the exponent and its sign. We can decide whether the read digits are
+ really integer digits or belong to the fractional part; i.e. we normalize
+ 123e-2 to 1.23. */
+ {
+ intmax_t incr = (exponent < 0
+ ? MAX (-(intmax_t) int_no, exponent)
+ : MIN ((intmax_t) dig_no - (intmax_t) int_no, exponent));
+ int_no += incr;
+ exponent -= incr;
+ }
+
+ if (__glibc_unlikely (exponent > MAX_10_EXP + 1 - (intmax_t) int_no))
+ return overflow_value (negative);
+
+ /* 10^(MIN_10_EXP-1) is not normal. Thus, 10^(MIN_10_EXP-1) /
+ 2^MANT_DIG is below half the least subnormal, so anything with a
+ base-10 exponent less than the base-10 exponent (which is
+ MIN_10_EXP - 1 - ceil(MANT_DIG*log10(2))) of that value
+ underflows. DIG is floor((MANT_DIG-1)log10(2)), so an exponent
+ below MIN_10_EXP - (DIG + 3) underflows. But EXPONENT is
+ actually an exponent multiplied only by a fractional part, not an
+ integer part, so an exponent below MIN_10_EXP - (DIG + 2)
+ underflows. */
+ if (__glibc_unlikely (exponent < MIN_10_EXP - (DIG + 2)))
+ return underflow_value (negative);
+
+ if (int_no > 0)
+ {
+ /* Read the integer part as a multi-precision number to NUM. */
+ startp = str_to_mpn (startp, int_no, num, &numsize, &exponent
+#ifndef USE_WIDE_CHAR
+ , decimal, decimal_len, thousands
+#endif
+ );
+
+ if (exponent > 0)
+ {
+ /* We now multiply the gained number by the given power of ten. */
+ mp_limb_t *psrc = num;
+ mp_limb_t *pdest = den;
+ int expbit = 1;
+ const struct mp_power *ttab = &_fpioconst_pow10[0];
+
+ do
+ {
+ if ((exponent & expbit) != 0)
+ {
+ size_t size = ttab->arraysize - _FPIO_CONST_OFFSET;
+ mp_limb_t cy;
+ exponent ^= expbit;
+
+ /* FIXME: not the whole multiplication has to be
+ done. If we have the needed number of bits we
+ only need the information whether more non-zero
+ bits follow. */
+ if (numsize >= ttab->arraysize - _FPIO_CONST_OFFSET)
+ cy = __mpn_mul (pdest, psrc, numsize,
+ &__tens[ttab->arrayoff
+ + _FPIO_CONST_OFFSET],
+ size);
+ else
+ cy = __mpn_mul (pdest, &__tens[ttab->arrayoff
+ + _FPIO_CONST_OFFSET],
+ size, psrc, numsize);
+ numsize += size;
+ if (cy == 0)
+ --numsize;
+ (void) SWAP (psrc, pdest);
+ }
+ expbit <<= 1;
+ ++ttab;
+ }
+ while (exponent != 0);
+
+ if (psrc == den)
+ memcpy (num, den, numsize * sizeof (mp_limb_t));
+ }
+
+ /* Determine how many bits of the result we already have. */
+ count_leading_zeros (bits, num[numsize - 1]);
+ bits = numsize * BITS_PER_MP_LIMB - bits;
+
+ /* Now we know the exponent of the number in base two.
+ Check it against the maximum possible exponent. */
+ if (__glibc_unlikely (bits > MAX_EXP))
+ return overflow_value (negative);
+
+ /* We have already the first BITS bits of the result. Together with
+ the information whether more non-zero bits follow this is enough
+ to determine the result. */
+ if (bits > MANT_DIG)
+ {
+ int i;
+ const mp_size_t least_idx = (bits - MANT_DIG) / BITS_PER_MP_LIMB;
+ const mp_size_t least_bit = (bits - MANT_DIG) % BITS_PER_MP_LIMB;
+ const mp_size_t round_idx = least_bit == 0 ? least_idx - 1
+ : least_idx;
+ const mp_size_t round_bit = least_bit == 0 ? BITS_PER_MP_LIMB - 1
+ : least_bit - 1;
+
+ if (least_bit == 0)
+ memcpy (retval, &num[least_idx],
+ RETURN_LIMB_SIZE * sizeof (mp_limb_t));
+ else
+ {
+ for (i = least_idx; i < numsize - 1; ++i)
+ retval[i - least_idx] = (num[i] >> least_bit)
+ | (num[i + 1]
+ << (BITS_PER_MP_LIMB - least_bit));
+ if (i - least_idx < RETURN_LIMB_SIZE)
+ retval[RETURN_LIMB_SIZE - 1] = num[i] >> least_bit;
+ }
+
+ /* Check whether any limb beside the ones in RETVAL are non-zero. */
+ for (i = 0; num[i] == 0; ++i)
+ ;
+
+ return round_and_return (retval, bits - 1, negative,
+ num[round_idx], round_bit,
+ int_no < dig_no || i < round_idx);
+ /* NOTREACHED */
+ }
+ else if (dig_no == int_no)
+ {
+ const mp_size_t target_bit = (MANT_DIG - 1) % BITS_PER_MP_LIMB;
+ const mp_size_t is_bit = (bits - 1) % BITS_PER_MP_LIMB;
+
+ if (target_bit == is_bit)
+ {
+ memcpy (&retval[RETURN_LIMB_SIZE - numsize], num,
+ numsize * sizeof (mp_limb_t));
+ /* FIXME: the following loop can be avoided if we assume a
+ maximal MANT_DIG value. */
+ MPN_ZERO (retval, RETURN_LIMB_SIZE - numsize);
+ }
+ else if (target_bit > is_bit)
+ {
+ (void) __mpn_lshift (&retval[RETURN_LIMB_SIZE - numsize],
+ num, numsize, target_bit - is_bit);
+ /* FIXME: the following loop can be avoided if we assume a
+ maximal MANT_DIG value. */
+ MPN_ZERO (retval, RETURN_LIMB_SIZE - numsize);
+ }
+ else
+ {
+ mp_limb_t cy;
+ assert (numsize < RETURN_LIMB_SIZE);
+
+ cy = __mpn_rshift (&retval[RETURN_LIMB_SIZE - numsize],
+ num, numsize, is_bit - target_bit);
+ retval[RETURN_LIMB_SIZE - numsize - 1] = cy;
+ /* FIXME: the following loop can be avoided if we assume a
+ maximal MANT_DIG value. */
+ MPN_ZERO (retval, RETURN_LIMB_SIZE - numsize - 1);
+ }
+
+ return round_and_return (retval, bits - 1, negative, 0, 0, 0);
+ /* NOTREACHED */
+ }
+
+ /* Store the bits we already have. */
+ memcpy (retval, num, numsize * sizeof (mp_limb_t));
+#if RETURN_LIMB_SIZE > 1
+ if (numsize < RETURN_LIMB_SIZE)
+# if RETURN_LIMB_SIZE == 2
+ retval[numsize] = 0;
+# else
+ MPN_ZERO (retval + numsize, RETURN_LIMB_SIZE - numsize);
+# endif
+#endif
+ }
+
+ /* We have to compute at least some of the fractional digits. */
+ {
+ /* We construct a fraction and the result of the division gives us
+ the needed digits. The denominator is 1.0 multiplied by the
+ exponent of the lowest digit; i.e. 0.123 gives 123 / 1000 and
+ 123e-6 gives 123 / 1000000. */
+
+ int expbit;
+ int neg_exp;
+ int more_bits;
+ int need_frac_digits;
+ mp_limb_t cy;
+ mp_limb_t *psrc = den;
+ mp_limb_t *pdest = num;
+ const struct mp_power *ttab = &_fpioconst_pow10[0];
+
+ assert (dig_no > int_no
+ && exponent <= 0
+ && exponent >= MIN_10_EXP - (DIG + 2));
+
+ /* We need to compute MANT_DIG - BITS fractional bits that lie
+ within the mantissa of the result, the following bit for
+ rounding, and to know whether any subsequent bit is 0.
+ Computing a bit with value 2^-n means looking at n digits after
+ the decimal point. */
+ if (bits > 0)
+ {
+ /* The bits required are those immediately after the point. */
+ assert (int_no > 0 && exponent == 0);
+ need_frac_digits = 1 + MANT_DIG - bits;
+ }
+ else
+ {
+ /* The number is in the form .123eEXPONENT. */
+ assert (int_no == 0 && *startp != L_('0'));
+ /* The number is at least 10^(EXPONENT-1), and 10^3 <
+ 2^10. */
+ int neg_exp_2 = ((1 - exponent) * 10) / 3 + 1;
+ /* The number is at least 2^-NEG_EXP_2. We need up to
+ MANT_DIG bits following that bit. */
+ need_frac_digits = neg_exp_2 + MANT_DIG;
+ /* However, we never need bits beyond 1/4 ulp of the smallest
+ representable value. (That 1/4 ulp bit is only needed to
+ determine tinyness on machines where tinyness is determined
+ after rounding.) */
+ if (need_frac_digits > MANT_DIG - MIN_EXP + 2)
+ need_frac_digits = MANT_DIG - MIN_EXP + 2;
+ /* At this point, NEED_FRAC_DIGITS is the total number of
+ digits needed after the point, but some of those may be
+ leading 0s. */
+ need_frac_digits += exponent;
+ /* Any cases underflowing enough that none of the fractional
+ digits are needed should have been caught earlier (such
+ cases are on the order of 10^-n or smaller where 2^-n is
+ the least subnormal). */
+ assert (need_frac_digits > 0);
+ }
+
+ if (need_frac_digits > (intmax_t) dig_no - (intmax_t) int_no)
+ need_frac_digits = (intmax_t) dig_no - (intmax_t) int_no;
+
+ if ((intmax_t) dig_no > (intmax_t) int_no + need_frac_digits)
+ {
+ dig_no = int_no + need_frac_digits;
+ more_bits = 1;
+ }
+ else
+ more_bits = 0;
+
+ neg_exp = (intmax_t) dig_no - (intmax_t) int_no - exponent;
+
+ /* Construct the denominator. */
+ densize = 0;
+ expbit = 1;
+ do
+ {
+ if ((neg_exp & expbit) != 0)
+ {
+ mp_limb_t cy;
+ neg_exp ^= expbit;
+
+ if (densize == 0)
+ {
+ densize = ttab->arraysize - _FPIO_CONST_OFFSET;
+ memcpy (psrc, &__tens[ttab->arrayoff + _FPIO_CONST_OFFSET],
+ densize * sizeof (mp_limb_t));
+ }
+ else
+ {
+ cy = __mpn_mul (pdest, &__tens[ttab->arrayoff
+ + _FPIO_CONST_OFFSET],
+ ttab->arraysize - _FPIO_CONST_OFFSET,
+ psrc, densize);
+ densize += ttab->arraysize - _FPIO_CONST_OFFSET;
+ if (cy == 0)
+ --densize;
+ (void) SWAP (psrc, pdest);
+ }
+ }
+ expbit <<= 1;
+ ++ttab;
+ }
+ while (neg_exp != 0);
+
+ if (psrc == num)
+ memcpy (den, num, densize * sizeof (mp_limb_t));
+
+ /* Read the fractional digits from the string. */
+ (void) str_to_mpn (startp, dig_no - int_no, num, &numsize, &exponent
+#ifndef USE_WIDE_CHAR
+ , decimal, decimal_len, thousands
+#endif
+ );
+
+ /* We now have to shift both numbers so that the highest bit in the
+ denominator is set. In the same process we copy the numerator to
+ a high place in the array so that the division constructs the wanted
+ digits. This is done by a "quasi fix point" number representation.
+
+ num: ddddddddddd . 0000000000000000000000
+ |--- m ---|
+ den: ddddddddddd n >= m
+ |--- n ---|
+ */
+
+ count_leading_zeros (cnt, den[densize - 1]);
+
+ if (cnt > 0)
+ {
+ /* Don't call `mpn_shift' with a count of zero since the specification
+ does not allow this. */
+ (void) __mpn_lshift (den, den, densize, cnt);
+ cy = __mpn_lshift (num, num, numsize, cnt);
+ if (cy != 0)
+ num[numsize++] = cy;
+ }
+
+ /* Now we are ready for the division. But it is not necessary to
+ do a full multi-precision division because we only need a small
+ number of bits for the result. So we do not use __mpn_divmod
+ here but instead do the division here by hand and stop whenever
+ the needed number of bits is reached. The code itself comes
+ from the GNU MP Library by Torbj\"orn Granlund. */
+
+ exponent = bits;
+
+ switch (densize)
+ {
+ case 1:
+ {
+ mp_limb_t d, n, quot;
+ int used = 0;
+
+ n = num[0];
+ d = den[0];
+ assert (numsize == 1 && n < d);
+
+ do
+ {
+ udiv_qrnnd (quot, n, n, 0, d);
+
+#define got_limb \
+ if (bits == 0) \
+ { \
+ int cnt; \
+ if (quot == 0) \
+ cnt = BITS_PER_MP_LIMB; \
+ else \
+ count_leading_zeros (cnt, quot); \
+ exponent -= cnt; \
+ if (BITS_PER_MP_LIMB - cnt > MANT_DIG) \
+ { \
+ used = MANT_DIG + cnt; \
+ retval[0] = quot >> (BITS_PER_MP_LIMB - used); \
+ bits = MANT_DIG + 1; \
+ } \
+ else \
+ { \
+ /* Note that we only clear the second element. */ \
+ /* The conditional is determined at compile time. */ \
+ if (RETURN_LIMB_SIZE > 1) \
+ retval[1] = 0; \
+ retval[0] = quot; \
+ bits = -cnt; \
+ } \
+ } \
+ else if (bits + BITS_PER_MP_LIMB <= MANT_DIG) \
+ __mpn_lshift_1 (retval, RETURN_LIMB_SIZE, BITS_PER_MP_LIMB, \
+ quot); \
+ else \
+ { \
+ used = MANT_DIG - bits; \
+ if (used > 0) \
+ __mpn_lshift_1 (retval, RETURN_LIMB_SIZE, used, quot); \
+ } \
+ bits += BITS_PER_MP_LIMB
+
+ got_limb;
+ }
+ while (bits <= MANT_DIG);
+
+ return round_and_return (retval, exponent - 1, negative,
+ quot, BITS_PER_MP_LIMB - 1 - used,
+ more_bits || n != 0);
+ }
+ case 2:
+ {
+ mp_limb_t d0, d1, n0, n1;
+ mp_limb_t quot = 0;
+ int used = 0;
+
+ d0 = den[0];
+ d1 = den[1];
+
+ if (numsize < densize)
+ {
+ if (num[0] >= d1)
+ {
+ /* The numerator of the number occupies fewer bits than
+ the denominator but the one limb is bigger than the
+ high limb of the numerator. */
+ n1 = 0;
+ n0 = num[0];
+ }
+ else
+ {
+ if (bits <= 0)
+ exponent -= BITS_PER_MP_LIMB;
+ else
+ {
+ if (bits + BITS_PER_MP_LIMB <= MANT_DIG)
+ __mpn_lshift_1 (retval, RETURN_LIMB_SIZE,
+ BITS_PER_MP_LIMB, 0);
+ else
+ {
+ used = MANT_DIG - bits;
+ if (used > 0)
+ __mpn_lshift_1 (retval, RETURN_LIMB_SIZE, used, 0);
+ }
+ bits += BITS_PER_MP_LIMB;
+ }
+ n1 = num[0];
+ n0 = 0;
+ }
+ }
+ else
+ {
+ n1 = num[1];
+ n0 = num[0];
+ }
+
+ while (bits <= MANT_DIG)
+ {
+ mp_limb_t r;
+
+ if (n1 == d1)
+ {
+ /* QUOT should be either 111..111 or 111..110. We need
+ special treatment of this rare case as normal division
+ would give overflow. */
+ quot = ~(mp_limb_t) 0;
+
+ r = n0 + d1;
+ if (r < d1) /* Carry in the addition? */
+ {
+ add_ssaaaa (n1, n0, r - d0, 0, 0, d0);
+ goto have_quot;
+ }
+ n1 = d0 - (d0 != 0);
+ n0 = -d0;
+ }
+ else
+ {
+ udiv_qrnnd (quot, r, n1, n0, d1);
+ umul_ppmm (n1, n0, d0, quot);
+ }
+
+ q_test:
+ if (n1 > r || (n1 == r && n0 > 0))
+ {
+ /* The estimated QUOT was too large. */
+ --quot;
+
+ sub_ddmmss (n1, n0, n1, n0, 0, d0);
+ r += d1;
+ if (r >= d1) /* If not carry, test QUOT again. */
+ goto q_test;
+ }
+ sub_ddmmss (n1, n0, r, 0, n1, n0);
+
+ have_quot:
+ got_limb;
+ }
+
+ return round_and_return (retval, exponent - 1, negative,
+ quot, BITS_PER_MP_LIMB - 1 - used,
+ more_bits || n1 != 0 || n0 != 0);
+ }
+ default:
+ {
+ int i;
+ mp_limb_t cy, dX, d1, n0, n1;
+ mp_limb_t quot = 0;
+ int used = 0;
+
+ dX = den[densize - 1];
+ d1 = den[densize - 2];
+
+ /* The division does not work if the upper limb of the two-limb
+ numerator is greater than the denominator. */
+ if (__mpn_cmp (num, &den[densize - numsize], numsize) > 0)
+ num[numsize++] = 0;
+
+ if (numsize < densize)
+ {
+ mp_size_t empty = densize - numsize;
+ int i;
+
+ if (bits <= 0)
+ exponent -= empty * BITS_PER_MP_LIMB;
+ else
+ {
+ if (bits + empty * BITS_PER_MP_LIMB <= MANT_DIG)
+ {
+ /* We make a difference here because the compiler
+ cannot optimize the `else' case that good and
+ this reflects all currently used FLOAT types
+ and GMP implementations. */
+#if RETURN_LIMB_SIZE <= 2
+ assert (empty == 1);
+ __mpn_lshift_1 (retval, RETURN_LIMB_SIZE,
+ BITS_PER_MP_LIMB, 0);
+#else
+ for (i = RETURN_LIMB_SIZE - 1; i >= empty; --i)
+ retval[i] = retval[i - empty];
+ while (i >= 0)
+ retval[i--] = 0;
+#endif
+ }
+ else
+ {
+ used = MANT_DIG - bits;
+ if (used >= BITS_PER_MP_LIMB)
+ {
+ int i;
+ (void) __mpn_lshift (&retval[used
+ / BITS_PER_MP_LIMB],
+ retval,
+ (RETURN_LIMB_SIZE
+ - used / BITS_PER_MP_LIMB),
+ used % BITS_PER_MP_LIMB);
+ for (i = used / BITS_PER_MP_LIMB - 1; i >= 0; --i)
+ retval[i] = 0;
+ }
+ else if (used > 0)
+ __mpn_lshift_1 (retval, RETURN_LIMB_SIZE, used, 0);
+ }
+ bits += empty * BITS_PER_MP_LIMB;
+ }
+ for (i = numsize; i > 0; --i)
+ num[i + empty] = num[i - 1];
+ MPN_ZERO (num, empty + 1);
+ }
+ else
+ {
+ int i;
+ assert (numsize == densize);
+ for (i = numsize; i > 0; --i)
+ num[i] = num[i - 1];
+ num[0] = 0;
+ }
+
+ den[densize] = 0;
+ n0 = num[densize];
+
+ while (bits <= MANT_DIG)
+ {
+ if (n0 == dX)
+ /* This might over-estimate QUOT, but it's probably not
+ worth the extra code here to find out. */
+ quot = ~(mp_limb_t) 0;
+ else
+ {
+ mp_limb_t r;
+
+ udiv_qrnnd (quot, r, n0, num[densize - 1], dX);
+ umul_ppmm (n1, n0, d1, quot);
+
+ while (n1 > r || (n1 == r && n0 > num[densize - 2]))
+ {
+ --quot;
+ r += dX;
+ if (r < dX) /* I.e. "carry in previous addition?" */
+ break;
+ n1 -= n0 < d1;
+ n0 -= d1;
+ }
+ }
+
+ /* Possible optimization: We already have (q * n0) and (1 * n1)
+ after the calculation of QUOT. Taking advantage of this, we
+ could make this loop make two iterations less. */
+
+ cy = __mpn_submul_1 (num, den, densize + 1, quot);
+
+ if (num[densize] != cy)
+ {
+ cy = __mpn_add_n (num, num, den, densize);
+ assert (cy != 0);
+ --quot;
+ }
+ n0 = num[densize] = num[densize - 1];
+ for (i = densize - 1; i > 0; --i)
+ num[i] = num[i - 1];
+ num[0] = 0;
+
+ got_limb;
+ }
+
+ for (i = densize; i >= 0 && num[i] == 0; --i)
+ ;
+ return round_and_return (retval, exponent - 1, negative,
+ quot, BITS_PER_MP_LIMB - 1 - used,
+ more_bits || i >= 0);
+ }
+ }
+ }
+
+ /* NOTREACHED */
+}
+#if defined _LIBC && !defined USE_WIDE_CHAR
+libc_hidden_def (____STRTOF_INTERNAL)
+#endif
+
+/* External user entry point. */
+
+FLOAT
+#ifdef weak_function
+weak_function
+#endif
+__STRTOF (const STRING_TYPE *nptr, STRING_TYPE **endptr, __locale_t loc)
+{
+ return ____STRTOF_INTERNAL (nptr, endptr, 0, loc);
+}
+#if defined _LIBC
+libc_hidden_def (__STRTOF)
+libc_hidden_ver (__STRTOF, STRTOF)
+#endif
+weak_alias (__STRTOF, STRTOF)
+
+#ifdef LONG_DOUBLE_COMPAT
+# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_1)
+# ifdef USE_WIDE_CHAR
+compat_symbol (libc, __wcstod_l, __wcstold_l, GLIBC_2_1);
+# else
+compat_symbol (libc, __strtod_l, __strtold_l, GLIBC_2_1);
+# endif
+# endif
+# if LONG_DOUBLE_COMPAT(libc, GLIBC_2_3)
+# ifdef USE_WIDE_CHAR
+compat_symbol (libc, wcstod_l, wcstold_l, GLIBC_2_3);
+# else
+compat_symbol (libc, strtod_l, strtold_l, GLIBC_2_3);
+# endif
+# endif
+#endif
diff --git a/REORG.TODO/stdlib/strtod_nan.c b/REORG.TODO/stdlib/strtod_nan.c
new file mode 100644
index 0000000000..3fbfb46cfc
--- /dev/null
+++ b/REORG.TODO/stdlib/strtod_nan.c
@@ -0,0 +1,24 @@
+/* Convert string for NaN payload to corresponding NaN. Narrow
+ strings, double.
+ Copyright (C) 2015-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <strtod_nan_narrow.h>
+#include <strtod_nan_double.h>
+
+#define STRTOD_NAN __strtod_nan
+#include <strtod_nan_main.c>
diff --git a/REORG.TODO/stdlib/strtod_nan_double.h b/REORG.TODO/stdlib/strtod_nan_double.h
new file mode 100644
index 0000000000..224654d005
--- /dev/null
+++ b/REORG.TODO/stdlib/strtod_nan_double.h
@@ -0,0 +1,30 @@
+/* Convert string for NaN payload to corresponding NaN. For double.
+ Copyright (C) 1997-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#define FLOAT double
+#define SET_MANTISSA(flt, mant) \
+ do \
+ { \
+ union ieee754_double u; \
+ u.d = (flt); \
+ u.ieee_nan.mantissa0 = (mant) >> 32; \
+ u.ieee_nan.mantissa1 = (mant); \
+ if ((u.ieee.mantissa0 | u.ieee.mantissa1) != 0) \
+ (flt) = u.d; \
+ } \
+ while (0)
diff --git a/REORG.TODO/stdlib/strtod_nan_float.h b/REORG.TODO/stdlib/strtod_nan_float.h
new file mode 100644
index 0000000000..99e95cc2e7
--- /dev/null
+++ b/REORG.TODO/stdlib/strtod_nan_float.h
@@ -0,0 +1,29 @@
+/* Convert string for NaN payload to corresponding NaN. For float.
+ Copyright (C) 1997-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#define FLOAT float
+#define SET_MANTISSA(flt, mant) \
+ do \
+ { \
+ union ieee754_float u; \
+ u.f = (flt); \
+ u.ieee_nan.mantissa = (mant); \
+ if (u.ieee.mantissa != 0) \
+ (flt) = u.f; \
+ } \
+ while (0)
diff --git a/REORG.TODO/stdlib/strtod_nan_main.c b/REORG.TODO/stdlib/strtod_nan_main.c
new file mode 100644
index 0000000000..96b788cb1e
--- /dev/null
+++ b/REORG.TODO/stdlib/strtod_nan_main.c
@@ -0,0 +1,63 @@
+/* Convert string for NaN payload to corresponding NaN.
+ Copyright (C) 1997-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <ieee754.h>
+#include <locale.h>
+#include <math.h>
+#include <stdlib.h>
+#include <wchar.h>
+
+
+/* If STR starts with an optional n-char-sequence as defined by ISO C
+ (a sequence of ASCII letters, digits and underscores), followed by
+ ENDC, return a NaN whose payload is set based on STR. Otherwise,
+ return a default NAN. If ENDPTR is not NULL, set *ENDPTR to point
+ to the character after the initial n-char-sequence. */
+
+internal_function
+FLOAT
+STRTOD_NAN (const STRING_TYPE *str, STRING_TYPE **endptr, STRING_TYPE endc)
+{
+ const STRING_TYPE *cp = str;
+
+ while ((*cp >= L_('0') && *cp <= L_('9'))
+ || (*cp >= L_('A') && *cp <= L_('Z'))
+ || (*cp >= L_('a') && *cp <= L_('z'))
+ || *cp == L_('_'))
+ ++cp;
+
+ FLOAT retval = NAN;
+ if (*cp != endc)
+ goto out;
+
+ /* This is a system-dependent way to specify the bitmask used for
+ the NaN. We expect it to be a number which is put in the
+ mantissa of the number. */
+ STRING_TYPE *endp;
+ unsigned long long int mant;
+
+ mant = STRTOULL (str, &endp, 0);
+ if (endp == cp)
+ SET_MANTISSA (retval, mant);
+
+ out:
+ if (endptr != NULL)
+ *endptr = (STRING_TYPE *) cp;
+ return retval;
+}
+libc_hidden_def (STRTOD_NAN)
diff --git a/REORG.TODO/stdlib/strtod_nan_narrow.h b/REORG.TODO/stdlib/strtod_nan_narrow.h
new file mode 100644
index 0000000000..15733c21ae
--- /dev/null
+++ b/REORG.TODO/stdlib/strtod_nan_narrow.h
@@ -0,0 +1,22 @@
+/* Convert string for NaN payload to corresponding NaN. Narrow strings.
+ Copyright (C) 1997-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#define STRING_TYPE char
+#define L_(Ch) Ch
+#define STRTOULL(S, E, B) ____strtoull_l_internal ((S), (E), (B), 0, \
+ _nl_C_locobj_ptr)
diff --git a/REORG.TODO/stdlib/strtod_nan_wide.h b/REORG.TODO/stdlib/strtod_nan_wide.h
new file mode 100644
index 0000000000..23abb2c745
--- /dev/null
+++ b/REORG.TODO/stdlib/strtod_nan_wide.h
@@ -0,0 +1,22 @@
+/* Convert string for NaN payload to corresponding NaN. Wide strings.
+ Copyright (C) 1997-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#define STRING_TYPE wchar_t
+#define L_(Ch) L##Ch
+#define STRTOULL(S, E, B) ____wcstoull_l_internal ((S), (E), (B), 0, \
+ _nl_C_locobj_ptr)
diff --git a/REORG.TODO/stdlib/strtof.c b/REORG.TODO/stdlib/strtof.c
new file mode 100644
index 0000000000..600512134c
--- /dev/null
+++ b/REORG.TODO/stdlib/strtof.c
@@ -0,0 +1,34 @@
+/* Read decimal floating point numbers.
+ This file is part of the GNU C Library.
+ Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ Contributed by Ulrich Drepper <drepper@gnu.org>, 1995.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+/* The actual implementation for all floating point sizes is in strtod.c.
+ These macros tell it to produce the `float' version, `strtof'. */
+
+#define FLOAT float
+#define FLT FLT
+#ifdef USE_WIDE_CHAR
+#define STRTOF wcstof
+#define STRTOF_L __wcstof_l
+#else
+# define STRTOF strtof
+# define STRTOF_L __strtof_l
+#endif
+
+
+#include "strtod.c"
diff --git a/REORG.TODO/stdlib/strtof_l.c b/REORG.TODO/stdlib/strtof_l.c
new file mode 100644
index 0000000000..57e557516a
--- /dev/null
+++ b/REORG.TODO/stdlib/strtof_l.c
@@ -0,0 +1,38 @@
+/* Convert string representing a number to float value, using given locale.
+ Copyright (C) 1997-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <xlocale.h>
+
+extern float ____strtof_l_internal (const char *, char **, int, __locale_t);
+
+#define FLOAT float
+#define FLT FLT
+#ifdef USE_WIDE_CHAR
+# define STRTOF wcstof_l
+# define __STRTOF __wcstof_l
+# define STRTOF_NAN __wcstof_nan
+#else
+# define STRTOF strtof_l
+# define __STRTOF __strtof_l
+# define STRTOF_NAN __strtof_nan
+#endif
+#define MPN2FLOAT __mpn_construct_float
+#define FLOAT_HUGE_VAL HUGE_VALF
+
+#include "strtod_l.c"
diff --git a/REORG.TODO/stdlib/strtof_nan.c b/REORG.TODO/stdlib/strtof_nan.c
new file mode 100644
index 0000000000..0dd44294cc
--- /dev/null
+++ b/REORG.TODO/stdlib/strtof_nan.c
@@ -0,0 +1,24 @@
+/* Convert string for NaN payload to corresponding NaN. Narrow
+ strings, float.
+ Copyright (C) 2015-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <strtod_nan_narrow.h>
+#include <strtod_nan_float.h>
+
+#define STRTOD_NAN __strtof_nan
+#include <strtod_nan_main.c>
diff --git a/REORG.TODO/stdlib/strtoimax.c b/REORG.TODO/stdlib/strtoimax.c
new file mode 100644
index 0000000000..f1de70f320
--- /dev/null
+++ b/REORG.TODO/stdlib/strtoimax.c
@@ -0,0 +1 @@
+#error "The correct implementation must be chosen based on the `intmax_t' type"
diff --git a/REORG.TODO/stdlib/strtol.c b/REORG.TODO/stdlib/strtol.c
new file mode 100644
index 0000000000..8ac8347e7d
--- /dev/null
+++ b/REORG.TODO/stdlib/strtol.c
@@ -0,0 +1,109 @@
+/* Convert string representation of a number into an integer value.
+ Copyright (C) 1991-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include <wchar.h>
+#include <locale/localeinfo.h>
+
+#ifndef UNSIGNED
+# define UNSIGNED 0
+# define INT LONG int
+#else
+# define INT unsigned LONG int
+#endif
+
+#if UNSIGNED
+# ifdef USE_WIDE_CHAR
+# ifdef QUAD
+# define strtol wcstoull
+# define __strtol_l __wcstoull_l
+# else
+# define strtol wcstoul
+# define __strtol_l __wcstoul_l
+# endif
+# else
+# ifdef QUAD
+# define strtol strtoull
+# define __strtol_l __strtoull_l
+# else
+# define strtol strtoul
+# define __strtol_l __strtoul_l
+# endif
+# endif
+#else
+# ifdef USE_WIDE_CHAR
+# ifdef QUAD
+# define strtol wcstoll
+# define __strtol_l __wcstoll_l
+# else
+# define strtol wcstol
+# define __strtol_l __wcstol_l
+# endif
+# else
+# ifdef QUAD
+# define strtol strtoll
+# define __strtol_l __strtoll_l
+# endif
+# endif
+#endif
+
+
+/* If QUAD is defined, we are defining `strtoll' or `strtoull',
+ operating on `long long int's. */
+#ifdef QUAD
+# define LONG long long
+#else
+# define LONG long
+#endif
+
+
+#ifdef USE_WIDE_CHAR
+# define STRING_TYPE wchar_t
+#else
+# define STRING_TYPE char
+#endif
+
+
+#define INTERNAL(X) INTERNAL1(X)
+#define INTERNAL1(X) __##X##_internal
+
+#define SYM__(X) SYM__1 (X)
+#define SYM__1(X) __ ## X
+#define __strtol SYM__ (strtol)
+
+
+extern INT INTERNAL (__strtol_l) (const STRING_TYPE *, STRING_TYPE **, int,
+ int, __locale_t);
+
+
+INT
+INTERNAL (strtol) (const STRING_TYPE *nptr, STRING_TYPE **endptr,
+ int base, int group)
+{
+ return INTERNAL (__strtol_l) (nptr, endptr, base, group, _NL_CURRENT_LOCALE);
+}
+libc_hidden_def (INTERNAL (strtol))
+
+
+INT
+__strtol (const STRING_TYPE *nptr, STRING_TYPE **endptr, int base)
+{
+ return INTERNAL (__strtol_l) (nptr, endptr, base, 0, _NL_CURRENT_LOCALE);
+}
+weak_alias (__strtol, strtol)
+libc_hidden_weak (strtol)
diff --git a/REORG.TODO/stdlib/strtol_l.c b/REORG.TODO/stdlib/strtol_l.c
new file mode 100644
index 0000000000..5a0683b2bb
--- /dev/null
+++ b/REORG.TODO/stdlib/strtol_l.c
@@ -0,0 +1,551 @@
+/* Convert string representing a number to integer value, using given locale.
+ Copyright (C) 1997-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef _LIBC
+# define USE_NUMBER_GROUPING
+# define HAVE_LIMITS_H
+#endif
+
+#include <ctype.h>
+#include <errno.h>
+#ifndef __set_errno
+# define __set_errno(Val) errno = (Val)
+#endif
+
+#ifdef HAVE_LIMITS_H
+# include <limits.h>
+#endif
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+#include <locale.h>
+#include <xlocale.h>
+#include <stdint.h>
+#include <bits/wordsize.h>
+
+#ifdef USE_NUMBER_GROUPING
+# include "../locale/localeinfo.h"
+#endif
+
+/* Nonzero if we are defining `strtoul' or `strtoull', operating on
+ unsigned integers. */
+#ifndef UNSIGNED
+# define UNSIGNED 0
+# define INT LONG int
+#else
+# define INT unsigned LONG int
+#endif
+
+/* Determine the name. */
+#if UNSIGNED
+# ifdef USE_WIDE_CHAR
+# ifdef QUAD
+# define strtol_l wcstoull_l
+# else
+# define strtol_l wcstoul_l
+# endif
+# else
+# ifdef QUAD
+# define strtol_l strtoull_l
+# else
+# define strtol_l strtoul_l
+# endif
+# endif
+#else
+# ifdef USE_WIDE_CHAR
+# ifdef QUAD
+# define strtol_l wcstoll_l
+# else
+# define strtol_l wcstol_l
+# endif
+# else
+# ifdef QUAD
+# define strtol_l strtoll_l
+# else
+# define strtol_l strtol_l
+# endif
+# endif
+#endif
+
+#define __strtol_l __strtol_l2(strtol_l)
+#define __strtol_l2(name) __strtol_l3(name)
+#define __strtol_l3(name) __##name
+
+
+/* If QUAD is defined, we are defining `strtoll' or `strtoull',
+ operating on `long long int's. */
+#ifdef QUAD
+# define LONG long long
+# define STRTOL_LONG_MIN LONG_LONG_MIN
+# define STRTOL_LONG_MAX LONG_LONG_MAX
+# define STRTOL_ULONG_MAX ULONG_LONG_MAX
+#else
+# define LONG long
+
+# ifndef ULONG_MAX
+# define ULONG_MAX ((unsigned long int) ~(unsigned long int) 0)
+# endif
+# ifndef LONG_MAX
+# define LONG_MAX ((long int) (ULONG_MAX >> 1))
+# endif
+# define STRTOL_LONG_MIN LONG_MIN
+# define STRTOL_LONG_MAX LONG_MAX
+# define STRTOL_ULONG_MAX ULONG_MAX
+#endif
+
+
+/* We use this code for the extended locale handling where the
+ function gets as an additional argument the locale which has to be
+ used. To access the values we have to redefine the _NL_CURRENT and
+ _NL_CURRENT_WORD macros. */
+#undef _NL_CURRENT
+#define _NL_CURRENT(category, item) \
+ (current->values[_NL_ITEM_INDEX (item)].string)
+#undef _NL_CURRENT_WORD
+#define _NL_CURRENT_WORD(category, item) \
+ ((uint32_t) current->values[_NL_ITEM_INDEX (item)].word)
+
+#if defined _LIBC || defined HAVE_WCHAR_H
+# include <wchar.h>
+#endif
+
+#ifdef USE_WIDE_CHAR
+# include <wctype.h>
+# define L_(Ch) L##Ch
+# define UCHAR_TYPE wint_t
+# define STRING_TYPE wchar_t
+# define ISSPACE(Ch) __iswspace_l ((Ch), loc)
+# define ISALPHA(Ch) __iswalpha_l ((Ch), _nl_C_locobj_ptr)
+# define TOUPPER(Ch) __towupper_l ((Ch), _nl_C_locobj_ptr)
+#else
+# if defined _LIBC \
+ || defined STDC_HEADERS || (!defined isascii && !defined HAVE_ISASCII)
+# define IN_CTYPE_DOMAIN(c) 1
+# else
+# define IN_CTYPE_DOMAIN(c) isascii(c)
+# endif
+# define L_(Ch) Ch
+# define UCHAR_TYPE unsigned char
+# define STRING_TYPE char
+# define ISSPACE(Ch) __isspace_l ((Ch), loc)
+# define ISALPHA(Ch) __isalpha_l ((Ch), _nl_C_locobj_ptr)
+# define TOUPPER(Ch) __toupper_l ((Ch), _nl_C_locobj_ptr)
+#endif
+
+#define INTERNAL(X) INTERNAL1(X)
+#define INTERNAL1(X) __##X##_internal
+#define WEAKNAME(X) WEAKNAME1(X)
+
+#ifdef USE_NUMBER_GROUPING
+/* This file defines a function to check for correct grouping. */
+# include "grouping.h"
+#endif
+
+
+/* Define tables of maximum values and remainders in order to detect
+ overflow. Do this at compile-time in order to avoid the runtime
+ overhead of the division. */
+extern const unsigned long __strtol_ul_max_tab[] attribute_hidden;
+extern const unsigned char __strtol_ul_rem_tab[] attribute_hidden;
+#if defined(QUAD) && __WORDSIZE == 32
+extern const unsigned long long __strtol_ull_max_tab[] attribute_hidden;
+extern const unsigned char __strtol_ull_rem_tab[] attribute_hidden;
+#endif
+
+#define DEF(TYPE, NAME) \
+ const TYPE NAME[] attribute_hidden = \
+ { \
+ F(2), F(3), F(4), F(5), F(6), F(7), F(8), F(9), F(10), \
+ F(11), F(12), F(13), F(14), F(15), F(16), F(17), F(18), F(19), F(20), \
+ F(21), F(22), F(23), F(24), F(25), F(26), F(27), F(28), F(29), F(30), \
+ F(31), F(32), F(33), F(34), F(35), F(36) \
+ }
+
+#if !UNSIGNED && !defined (USE_WIDE_CHAR) && !defined (QUAD)
+# define F(X) ULONG_MAX / X
+ DEF (unsigned long, __strtol_ul_max_tab);
+# undef F
+# define F(X) ULONG_MAX % X
+ DEF (unsigned char, __strtol_ul_rem_tab);
+# undef F
+#endif
+#if !UNSIGNED && !defined (USE_WIDE_CHAR) && defined (QUAD) \
+ && __WORDSIZE == 32
+# define F(X) ULONG_LONG_MAX / X
+ DEF (unsigned long long, __strtol_ull_max_tab);
+# undef F
+# define F(X) ULONG_LONG_MAX % X
+ DEF (unsigned char, __strtol_ull_rem_tab);
+# undef F
+#endif
+#undef DEF
+
+/* Define some more readable aliases for these arrays which correspond
+ to how they'll be used in the function below. */
+#define jmax_tab __strtol_ul_max_tab
+#if defined(QUAD) && __WORDSIZE == 32
+# define cutoff_tab __strtol_ull_max_tab
+# define cutlim_tab __strtol_ull_rem_tab
+#else
+# define cutoff_tab __strtol_ul_max_tab
+# define cutlim_tab __strtol_ul_rem_tab
+#endif
+
+
+/* Convert NPTR to an `unsigned long int' or `long int' in base BASE.
+ If BASE is 0 the base is determined by the presence of a leading
+ zero, indicating octal or a leading "0x" or "0X", indicating hexadecimal.
+ If BASE is < 2 or > 36, it is reset to 10.
+ If ENDPTR is not NULL, a pointer to the character after the last
+ one converted is stored in *ENDPTR. */
+
+INT
+INTERNAL (__strtol_l) (const STRING_TYPE *nptr, STRING_TYPE **endptr,
+ int base, int group, __locale_t loc)
+{
+ int negative;
+ unsigned LONG int cutoff;
+ unsigned int cutlim;
+ unsigned LONG int i;
+ const STRING_TYPE *s;
+ UCHAR_TYPE c;
+ const STRING_TYPE *save, *end;
+ int overflow;
+#ifndef USE_WIDE_CHAR
+ size_t cnt;
+#endif
+
+#ifdef USE_NUMBER_GROUPING
+ struct __locale_data *current = loc->__locales[LC_NUMERIC];
+ /* The thousands character of the current locale. */
+# ifdef USE_WIDE_CHAR
+ wchar_t thousands = L'\0';
+# else
+ const char *thousands = NULL;
+ size_t thousands_len = 0;
+# endif
+ /* The numeric grouping specification of the current locale,
+ in the format described in <locale.h>. */
+ const char *grouping;
+
+ if (__glibc_unlikely (group))
+ {
+ grouping = _NL_CURRENT (LC_NUMERIC, GROUPING);
+ if (*grouping <= 0 || *grouping == CHAR_MAX)
+ grouping = NULL;
+ else
+ {
+ /* Figure out the thousands separator character. */
+# ifdef USE_WIDE_CHAR
+# ifdef _LIBC
+ thousands = _NL_CURRENT_WORD (LC_NUMERIC,
+ _NL_NUMERIC_THOUSANDS_SEP_WC);
+# endif
+ if (thousands == L'\0')
+ grouping = NULL;
+# else
+# ifdef _LIBC
+ thousands = _NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP);
+# endif
+ if (*thousands == '\0')
+ {
+ thousands = NULL;
+ grouping = NULL;
+ }
+# endif
+ }
+ }
+ else
+ grouping = NULL;
+#endif
+
+ if (base < 0 || base == 1 || base > 36)
+ {
+ __set_errno (EINVAL);
+ return 0;
+ }
+
+ save = s = nptr;
+
+ /* Skip white space. */
+ while (ISSPACE (*s))
+ ++s;
+ if (__glibc_unlikely (*s == L_('\0')))
+ goto noconv;
+
+ /* Check for a sign. */
+ negative = 0;
+ if (*s == L_('-'))
+ {
+ negative = 1;
+ ++s;
+ }
+ else if (*s == L_('+'))
+ ++s;
+
+ /* Recognize number prefix and if BASE is zero, figure it out ourselves. */
+ if (*s == L_('0'))
+ {
+ if ((base == 0 || base == 16) && TOUPPER (s[1]) == L_('X'))
+ {
+ s += 2;
+ base = 16;
+ }
+ else if (base == 0)
+ base = 8;
+ }
+ else if (base == 0)
+ base = 10;
+
+ /* Save the pointer so we can check later if anything happened. */
+ save = s;
+
+#ifdef USE_NUMBER_GROUPING
+ if (base != 10)
+ grouping = NULL;
+
+ if (__glibc_unlikely (grouping != NULL))
+ {
+# ifndef USE_WIDE_CHAR
+ thousands_len = strlen (thousands);
+# endif
+
+ /* Find the end of the digit string and check its grouping. */
+ end = s;
+ if (
+# ifdef USE_WIDE_CHAR
+ *s != thousands
+# else
+ ({ for (cnt = 0; cnt < thousands_len; ++cnt)
+ if (thousands[cnt] != end[cnt])
+ break;
+ cnt < thousands_len; })
+# endif
+ )
+ {
+ for (c = *end; c != L_('\0'); c = *++end)
+ if (((STRING_TYPE) c < L_('0') || (STRING_TYPE) c > L_('9'))
+# ifdef USE_WIDE_CHAR
+ && (wchar_t) c != thousands
+# else
+ && ({ for (cnt = 0; cnt < thousands_len; ++cnt)
+ if (thousands[cnt] != end[cnt])
+ break;
+ cnt < thousands_len; })
+# endif
+ && (!ISALPHA (c)
+ || (int) (TOUPPER (c) - L_('A') + 10) >= base))
+ break;
+
+# ifdef USE_WIDE_CHAR
+ end = __correctly_grouped_prefixwc (s, end, thousands, grouping);
+# else
+ end = __correctly_grouped_prefixmb (s, end, thousands, grouping);
+# endif
+ }
+ }
+ else
+#endif
+ end = NULL;
+
+ /* Avoid runtime division; lookup cutoff and limit. */
+ cutoff = cutoff_tab[base - 2];
+ cutlim = cutlim_tab[base - 2];
+
+ overflow = 0;
+ i = 0;
+ c = *s;
+ if (sizeof (long int) != sizeof (LONG int))
+ {
+ unsigned long int j = 0;
+ unsigned long int jmax = jmax_tab[base - 2];
+
+ for (;c != L_('\0'); c = *++s)
+ {
+ if (s == end)
+ break;
+ if (c >= L_('0') && c <= L_('9'))
+ c -= L_('0');
+#ifdef USE_NUMBER_GROUPING
+# ifdef USE_WIDE_CHAR
+ else if (grouping && (wchar_t) c == thousands)
+ continue;
+# else
+ else if (thousands_len)
+ {
+ for (cnt = 0; cnt < thousands_len; ++cnt)
+ if (thousands[cnt] != s[cnt])
+ break;
+ if (cnt == thousands_len)
+ {
+ s += thousands_len - 1;
+ continue;
+ }
+ if (ISALPHA (c))
+ c = TOUPPER (c) - L_('A') + 10;
+ else
+ break;
+ }
+# endif
+#endif
+ else if (ISALPHA (c))
+ c = TOUPPER (c) - L_('A') + 10;
+ else
+ break;
+ if ((int) c >= base)
+ break;
+ /* Note that we never can have an overflow. */
+ else if (j >= jmax)
+ {
+ /* We have an overflow. Now use the long representation. */
+ i = (unsigned LONG int) j;
+ goto use_long;
+ }
+ else
+ j = j * (unsigned long int) base + c;
+ }
+
+ i = (unsigned LONG int) j;
+ }
+ else
+ for (;c != L_('\0'); c = *++s)
+ {
+ if (s == end)
+ break;
+ if (c >= L_('0') && c <= L_('9'))
+ c -= L_('0');
+#ifdef USE_NUMBER_GROUPING
+# ifdef USE_WIDE_CHAR
+ else if (grouping && (wchar_t) c == thousands)
+ continue;
+# else
+ else if (thousands_len)
+ {
+ for (cnt = 0; cnt < thousands_len; ++cnt)
+ if (thousands[cnt] != s[cnt])
+ break;
+ if (cnt == thousands_len)
+ {
+ s += thousands_len - 1;
+ continue;
+ }
+ if (ISALPHA (c))
+ c = TOUPPER (c) - L_('A') + 10;
+ else
+ break;
+ }
+# endif
+#endif
+ else if (ISALPHA (c))
+ c = TOUPPER (c) - L_('A') + 10;
+ else
+ break;
+ if ((int) c >= base)
+ break;
+ /* Check for overflow. */
+ if (i > cutoff || (i == cutoff && c > cutlim))
+ overflow = 1;
+ else
+ {
+ use_long:
+ i *= (unsigned LONG int) base;
+ i += c;
+ }
+ }
+
+ /* Check if anything actually happened. */
+ if (s == save)
+ goto noconv;
+
+ /* Store in ENDPTR the address of one character
+ past the last character we converted. */
+ if (endptr != NULL)
+ *endptr = (STRING_TYPE *) s;
+
+#if !UNSIGNED
+ /* Check for a value that is within the range of
+ `unsigned LONG int', but outside the range of `LONG int'. */
+ if (overflow == 0
+ && i > (negative
+ ? -((unsigned LONG int) (STRTOL_LONG_MIN + 1)) + 1
+ : (unsigned LONG int) STRTOL_LONG_MAX))
+ overflow = 1;
+#endif
+
+ if (__glibc_unlikely (overflow))
+ {
+ __set_errno (ERANGE);
+#if UNSIGNED
+ return STRTOL_ULONG_MAX;
+#else
+ return negative ? STRTOL_LONG_MIN : STRTOL_LONG_MAX;
+#endif
+ }
+
+ /* Return the result of the appropriate sign. */
+ return negative ? -i : i;
+
+noconv:
+ /* We must handle a special case here: the base is 0 or 16 and the
+ first two characters are '0' and 'x', but the rest are no
+ hexadecimal digits. This is no error case. We return 0 and
+ ENDPTR points to the `x`. */
+ if (endptr != NULL)
+ {
+ if (save - nptr >= 2 && TOUPPER (save[-1]) == L_('X')
+ && save[-2] == L_('0'))
+ *endptr = (STRING_TYPE *) &save[-1];
+ else
+ /* There was no number to convert. */
+ *endptr = (STRING_TYPE *) nptr;
+ }
+
+ return 0L;
+}
+#if defined _LIBC && !defined USE_WIDE_CHAR
+libc_hidden_def (INTERNAL (__strtol_l))
+#endif
+
+/* External user entry point. */
+
+#if _LIBC - 0 == 0
+
+/* Prototype. */
+extern INT __strtol_l (const STRING_TYPE *nptr, STRING_TYPE **endptr,
+ int base);
+#endif
+
+
+INT
+#ifdef weak_function
+weak_function
+#endif
+__strtol_l (const STRING_TYPE *nptr, STRING_TYPE **endptr,
+ int base, __locale_t loc)
+{
+ return INTERNAL (__strtol_l) (nptr, endptr, base, 0, loc);
+}
+libc_hidden_def (__strtol_l)
+weak_alias (__strtol_l, strtol_l)
diff --git a/REORG.TODO/stdlib/strtold.c b/REORG.TODO/stdlib/strtold.c
new file mode 100644
index 0000000000..e4ace02dd0
--- /dev/null
+++ b/REORG.TODO/stdlib/strtold.c
@@ -0,0 +1,64 @@
+/* Read decimal floating point numbers.
+ This file is part of the GNU C Library.
+ Copyright (C) 1995-2017 Free Software Foundation, Inc.
+ Contributed by Ulrich Drepper <drepper@gnu.org>, 1995.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+/* The actual implementation for all floating point sizes is in strtod.c.
+ These macros tell it to produce the `float' version, `strtof'. */
+
+#include <bits/long-double.h>
+
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+# include <wchar.h>
+# define NEW(x) NEW1(x)
+# define NEW1(x) __new_##x
+long double ____new_strtold_internal (const char *, char **, int);
+long double __new_strtold (const char *, char **);
+long double ____new_wcstold_internal (const wchar_t *, wchar_t **, int);
+long double __new_wcstold (const wchar_t *, wchar_t **);
+libc_hidden_proto (____new_strtold_internal)
+libc_hidden_proto (____new_wcstold_internal)
+libc_hidden_proto (__new_strtold)
+libc_hidden_proto (__new_wcstold)
+#else
+# define NEW(x) x
+#endif
+
+#define FLOAT long double
+#define FLT LDBL
+#ifdef USE_WIDE_CHAR
+# define STRTOF NEW (wcstold)
+# define STRTOF_L __wcstold_l
+#else
+# define STRTOF NEW (strtold)
+# define STRTOF_L __strtold_l
+#endif
+
+#include "strtod.c"
+
+#ifdef __LONG_DOUBLE_MATH_OPTIONAL
+# include <math_ldbl_opt.h>
+# ifdef USE_WIDE_CHAR
+long_double_symbol (libc, __new_wcstold, wcstold);
+long_double_symbol (libc, ____new_wcstold_internal, __wcstold_internal);
+libc_hidden_ver (____new_wcstold_internal, __wcstold_internal)
+# else
+long_double_symbol (libc, __new_strtold, strtold);
+long_double_symbol (libc, ____new_strtold_internal, __strtold_internal);
+libc_hidden_ver (____new_strtold_internal, __strtold_internal)
+# endif
+#endif
diff --git a/REORG.TODO/stdlib/strtold_l.c b/REORG.TODO/stdlib/strtold_l.c
new file mode 100644
index 0000000000..bef2a4d3d7
--- /dev/null
+++ b/REORG.TODO/stdlib/strtold_l.c
@@ -0,0 +1,65 @@
+/* Copyright (C) 1999-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <math.h>
+#include <stdlib.h>
+#include <xlocale.h>
+
+#if defined _LIBC || defined HAVE_WCHAR_H
+# include <wchar.h>
+#endif
+
+#ifdef USE_WIDE_CHAR
+# define STRING_TYPE wchar_t
+# define STRTOLD wcstold_l
+# define __STRTOLD __wcstold_l
+# define __STRTOD __wcstod_l
+#else
+# define STRING_TYPE char
+# define STRTOLD strtold_l
+# define __STRTOLD __strtold_l
+# define __STRTOD __strtod_l
+#endif
+
+#define INTERNAL(x) INTERNAL1(x)
+#define INTERNAL1(x) __##x##_internal
+
+extern double INTERNAL (__STRTOD) (const STRING_TYPE *, STRING_TYPE **,
+ int, __locale_t);
+
+/* There is no `long double' type, use the `double' implementations. */
+long double
+INTERNAL (__STRTOLD) (const STRING_TYPE *nptr, STRING_TYPE **endptr,
+ int group, __locale_t loc)
+{
+ return INTERNAL (__STRTOD) (nptr, endptr, group, loc);
+}
+#ifndef USE_WIDE_CHAR
+libc_hidden_def (INTERNAL (__STRTOLD))
+#endif
+
+long double
+weak_function
+__STRTOLD (const STRING_TYPE *nptr, STRING_TYPE **endptr, __locale_t loc)
+{
+ return INTERNAL (__STRTOD) (nptr, endptr, 0, loc);
+}
+#if defined _LIBC
+libc_hidden_def (__STRTOLD)
+libc_hidden_ver (__STRTOLD, STRTOLD)
+#endif
+weak_alias (__STRTOLD, STRTOLD)
diff --git a/REORG.TODO/stdlib/strtold_nan.c b/REORG.TODO/stdlib/strtold_nan.c
new file mode 100644
index 0000000000..165a3e6c0f
--- /dev/null
+++ b/REORG.TODO/stdlib/strtold_nan.c
@@ -0,0 +1,30 @@
+/* Convert string for NaN payload to corresponding NaN. Narrow
+ strings, long double.
+ Copyright (C) 2015-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <math.h>
+
+/* This function is unused if long double and double have the same
+ representation. */
+#ifndef __NO_LONG_DOUBLE_MATH
+# include <strtod_nan_narrow.h>
+# include <strtod_nan_ldouble.h>
+
+# define STRTOD_NAN __strtold_nan
+# include <strtod_nan_main.c>
+#endif
diff --git a/REORG.TODO/stdlib/strtoll.c b/REORG.TODO/stdlib/strtoll.c
new file mode 100644
index 0000000000..cb2207cc55
--- /dev/null
+++ b/REORG.TODO/stdlib/strtoll.c
@@ -0,0 +1,33 @@
+/* Function to parse a `long long int' from text.
+ Copyright (C) 1995-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#define QUAD 1
+
+#include <strtol.c>
+
+#ifdef _LIBC
+# ifdef SHARED
+# include <shlib-compat.h>
+
+# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
+compat_symbol (libc, __strtoll_internal, __strtoq_internal, GLIBC_2_0);
+# endif
+
+# endif
+weak_alias (strtoll, strtoq)
+#endif
diff --git a/REORG.TODO/stdlib/strtoll_l.c b/REORG.TODO/stdlib/strtoll_l.c
new file mode 100644
index 0000000000..2a712eb80e
--- /dev/null
+++ b/REORG.TODO/stdlib/strtoll_l.c
@@ -0,0 +1,27 @@
+/* Convert string representing a number to integer value, using given locale.
+ Copyright (C) 1997-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#define QUAD 1
+
+#include <xlocale.h>
+
+extern long long int ____strtoll_l_internal (const char *, char **, int, int,
+ __locale_t);
+
+#include <strtol_l.c>
diff --git a/REORG.TODO/stdlib/strtoul.c b/REORG.TODO/stdlib/strtoul.c
new file mode 100644
index 0000000000..f72a8d50b1
--- /dev/null
+++ b/REORG.TODO/stdlib/strtoul.c
@@ -0,0 +1,20 @@
+/* Copyright (C) 1991-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#define UNSIGNED 1
+
+#include "strtol.c"
diff --git a/REORG.TODO/stdlib/strtoul_l.c b/REORG.TODO/stdlib/strtoul_l.c
new file mode 100644
index 0000000000..6d23ee2964
--- /dev/null
+++ b/REORG.TODO/stdlib/strtoul_l.c
@@ -0,0 +1,27 @@
+/* Convert string representing a number to integer value, using given locale.
+ Copyright (C) 1997-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#define UNSIGNED 1
+
+#include <xlocale.h>
+
+extern unsigned long int ____strtoul_l_internal (const char *, char **, int,
+ int, __locale_t);
+
+#include "strtol_l.c"
diff --git a/REORG.TODO/stdlib/strtoull.c b/REORG.TODO/stdlib/strtoull.c
new file mode 100644
index 0000000000..e3dbd849e0
--- /dev/null
+++ b/REORG.TODO/stdlib/strtoull.c
@@ -0,0 +1,33 @@
+/* Function to parse an `unsigned long long int' from text.
+ Copyright (C) 1995-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#define QUAD 1
+
+#include <strtoul.c>
+
+#ifdef _LIBC
+# ifdef SHARED
+# include <shlib-compat.h>
+
+# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
+compat_symbol (libc, __strtoull_internal, __strtouq_internal, GLIBC_2_0);
+# endif
+
+# endif
+weak_alias (strtoull, strtouq)
+#endif
diff --git a/REORG.TODO/stdlib/strtoull_l.c b/REORG.TODO/stdlib/strtoull_l.c
new file mode 100644
index 0000000000..53ecb916df
--- /dev/null
+++ b/REORG.TODO/stdlib/strtoull_l.c
@@ -0,0 +1,28 @@
+/* Convert string representing a number to integer value, using given locale.
+ Copyright (C) 1997-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#define QUAD 1
+#define UNSIGNED 1
+
+#include <xlocale.h>
+
+extern unsigned long long int ____strtoull_l_internal (const char *, char **,
+ int, int, __locale_t);
+
+#include <strtol_l.c>
diff --git a/REORG.TODO/stdlib/strtoumax.c b/REORG.TODO/stdlib/strtoumax.c
new file mode 100644
index 0000000000..508cb19f8c
--- /dev/null
+++ b/REORG.TODO/stdlib/strtoumax.c
@@ -0,0 +1 @@
+#error "The correct implementation must be chosen based on the `uintmax_t' type"
diff --git a/REORG.TODO/stdlib/sub_n.c b/REORG.TODO/stdlib/sub_n.c
new file mode 100644
index 0000000000..7f429def89
--- /dev/null
+++ b/REORG.TODO/stdlib/sub_n.c
@@ -0,0 +1,53 @@
+/* mpn_sub_n -- Subtract two limb vectors of equal, non-zero length.
+
+Copyright (C) 1992-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP 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 MP 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 MP Library; see the file COPYING.LIB. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+
+mp_limb_t
+mpn_sub_n (mp_ptr res_ptr, mp_srcptr s1_ptr, mp_srcptr s2_ptr, mp_size_t size)
+{
+ register mp_limb_t x, y, cy;
+ register mp_size_t j;
+
+ /* The loop counter and index J goes from -SIZE to -1. This way
+ the loop becomes faster. */
+ j = -size;
+
+ /* Offset the base pointers to compensate for the negative indices. */
+ s1_ptr -= j;
+ s2_ptr -= j;
+ res_ptr -= j;
+
+ cy = 0;
+ do
+ {
+ y = s2_ptr[j];
+ x = s1_ptr[j];
+ y += cy; /* add previous carry to subtrahend */
+ cy = (y < cy); /* get out carry from that addition */
+ y = x - y; /* main subtract */
+ cy = (y > x) + cy; /* get out carry from the subtract, combine */
+ res_ptr[j] = y;
+ }
+ while (++j != 0);
+
+ return cy;
+}
diff --git a/REORG.TODO/stdlib/submul_1.c b/REORG.TODO/stdlib/submul_1.c
new file mode 100644
index 0000000000..9bc27df442
--- /dev/null
+++ b/REORG.TODO/stdlib/submul_1.c
@@ -0,0 +1,61 @@
+/* mpn_submul_1 -- multiply the S1_SIZE long limb vector pointed to by S1_PTR
+ by S2_LIMB, subtract the S1_SIZE least significant limbs of the product
+ from the limb vector pointed to by RES_PTR. Return the most significant
+ limb of the product, adjusted for carry-out from the subtraction.
+
+Copyright (C) 1992-2017 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP 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 MP 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 MP Library; see the file COPYING.LIB. If not, see
+<http://www.gnu.org/licenses/>. */
+
+#include <gmp.h>
+#include "gmp-impl.h"
+#include "longlong.h"
+
+mp_limb_t
+mpn_submul_1 (register mp_ptr res_ptr, register mp_srcptr s1_ptr,
+ mp_size_t s1_size, register mp_limb_t s2_limb)
+{
+ register mp_limb_t cy_limb;
+ register mp_size_t j;
+ register mp_limb_t prod_high, prod_low;
+ register mp_limb_t x;
+
+ /* The loop counter and index J goes from -SIZE to -1. This way
+ the loop becomes faster. */
+ j = -s1_size;
+
+ /* Offset the base pointers to compensate for the negative indices. */
+ res_ptr -= j;
+ s1_ptr -= j;
+
+ cy_limb = 0;
+ do
+ {
+ umul_ppmm (prod_high, prod_low, s1_ptr[j], s2_limb);
+
+ prod_low += cy_limb;
+ cy_limb = (prod_low < cy_limb) + prod_high;
+
+ x = res_ptr[j];
+ prod_low = x - prod_low;
+ cy_limb += (prod_low > x);
+ res_ptr[j] = prod_low;
+ }
+ while (++j != 0);
+
+ return cy_limb;
+}
diff --git a/REORG.TODO/stdlib/swapcontext.c b/REORG.TODO/stdlib/swapcontext.c
new file mode 100644
index 0000000000..decf2b9a9e
--- /dev/null
+++ b/REORG.TODO/stdlib/swapcontext.c
@@ -0,0 +1,29 @@
+/* Copyright (C) 1998-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <ucontext.h>
+
+int
+swapcontext (ucontext_t *oucp, const ucontext_t *ucp)
+{
+ __set_errno (ENOSYS);
+ return -1;
+}
+
+
+stub_warning (swapcontext)
diff --git a/REORG.TODO/stdlib/sys/errno.h b/REORG.TODO/stdlib/sys/errno.h
new file mode 100644
index 0000000000..339f4fc10c
--- /dev/null
+++ b/REORG.TODO/stdlib/sys/errno.h
@@ -0,0 +1 @@
+#include <errno.h>
diff --git a/REORG.TODO/stdlib/sys/random.h b/REORG.TODO/stdlib/sys/random.h
new file mode 100644
index 0000000000..90a0aca15c
--- /dev/null
+++ b/REORG.TODO/stdlib/sys/random.h
@@ -0,0 +1,42 @@
+/* Interfaces for obtaining random bytes.
+ Copyright (C) 2016-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef _SYS_RANDOM_H
+#define _SYS_RANDOM_H 1
+
+#include <features.h>
+#include <sys/types.h>
+
+/* Flags for use with getrandom. */
+#define GRND_NONBLOCK 0x01
+#define GRND_RANDOM 0x02
+
+__BEGIN_DECLS
+
+/* Write LENGTH bytes of randomness starting at BUFFER. Return the
+ number of bytes written, or -1 on error. */
+ssize_t getrandom (void *__buffer, size_t __length,
+ unsigned int __flags) __wur;
+
+/* Write LENGTH bytes of randomness starting at BUFFER. Return 0 on
+ success or -1 on error. */
+int getentropy (void *__buffer, size_t __length) __wur;
+
+__END_DECLS
+
+#endif /* _SYS_RANDOM_H */
diff --git a/REORG.TODO/stdlib/system.c b/REORG.TODO/stdlib/system.c
new file mode 100644
index 0000000000..026ab77768
--- /dev/null
+++ b/REORG.TODO/stdlib/system.c
@@ -0,0 +1,35 @@
+/* Copyright (C) 1991-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <stdlib.h>
+
+
+/* Execute LINE as a shell command. */
+int
+__libc_system (const char *line)
+{
+ if (line == NULL)
+ return 0; /* This indicates no command processor. */
+
+ __set_errno (ENOSYS);
+ return -1;
+}
+weak_alias (__libc_system, system)
+
+
+stub_warning (system)
diff --git a/REORG.TODO/stdlib/tens_in_limb.c b/REORG.TODO/stdlib/tens_in_limb.c
new file mode 100644
index 0000000000..b6e35aa35a
--- /dev/null
+++ b/REORG.TODO/stdlib/tens_in_limb.c
@@ -0,0 +1,31 @@
+#include <gmp.h>
+
+
+/* Definitions according to limb size used. */
+#if BITS_PER_MP_LIMB == 32
+# define MAX_DIG_PER_LIMB 9
+# define MAX_FAC_PER_LIMB 1000000000UL
+#elif BITS_PER_MP_LIMB == 64
+# define MAX_DIG_PER_LIMB 19
+# define MAX_FAC_PER_LIMB 10000000000000000000ULL
+#else
+# error "mp_limb_t size " BITS_PER_MP_LIMB "not accounted for"
+#endif
+
+
+/* Local data structure. */
+const mp_limb_t _tens_in_limb[MAX_DIG_PER_LIMB + 1] =
+{ 0, 10, 100,
+ 1000, 10000, 100000L,
+ 1000000L, 10000000L, 100000000L,
+ 1000000000L
+#if BITS_PER_MP_LIMB > 32
+ , 10000000000ULL, 100000000000ULL,
+ 1000000000000ULL, 10000000000000ULL, 100000000000000ULL,
+ 1000000000000000ULL, 10000000000000000ULL, 100000000000000000ULL,
+ 1000000000000000000ULL, 10000000000000000000ULL
+#endif
+#if BITS_PER_MP_LIMB > 64
+ #error "Need to expand tens_in_limb table to" MAX_DIG_PER_LIMB
+#endif
+};
diff --git a/REORG.TODO/stdlib/test-a64l.c b/REORG.TODO/stdlib/test-a64l.c
new file mode 100644
index 0000000000..b3e1b2e846
--- /dev/null
+++ b/REORG.TODO/stdlib/test-a64l.c
@@ -0,0 +1,80 @@
+/* Test program for the l64a and a64l functions.
+ Copyright (C) 2001-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Andreas Schwab <schwab@suse.de>.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* Prototype for our test function. */
+extern int do_test (int argc, char *argv[]);
+#include <test-skeleton.c>
+
+struct a64l_test
+{
+ const char *base64;
+ long int value;
+};
+
+static const struct a64l_test tests[] =
+ {
+ { "./", 64 },
+ { "", 0 },
+ { "/", 1 },
+ { "FT", 2001 },
+ { "zzzzz1", 0xffffffff },
+ { "zzzz1", 0x3ffffff },
+ { "zzz1", 0xfffff },
+ { "zz1", 0x3fff },
+ { "z1", 0xff },
+ { "1", 0x3 },
+ { NULL, 0 }
+ };
+
+int
+do_test (int argc, char ** argv)
+{
+ const struct a64l_test *at;
+ long int l;
+ const char *s;
+ int status = 0;
+
+ for (at = tests; at->base64 != NULL; ++at)
+ {
+ printf ("a64l (\"%s\")", at->base64);
+ l = a64l (at->base64);
+ if (l == at->value)
+ puts ("\tOK");
+ else
+ {
+ printf ("\tBAD\n returns %ld, expected %ld\n", l, at->value);
+ status = 1;
+ }
+ printf ("l64a (%ld)", at->value);
+ s = l64a (at->value);
+ if (strcmp (s, at->base64) == 0)
+ puts ("\tOK");
+ else
+ {
+ printf ("\tBAD\n returns \"%s\", expected \"%s\"\n", s, at->base64);
+ status = 1;
+ }
+ }
+
+ return status ? EXIT_FAILURE : EXIT_SUCCESS;
+}
diff --git a/REORG.TODO/stdlib/test-canon.c b/REORG.TODO/stdlib/test-canon.c
new file mode 100644
index 0000000000..d664f73c45
--- /dev/null
+++ b/REORG.TODO/stdlib/test-canon.c
@@ -0,0 +1,235 @@
+/* Test program for returning the canonical absolute name of a given file.
+ Copyright (C) 1996-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by David Mosberger <davidm@azstarnet.com>.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+/* This file must be run from within a directory called "stdlib". */
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/param.h>
+#include <sys/stat.h>
+
+/* Prototype for our test function. */
+extern int do_test (int argc, char *argv[]);
+#include <test-skeleton.c>
+
+#ifndef PATH_MAX
+# define PATH_MAX 4096
+#endif
+static char cwd[PATH_MAX];
+static size_t cwd_len;
+
+struct {
+ const char * name;
+ const char * value;
+} symlinks[] = {
+ {"SYMLINK_LOOP", "SYMLINK_LOOP"},
+ {"SYMLINK_1", "."},
+ {"SYMLINK_2", "//////./../../etc"},
+ {"SYMLINK_3", "SYMLINK_1"},
+ {"SYMLINK_4", "SYMLINK_2"},
+ {"SYMLINK_5", "doesNotExist"},
+};
+
+struct {
+ const char * in, * out, * resolved;
+ int error;
+} tests[] = {
+ /* 0 */
+ {"/", "/"},
+ {"/////////////////////////////////", "/"},
+ {"/.././.././.././..///", "/"},
+ {"/etc", "/etc"},
+ {"/etc/../etc", "/etc"},
+ /* 5 */
+ {"/doesNotExist/../etc", 0, "/doesNotExist", ENOENT},
+ {"./././././././././.", "."},
+ {"/etc/.//doesNotExist", 0, "/etc/doesNotExist", ENOENT},
+ {"./doesExist", "./doesExist"},
+ {"./doesExist/", "./doesExist"},
+ /* 10 */
+ {"./doesExist/../doesExist", "./doesExist"},
+ {"foobar", 0, "./foobar", ENOENT},
+ {".", "."},
+ {"./foobar", 0, "./foobar", ENOENT},
+ {"SYMLINK_LOOP", 0, "./SYMLINK_LOOP", ELOOP},
+ /* 15 */
+ {"./SYMLINK_LOOP", 0, "./SYMLINK_LOOP", ELOOP},
+ {"SYMLINK_1", "."},
+ {"SYMLINK_1/foobar", 0, "./foobar", ENOENT},
+ {"SYMLINK_2", "/etc"},
+ {"SYMLINK_3", "."},
+ /* 20 */
+ {"SYMLINK_4", "/etc"},
+ {"../stdlib/SYMLINK_1", "."},
+ {"../stdlib/SYMLINK_2", "/etc"},
+ {"../stdlib/SYMLINK_3", "."},
+ {"../stdlib/SYMLINK_4", "/etc"},
+ /* 25 */
+ {"./SYMLINK_5", 0, "./doesNotExist", ENOENT},
+ {"SYMLINK_5", 0, "./doesNotExist", ENOENT},
+ {"SYMLINK_5/foobar", 0, "./doesNotExist", ENOENT},
+ {"doesExist/../../stdlib/doesExist", "./doesExist"},
+ {"doesExist/.././../stdlib/.", "."},
+ /* 30 */
+ {"./doesExist/someFile/", 0, "./doesExist/someFile", ENOTDIR},
+ {"./doesExist/someFile/..", 0, "./doesExist/someFile", ENOTDIR},
+};
+
+
+static int
+check_path (const char * result, const char * expected)
+{
+ int good;
+
+ if (!result)
+ return (expected == NULL);
+
+ if (!expected)
+ return 0;
+
+ if (expected[0] == '.' && (expected[1] == '/' || expected[1] == '\0'))
+ good = (strncmp (result, cwd, cwd_len) == 0
+ && strcmp (result + cwd_len, expected + 1) == 0);
+ else
+ good = (strcmp (expected, result) == 0);
+
+ return good;
+}
+
+
+int
+do_test (int argc, char ** argv)
+{
+ char * result;
+ int i, errors = 0;
+ char buf[PATH_MAX];
+
+ getcwd (cwd, sizeof(buf));
+ cwd_len = strlen (cwd);
+
+ errno = 0;
+ if (realpath (NULL, buf) != NULL || errno != EINVAL)
+ {
+ printf ("%s: expected return value NULL and errno set to EINVAL"
+ " for realpath(NULL,...)\n", argv[0]);
+ ++errors;
+ }
+
+#if 0
+ /* This is now allowed. The test is invalid. */
+ errno = 0;
+ if (realpath ("/", NULL) != NULL || errno != EINVAL)
+ {
+ printf ("%s: expected return value NULL and errno set to EINVAL"
+ " for realpath(...,NULL)\n", argv[0]);
+ ++errors;
+ }
+#endif
+
+ errno = 0;
+ if (realpath ("", buf) != NULL || errno != ENOENT)
+ {
+ printf ("%s: expected return value NULL and set errno to ENOENT"
+ " for realpath(\"\",...)\n", argv[0]);
+ ++errors;
+ }
+
+ for (i = 0; i < (int) (sizeof (symlinks) / sizeof (symlinks[0])); ++i)
+ symlink (symlinks[i].value, symlinks[i].name);
+
+ int has_dir = mkdir ("doesExist", 0777) == 0;
+
+ int fd = has_dir ? creat ("doesExist/someFile", 0777) : -1;
+
+ for (i = 0; i < (int) (sizeof (tests) / sizeof (tests[0])); ++i)
+ {
+ buf[0] = '\0';
+ result = realpath (tests[i].in, buf);
+
+ if (!check_path (result, tests[i].out))
+ {
+ printf ("%s: flunked test %d (expected `%s', got `%s')\n",
+ argv[0], i, tests[i].out ? tests[i].out : "NULL",
+ result ? result : "NULL");
+ ++errors;
+ continue;
+ }
+
+ if (!check_path (buf, tests[i].out ? tests[i].out : tests[i].resolved))
+ {
+ printf ("%s: flunked test %d (expected resolved `%s', got `%s')\n",
+ argv[0], i, tests[i].out ? tests[i].out : tests[i].resolved,
+ buf);
+ ++errors;
+ continue;
+ }
+
+ if (!tests[i].out && errno != tests[i].error)
+ {
+ printf ("%s: flunked test %d (expected errno %d, got %d)\n",
+ argv[0], i, tests[i].error, errno);
+ ++errors;
+ continue;
+ }
+
+ char *result2 = realpath (tests[i].in, NULL);
+ if ((result2 == NULL && result != NULL)
+ || (result2 != NULL && strcmp (result, result2) != 0))
+ {
+ printf ("\
+%s: realpath(..., NULL) produced different result than realpath(..., buf): '%s' vs '%s'\n",
+ argv[0], result2, result);
+ ++errors;
+ }
+ free (result2);
+ }
+
+ getcwd (buf, sizeof(buf));
+ if (strcmp (buf, cwd))
+ {
+ printf ("%s: current working directory changed from %s to %s\n",
+ argv[0], cwd, buf);
+ ++errors;
+ }
+
+ if (fd >= 0)
+ {
+ close (fd);
+ unlink ("doesExist/someFile");
+ }
+
+ if (has_dir)
+ rmdir ("doesExist");
+
+ for (i = 0; i < (int) (sizeof (symlinks) / sizeof (symlinks[0])); ++i)
+ unlink (symlinks[i].name);
+
+ if (errors != 0)
+ {
+ printf ("%d errors.\n", errors);
+ return EXIT_FAILURE;
+ }
+
+ puts ("No errors.");
+ return EXIT_SUCCESS;
+}
diff --git a/REORG.TODO/stdlib/test-canon2.c b/REORG.TODO/stdlib/test-canon2.c
new file mode 100644
index 0000000000..bb676cd865
--- /dev/null
+++ b/REORG.TODO/stdlib/test-canon2.c
@@ -0,0 +1,74 @@
+/* Test for realpath/canonicalize function.
+ Copyright (C) 1998-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <string.h>
+
+
+/* Prototype for our test function. */
+extern void do_prepare (int argc, char *argv[]);
+extern int do_test (int argc, char *argv[]);
+
+/* We have a preparation function. */
+#define PREPARE do_prepare
+
+#include <test-skeleton.c>
+
+/* Name of the temporary files we create. */
+char *name1;
+char *name2;
+
+/* Preparation. */
+void
+do_prepare (int argc, char *argv[])
+{
+ size_t test_dir_len;
+
+ test_dir_len = strlen (test_dir);
+
+ /* Generate the circular symlinks. */
+ name1 = malloc (test_dir_len + sizeof ("/canonXXXXXX"));
+ mempcpy (mempcpy (name1, test_dir, test_dir_len),
+ "/canonXXXXXX", sizeof ("/canonXXXXXX"));
+ name2 = strdup (name1);
+
+ add_temp_file (mktemp (name1));
+ add_temp_file (mktemp (name2));
+}
+
+
+/* Run the test. */
+int
+do_test (int argc, char *argv[])
+{
+ char *canon;
+
+ printf ("create symlinks from %s to %s and vice versa\n", name1, name2);
+ if (symlink (name1, name2) == -1
+ || symlink (name2, name1) == -1)
+ /* We cannot test this. */
+ return 0;
+
+ /* Call the function. This is equivalent the using `realpath' but the
+ function allocates the room for the result. */
+ errno = 0;
+ canon = canonicalize_file_name (name1);
+
+ return canon != NULL || errno != ELOOP;
+}
diff --git a/REORG.TODO/stdlib/testdiv.c b/REORG.TODO/stdlib/testdiv.c
new file mode 100644
index 0000000000..4ba3843c69
--- /dev/null
+++ b/REORG.TODO/stdlib/testdiv.c
@@ -0,0 +1,39 @@
+/* Copyright (C) 1992-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include <stdio.h>
+
+int
+main (void)
+{
+ int err = 0;
+ int i, j;
+ while (scanf ("%d %d\n", &i, &j) == 2)
+ {
+ div_t d = div (i, j);
+ printf ("%d / %d = %d + %d/%d", i, j, d.quot, d.rem, j);
+ if (i == d.quot * j + d.rem)
+ fputs (" OK\n", stdout);
+ else
+ {
+ fputs (" FAILED\n", stdout);
+ err = 1;
+ }
+ }
+ return err;
+}
diff --git a/REORG.TODO/stdlib/testdiv.input b/REORG.TODO/stdlib/testdiv.input
new file mode 100644
index 0000000000..415b7b4f54
--- /dev/null
+++ b/REORG.TODO/stdlib/testdiv.input
@@ -0,0 +1,2 @@
+10 3
+-10 3
diff --git a/REORG.TODO/stdlib/testmb.c b/REORG.TODO/stdlib/testmb.c
new file mode 100644
index 0000000000..45dae7db61
--- /dev/null
+++ b/REORG.TODO/stdlib/testmb.c
@@ -0,0 +1,65 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+int
+main (int argc, char *argv[])
+{
+ wchar_t w[10];
+ char c[10];
+ int i;
+ int lose = 0;
+
+ i = mbstowcs (w, "bar", 4);
+ if (!(i == 3 && w[1] == 'a'))
+ {
+ puts ("mbstowcs FAILED!");
+ lose = 1;
+ }
+
+ mbstowcs (w, "blah", 5);
+ i = wcstombs (c, w, 10);
+ if (i != 4)
+ {
+ puts ("wcstombs FAILED!");
+ lose = 1;
+ }
+
+ if (mblen ("foobar", 7) != 1)
+ {
+ puts ("mblen 1 FAILED!");
+ lose = 1;
+ }
+
+ if (mblen ("", 1) != 0)
+ {
+ puts ("mblen 2 FAILED!");
+ lose = 1;
+ }
+
+ {
+ int r;
+ char c = 'x';
+ wchar_t wc;
+ char mbc[MB_CUR_MAX];
+
+ if ((r = mbtowc (&wc, &c, MB_CUR_MAX)) <= 0)
+ {
+ printf ("conversion to wide failed, result: %d\n", r);
+ lose = 1;
+ }
+ else
+ {
+ printf ("wide value: 0x%04lx\n", (unsigned long) wc);
+ mbc[0] = '\0';
+ if ((r = wctomb (mbc, wc)) <= 0)
+ {
+ printf ("conversion to multibyte failed, result: %d\n", r);
+ lose = 1;
+ }
+ }
+
+ }
+
+ puts (lose ? "Test FAILED!" : "Test succeeded.");
+ return lose;
+}
diff --git a/REORG.TODO/stdlib/testmb2.c b/REORG.TODO/stdlib/testmb2.c
new file mode 100644
index 0000000000..3a3e354629
--- /dev/null
+++ b/REORG.TODO/stdlib/testmb2.c
@@ -0,0 +1,31 @@
+/* Test case by Miloslav Trmac <mitr@volny.cz>. */
+#include <locale.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+int
+main (void)
+{
+ wchar_t wc;
+
+ if (setlocale (LC_CTYPE, "de_DE.UTF-8") == NULL)
+ {
+ puts ("setlocale failed");
+ return 1;
+ }
+
+ if (mbtowc (&wc, "\xc3\xa1", MB_CUR_MAX) != 2 || wc != 0xE1)
+ {
+ puts ("1st mbtowc failed");
+ return 1;
+ }
+
+ if (mbtowc (&wc, "\xc3\xa1", SIZE_MAX) != 2 || wc != 0xE1)
+ {
+ puts ("2nd mbtowc failed");
+ return 1;
+ }
+
+ return 0;
+}
diff --git a/REORG.TODO/stdlib/testrand.c b/REORG.TODO/stdlib/testrand.c
new file mode 100644
index 0000000000..fdfc4e5694
--- /dev/null
+++ b/REORG.TODO/stdlib/testrand.c
@@ -0,0 +1,52 @@
+/* Copyright (C) 1992-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include <stdio.h>
+
+int
+main (void)
+{
+ int i1, i2;
+ int j1, j2;
+
+ /* The C standard says that "If rand is called before any calls to
+ srand have been made, the same sequence shall be generated as
+ when srand is first called with a seed value of 1." */
+ i1 = rand();
+ i2 = rand();
+ srand (1);
+ j1 = rand();
+ j2 = rand();
+ if (i1 < 0 || i2 < 0 || j1 < 0 || j2 < 0) {
+ puts ("Test FAILED!");
+ }
+ if (j1 == i1 && j2 == i2)
+ {
+ puts ("Test succeeded.");
+ return 0;
+ }
+ else
+ {
+ if (j1 != i1)
+ printf ("%d != %d\n", j1, i1);
+ if (j2 != i2)
+ printf ("%d != %d\n", j2, i2);
+ puts ("Test FAILED!");
+ return 1;
+ }
+}
diff --git a/REORG.TODO/stdlib/testsort.c b/REORG.TODO/stdlib/testsort.c
new file mode 100644
index 0000000000..aa4332a568
--- /dev/null
+++ b/REORG.TODO/stdlib/testsort.c
@@ -0,0 +1,36 @@
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+
+static int
+compare (const void *a, const void *b)
+{
+ return strcmp (*(char **) a, *(char **) b);
+}
+
+int
+main (void)
+{
+ char bufs[500][20];
+ char *lines[500];
+ size_t lens[500];
+ size_t i, j;
+
+ srandom (1);
+
+ for (i = 0; i < 500; ++i)
+ {
+ lens[i] = random() % 19;
+ lines[i] = bufs[i];
+ for (j = 0; j < lens[i]; ++j)
+ lines[i][j] = random() % 26 + 'a';
+ lines[i][j] = '\0';
+ }
+
+ qsort (lines, 500, sizeof (char *), compare);
+
+ for (i = 0; i < 500 && lines[i] != NULL; ++i)
+ puts (lines[i]);
+
+ return 0;
+}
diff --git a/REORG.TODO/stdlib/tst-atof1.c b/REORG.TODO/stdlib/tst-atof1.c
new file mode 100644
index 0000000000..879d866558
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-atof1.c
@@ -0,0 +1,19 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+static int
+do_test (void)
+{
+ char buf[100];
+ snprintf (buf, sizeof (buf), "%g", atof ("0x10p-1"));
+ if (strcmp (buf, "8") != 0)
+ {
+ printf ("got \"%s\", expected \"8\"\n", buf);
+ return 1;
+ }
+ return 0;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-atof2.c b/REORG.TODO/stdlib/tst-atof2.c
new file mode 100644
index 0000000000..74dac87b0d
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-atof2.c
@@ -0,0 +1,55 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+static const struct
+{
+ const char *str;
+ const char *expected;
+} tests[] =
+ {
+ { "1e308", "1e+308" },
+ { "100000000e300", "1e+308" },
+ { "0x1p1023", "8.98847e+307" },
+ { "0x1000p1011", "8.98847e+307" },
+ { "0x1p1020", "1.12356e+307" },
+ { "0x0.00001p1040", "1.12356e+307" },
+ { "1e-307", "1e-307" },
+ { "0.000001e-301", "1e-307" },
+ { "0.0000001e-300", "1e-307" },
+ { "0.00000001e-299", "1e-307" },
+ { "1000000e-313", "1e-307" },
+ { "10000000e-314", "1e-307" },
+ { "100000000e-315", "1e-307" },
+ { "0x1p-1021", "4.45015e-308" },
+ { "0x1000p-1033", "4.45015e-308" },
+ { "0x10000p-1037", "4.45015e-308" },
+ { "0x0.001p-1009", "4.45015e-308" },
+ { "0x0.0001p-1005", "4.45015e-308" },
+ };
+#define NTESTS (sizeof (tests) / sizeof (tests[0]))
+
+
+static int
+do_test (void)
+{
+ int status = 0;
+
+ for (int i = 0; i < NTESTS; ++i)
+ {
+ char buf[100];
+ snprintf (buf, sizeof (buf), "%g", atof (tests[i].str));
+ if (strcmp (buf, tests[i].expected) != 0)
+ {
+ printf ("%d: got \"%s\", expected \"%s\"\n",
+ i, buf, tests[i].expected);
+ status = 1;
+ }
+ }
+
+ return status;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-bsearch.c b/REORG.TODO/stdlib/tst-bsearch.c
new file mode 100644
index 0000000000..766b11bc61
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-bsearch.c
@@ -0,0 +1,153 @@
+/* Copyright (C) 2000-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@redhat.com>, 2000.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <tst-stack-align.h>
+
+struct item
+{
+ int val;
+ const char *str;
+} arr[] =
+{
+ { 0, "zero" },
+ { 1, "one" },
+ { 2, "two" },
+ { 3, "three" },
+ { 4, "four" },
+ { 5, "five" },
+ { 6, "six" },
+ { 7, "seven" },
+ { 8, "eight" },
+ { 9, "nine" },
+ { 10, "ten" }
+};
+#define narr (sizeof (arr) / sizeof (arr[0]))
+
+static int align_check;
+
+static int
+comp (const void *p1, const void *p2)
+{
+ struct item *e1 = (struct item *) p1;
+ struct item *e2 = (struct item *) p2;
+
+ if (!align_check)
+ align_check = TEST_STACK_ALIGN () ? -1 : 1;
+
+ return e1->val - e2->val;
+}
+
+
+static int
+do_test (void)
+{
+ size_t cnt;
+ int result = 0;
+ struct item key;
+ struct item *res;
+
+ for (cnt = 0; cnt < narr; ++cnt)
+ {
+
+ key.val = arr[cnt].val;
+
+ res = (struct item *) bsearch (&key, arr, narr, sizeof (arr[0]), comp);
+ if (res == NULL)
+ {
+ printf ("entry %zd not found\n", cnt);
+ result = 1;
+ }
+ else if (res != &arr[cnt])
+ {
+ puts ("wrong entry returned");
+ result = 1;
+ }
+ }
+
+ /* And some special tests that shouldn't find any entry. */
+ key.val = -1;
+ res = (struct item *) bsearch (&key, arr, narr, sizeof (arr[0]), comp);
+ if (res != NULL)
+ {
+ puts ("found an entry that's not there");
+ result = 1;
+ }
+
+ key.val = 11;
+ res = (struct item *) bsearch (&key, arr, narr, sizeof (arr[0]), comp);
+ if (res != NULL)
+ {
+ puts ("found an entry that's not there");
+ result = 1;
+ }
+
+ key.val = 11;
+ res = (struct item *) bsearch (&key, arr, 0, sizeof (arr[0]), comp);
+ if (res != NULL)
+ {
+ puts ("found an entry that's not there");
+ result = 1;
+ }
+
+ /* Now the array contains only one element - no entry should be found. */
+ for (cnt = 0; cnt < narr; ++cnt)
+ {
+ key.val = arr[cnt].val;
+
+ res = (struct item *) bsearch (&key, &arr[5], 1, sizeof (arr[0]), comp);
+ if (cnt == 5)
+ {
+ if (res == NULL)
+ {
+ printf ("entry %zd not found\n", cnt);
+ result = 1;
+ }
+ else if (res != &arr[cnt])
+ {
+ puts ("wrong entry returned");
+ result = 1;
+ }
+ }
+ else if (res != NULL)
+ {
+ puts ("found an entry that's not there");
+ result = 1;
+ }
+ }
+
+ if (align_check == 0)
+ {
+ puts ("alignment not checked");
+ result = 1;
+ }
+ else if (align_check == -1)
+ {
+ puts ("stack not sufficiently aligned");
+ result = 1;
+ }
+
+ if (result == 0)
+ puts ("all OK");
+
+ return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-empty-env.c b/REORG.TODO/stdlib/tst-empty-env.c
new file mode 100644
index 0000000000..0b0651d530
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-empty-env.c
@@ -0,0 +1,58 @@
+/* Test that passing a NULL value does not hang environment traversal in
+ tunables.
+ Copyright (C) 2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+/* The test is useful only when the source is configured with
+ --enable-hardcoded-path-in-tests since otherwise the execve just picks up
+ the system dynamic linker. */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <errno.h>
+
+static int
+do_test (int argc, char **argv)
+{
+ if (argc == 2)
+ return 0;
+
+ char envname[] = "FOOBAR";
+ char *filename = program_invocation_name;
+ char *newargv[] = {filename, filename, NULL};
+ char *newenviron[] = {envname, NULL};
+
+ /* This was reported in Fedora:
+
+ https://bugzilla.redhat.com/show_bug.cgi?id=1414589
+
+ If one of the environment variables has no value, then the environment
+ traversal must skip and also advance to the next environment entry. The
+ bug in question would cause this test to hang in an infinite loop. */
+ int ret = execve (filename, newargv, newenviron);
+
+ if (ret != 0)
+ printf ("execve failed: %m");
+
+ /* We will reach here only if we fail execve. */
+ return 1;
+}
+
+#define TIMEOUT 3
+#define TEST_FUNCTION_ARGV do_test
+#include <support/test-driver.c>
diff --git a/REORG.TODO/stdlib/tst-environ.c b/REORG.TODO/stdlib/tst-environ.c
new file mode 100644
index 0000000000..b2301641f5
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-environ.c
@@ -0,0 +1,229 @@
+/* Copyright (C) 1999-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <libc-diag.h>
+
+#define VAR "FOOBAR"
+
+char putenv_val[100] = VAR "=some longer value";
+
+static int
+do_test (void)
+{
+ int result = 0;
+ const char *valp;
+
+ /* First test: remove entry FOOBAR, whether it exists or not. */
+ unsetenv (VAR);
+
+ /* Now getting the value should fail. */
+ if (getenv (VAR) != NULL)
+ {
+ printf ("There should be no `%s' value\n", VAR);
+ result = 1;
+ }
+
+ /* Now add a value, with the replace flag cleared. */
+ if (setenv (VAR, "one", 0) != 0)
+ {
+ printf ("setenv #1 failed: %m\n");
+ result = 1;
+ }
+
+ /* Getting this value should now be possible. */
+ valp = getenv (VAR);
+ if (valp == NULL || strcmp (valp, "one") != 0)
+ {
+ puts ("getenv #2 failed");
+ result = 1;
+ }
+
+ /* Try to replace without the replace flag set. This should fail. */
+ if (setenv (VAR, "two", 0) != 0)
+ {
+ printf ("setenv #2 failed: %m\n");
+ result = 1;
+ }
+
+ /* The value shouldn't have changed. */
+ valp = getenv (VAR);
+ if (valp == NULL || strcmp (valp, "one") != 0)
+ {
+ puts ("getenv #3 failed");
+ result = 1;
+ }
+
+ /* Now replace the value using putenv. */
+ if (putenv (putenv_val) != 0)
+ {
+ printf ("putenv #1 failed: %m\n");
+ result = 1;
+ }
+
+ /* The value should have changed now. */
+ valp = getenv (VAR);
+ if (valp == NULL || strcmp (valp, "some longer value") != 0)
+ {
+ printf ("getenv #4 failed (is \"%s\")\n", valp);
+ result = 1;
+ }
+
+ /* Now one tricky check: changing the variable passed in putenv should
+ change the environment. */
+ strcpy (&putenv_val[sizeof VAR], "a short one");
+
+ /* The value should have changed again. */
+ valp = getenv (VAR);
+ if (valp == NULL || strcmp (valp, "a short one") != 0)
+ {
+ puts ("getenv #5 failed");
+ result = 1;
+ }
+
+ /* It should even be possible to rename the variable. */
+ strcpy (putenv_val, "XYZZY=some other value");
+
+ /* Now a lookup using the old name should fail. */
+ if (getenv (VAR) != NULL)
+ {
+ puts ("getenv #6 failed");
+ result = 1;
+ }
+
+ /* But using the new name it should work. */
+ valp = getenv ("XYZZY");
+ if (valp == NULL || strcmp (valp, "some other value") != 0)
+ {
+ puts ("getenv #7 failed");
+ result = 1;
+ }
+
+ /* Create a new variable with the old name. */
+ if (setenv (VAR, "a new value", 0) != 0)
+ {
+ printf ("setenv #3 failed: %m\n");
+ result = 1;
+ }
+
+ /* At this point a getenv call must return the new value. */
+ valp = getenv (VAR);
+ if (valp == NULL || strcmp (valp, "a new value") != 0)
+ {
+ puts ("getenv #8 failed");
+ result = 1;
+ }
+
+ /* Black magic: rename the variable we added using putenv back. */
+ strcpy (putenv_val, VAR "=old name new value");
+
+ /* This is interesting. We have two variables with the same name.
+ Getting a value should return one of them. */
+ valp = getenv (VAR);
+ if (valp == NULL
+ || (strcmp (valp, "a new value") != 0
+ && strcmp (valp, "old name new value") != 0))
+ {
+ puts ("getenv #9 failed");
+ result = 1;
+ }
+
+ /* More fun ahead: we are now removing the variable. This should remove
+ both values. The cast is ok: this call should never put the string
+ in the environment and it should never modify it. */
+ putenv ((char *) VAR);
+
+ /* Getting the value should now fail. */
+ if (getenv (VAR) != NULL)
+ {
+ printf ("getenv #10 failed (\"%s\" found)\n", getenv (VAR));
+ result = 1;
+ }
+
+ /* Now a test with an environment variable that's one character long.
+ This is to test a special case in the getenv implementation. */
+ strcpy (putenv_val, "X=one character test");
+ if (putenv (putenv_val) != 0)
+ {
+ printf ("putenv #2 failed: %m\n");
+ result = 1;
+ }
+
+ valp = getenv ("X");
+ if (valp == NULL || strcmp (valp, "one character test") != 0)
+ {
+ puts ("getenv #11 failed");
+ result = 1;
+ }
+
+ /* Both setenv and unsetenv should return -1/EINVAL for NULL or "" name
+ or if name contains '=' character. */
+ errno = 0;
+ if (setenv (NULL, "val", 1) >= 0 || errno != EINVAL)
+ {
+ puts ("setenv #4 failed");
+ result = 1;
+ }
+
+ errno = 0;
+ if (setenv ("", "val", 0) >= 0 || errno != EINVAL)
+ {
+ puts ("setenv #5 failed");
+ result = 1;
+ }
+
+ errno = 0;
+ if (setenv ("var=val", "val", 1) >= 0 || errno != EINVAL)
+ {
+ puts ("setenv #6 failed");
+ result = 1;
+ }
+
+ /* This deliberately tests supplying a null pointer to a function whose
+ argument is marked __attribute__ ((nonnull)). */
+ DIAG_PUSH_NEEDS_COMMENT;
+ DIAG_IGNORE_NEEDS_COMMENT(5, "-Wnonnull");
+ errno = 0;
+ if (unsetenv (NULL) >= 0 || errno != EINVAL)
+ {
+ puts ("unsetenv #1 failed");
+ result = 1;
+ }
+ DIAG_POP_NEEDS_COMMENT;
+
+ errno = 0;
+ if (unsetenv ("") >= 0 || errno != EINVAL)
+ {
+ puts ("unsetenv #2 failed");
+ result = 1;
+ }
+
+ errno = 0;
+ if (unsetenv ("x=y") >= 0 || errno != EINVAL)
+ {
+ puts ("unsetenv #3 failed");
+ result = 1;
+ }
+
+ return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-fmtmsg.c b/REORG.TODO/stdlib/tst-fmtmsg.c
new file mode 100644
index 0000000000..b7948c5f1e
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-fmtmsg.c
@@ -0,0 +1,85 @@
+#include <fmtmsg.h>
+#include <mcheck.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+#define MM_TEST 10
+
+static int
+do_test (void)
+{
+ int result = 0;
+
+ mtrace ();
+
+ char TEST[] = "ABCD";
+ if (addseverity (MM_TEST, TEST) != MM_OK)
+ {
+ puts ("addseverity failed");
+ result = 1;
+ }
+ strcpy (TEST, "TEST");
+
+ if (fmtmsg (MM_PRINT, "GLIBC:tst-fmtmsg", MM_HALT, "halt",
+ "should print message for MM_HALT", "GLIBC:tst-fmtmsg:1")
+ != MM_OK)
+ result = 1;
+
+ if (fmtmsg (MM_PRINT, "GLIBC:tst-fmtmsg", MM_ERROR, "halt",
+ "should print message for MM_ERROR", "GLIBC:tst-fmtmsg:2")
+ != MM_OK)
+ result = 1;
+
+ if (fmtmsg (MM_PRINT, "GLIBC:tst-fmtmsg", MM_WARNING, "halt",
+ "should print message for MM_WARNING", "GLIBC:tst-fmtmsg:3")
+ != MM_OK)
+ result = 1;
+
+ if (fmtmsg (MM_PRINT, "GLIBC:tst-fmtmsg", MM_INFO, "halt",
+ "should print message for MM_INFO", "GLIBC:tst-fmtmsg:4")
+ != MM_OK)
+ result = 1;
+
+ if (fmtmsg (MM_PRINT, "GLIBC:tst-fmtmsg", MM_NOSEV, "halt",
+ "should print message for MM_NOSEV", "GLIBC:tst-fmtmsg:5")
+ != MM_OK)
+ result = 1;
+
+ if (fmtmsg (MM_PRINT, "GLIBC:tst-fmtmsg", MM_TEST, "halt",
+ "should print message for MM_TEST", "GLIBC:tst-fmtmsg:6")
+ != MM_OK)
+ result = 1;
+
+ if (addseverity (MM_TEST, NULL) != MM_OK)
+ {
+ puts ("second addseverity failed");
+ result = 1;
+ }
+
+ if (addseverity (MM_TEST, NULL) != MM_NOTOK)
+ {
+ puts ("third addseverity unexpectedly succeeded");
+ result = 1;
+ }
+
+ char *p = strdup ("TEST2");
+ if (addseverity (MM_TEST, p) != MM_OK)
+ {
+ puts ("fourth addseverity failed");
+ result = 1;
+ }
+ if (addseverity (MM_TEST, "TEST3") != MM_OK)
+ {
+ puts ("fifth addseverity failed");
+ result = 1;
+ }
+
+ free (p);
+
+ return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-fmtmsg.sh b/REORG.TODO/stdlib/tst-fmtmsg.sh
new file mode 100755
index 0000000000..bcbe2e3348
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-fmtmsg.sh
@@ -0,0 +1,337 @@
+#!/bin/sh
+# Test of fmtmsg function family.
+# Copyright (C) 2000-2017 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, see
+# <http://www.gnu.org/licenses/>.
+
+set -e
+
+common_objpfx=$1
+test_program_prefix_before_env=$2
+run_program_env=$3
+test_program_prefix_after_env=$4
+objpfx=$5
+
+test_pre="${test_program_prefix_before_env} ${run_program_env}"
+test="${test_program_prefix_after_env} ${objpfx}tst-fmtmsg"
+out=${objpfx}tst-fmtmsg.out
+
+($test_pre MSGVERB= $test || exit 1;
+ $test_pre MSGVERB=label $test || exit 1;
+ $test_pre MSGVERB=severity $test || exit 1;
+ $test_pre MSGVERB=severity:label $test || exit 1;
+ $test_pre MSGVERB=text $test || exit 1;
+ $test_pre MSGVERB=text:label $test || exit 1;
+ $test_pre MSGVERB=text:severity $test || exit 1;
+ $test_pre MSGVERB=text:severity:label $test || exit 1;
+ $test_pre MSGVERB=action $test || exit 1;
+ $test_pre MSGVERB=action:label $test || exit 1;
+ $test_pre MSGVERB=action:severity $test || exit 1;
+ $test_pre MSGVERB=action:severity:label $test || exit 1;
+ $test_pre MSGVERB=action:text $test || exit 1;
+ $test_pre MSGVERB=action:text:label $test || exit 1;
+ $test_pre MSGVERB=action:text:severity $test || exit 1;
+ $test_pre MSGVERB=action:text:severity:label $test || exit 1;
+ $test_pre MSGVERB=tag $test || exit 1;
+ $test_pre MSGVERB=tag:label $test || exit 1;
+ $test_pre MSGVERB=tag:severity $test || exit 1;
+ $test_pre MSGVERB=tag:severity:label $test || exit 1;
+ $test_pre MSGVERB=tag:text $test || exit 1;
+ $test_pre MSGVERB=tag:text:label $test || exit 1;
+ $test_pre MSGVERB=tag:text:severity $test || exit 1;
+ $test_pre MSGVERB=tag:text:severity:label $test || exit 1;
+ $test_pre MSGVERB=tag:action $test || exit 1;
+ $test_pre MSGVERB=tag:action:label $test || exit 1;
+ $test_pre MSGVERB=tag:action:severity $test || exit 1;
+ $test_pre MSGVERB=tag:action:severity:label $test || exit 1;
+ $test_pre MSGVERB=tag:action:text $test || exit 1;
+ $test_pre MSGVERB=tag:action:text:label $test || exit 1;
+ $test_pre MSGVERB=tag:action:text:severity $test || exit 1;
+ $test_pre MSGVERB=tag:action:text:severity:label $test || exit 1;) 2> $out
+
+cmp $out <<EOF
+GLIBC:tst-fmtmsg: HALT: halt
+TO FIX: should print message for MM_HALT GLIBC:tst-fmtmsg:1
+GLIBC:tst-fmtmsg: ERROR: halt
+TO FIX: should print message for MM_ERROR GLIBC:tst-fmtmsg:2
+GLIBC:tst-fmtmsg: WARNING: halt
+TO FIX: should print message for MM_WARNING GLIBC:tst-fmtmsg:3
+GLIBC:tst-fmtmsg: INFO: halt
+TO FIX: should print message for MM_INFO GLIBC:tst-fmtmsg:4
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_NOSEV GLIBC:tst-fmtmsg:5
+GLIBC:tst-fmtmsg: TEST: halt
+TO FIX: should print message for MM_TEST GLIBC:tst-fmtmsg:6
+GLIBC:tst-fmtmsg
+GLIBC:tst-fmtmsg
+GLIBC:tst-fmtmsg
+GLIBC:tst-fmtmsg
+GLIBC:tst-fmtmsg
+GLIBC:tst-fmtmsg
+HALT
+ERROR
+WARNING
+INFO
+
+TEST
+GLIBC:tst-fmtmsg: HALT
+GLIBC:tst-fmtmsg: ERROR
+GLIBC:tst-fmtmsg: WARNING
+GLIBC:tst-fmtmsg: INFO
+GLIBC:tst-fmtmsg
+GLIBC:tst-fmtmsg: TEST
+halt
+halt
+halt
+halt
+halt
+halt
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg: halt
+HALT: halt
+ERROR: halt
+WARNING: halt
+INFO: halt
+halt
+TEST: halt
+GLIBC:tst-fmtmsg: HALT: halt
+GLIBC:tst-fmtmsg: ERROR: halt
+GLIBC:tst-fmtmsg: WARNING: halt
+GLIBC:tst-fmtmsg: INFO: halt
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg: TEST: halt
+TO FIX: should print message for MM_HALT
+TO FIX: should print message for MM_ERROR
+TO FIX: should print message for MM_WARNING
+TO FIX: should print message for MM_INFO
+TO FIX: should print message for MM_NOSEV
+TO FIX: should print message for MM_TEST
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_HALT
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_ERROR
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_WARNING
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_INFO
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_NOSEV
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_TEST
+HALT: TO FIX: should print message for MM_HALT
+ERROR: TO FIX: should print message for MM_ERROR
+WARNING: TO FIX: should print message for MM_WARNING
+INFO: TO FIX: should print message for MM_INFO
+TO FIX: should print message for MM_NOSEV
+TEST: TO FIX: should print message for MM_TEST
+GLIBC:tst-fmtmsg: HALT: TO FIX: should print message for MM_HALT
+GLIBC:tst-fmtmsg: ERROR: TO FIX: should print message for MM_ERROR
+GLIBC:tst-fmtmsg: WARNING: TO FIX: should print message for MM_WARNING
+GLIBC:tst-fmtmsg: INFO: TO FIX: should print message for MM_INFO
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_NOSEV
+GLIBC:tst-fmtmsg: TEST: TO FIX: should print message for MM_TEST
+halt
+TO FIX: should print message for MM_HALT
+halt
+TO FIX: should print message for MM_ERROR
+halt
+TO FIX: should print message for MM_WARNING
+halt
+TO FIX: should print message for MM_INFO
+halt
+TO FIX: should print message for MM_NOSEV
+halt
+TO FIX: should print message for MM_TEST
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_HALT
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_ERROR
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_WARNING
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_INFO
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_NOSEV
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_TEST
+HALT: halt
+TO FIX: should print message for MM_HALT
+ERROR: halt
+TO FIX: should print message for MM_ERROR
+WARNING: halt
+TO FIX: should print message for MM_WARNING
+INFO: halt
+TO FIX: should print message for MM_INFO
+halt
+TO FIX: should print message for MM_NOSEV
+TEST: halt
+TO FIX: should print message for MM_TEST
+GLIBC:tst-fmtmsg: HALT: halt
+TO FIX: should print message for MM_HALT
+GLIBC:tst-fmtmsg: ERROR: halt
+TO FIX: should print message for MM_ERROR
+GLIBC:tst-fmtmsg: WARNING: halt
+TO FIX: should print message for MM_WARNING
+GLIBC:tst-fmtmsg: INFO: halt
+TO FIX: should print message for MM_INFO
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_NOSEV
+GLIBC:tst-fmtmsg: TEST: halt
+TO FIX: should print message for MM_TEST
+GLIBC:tst-fmtmsg:1
+GLIBC:tst-fmtmsg:2
+GLIBC:tst-fmtmsg:3
+GLIBC:tst-fmtmsg:4
+GLIBC:tst-fmtmsg:5
+GLIBC:tst-fmtmsg:6
+GLIBC:tst-fmtmsg: GLIBC:tst-fmtmsg:1
+GLIBC:tst-fmtmsg: GLIBC:tst-fmtmsg:2
+GLIBC:tst-fmtmsg: GLIBC:tst-fmtmsg:3
+GLIBC:tst-fmtmsg: GLIBC:tst-fmtmsg:4
+GLIBC:tst-fmtmsg: GLIBC:tst-fmtmsg:5
+GLIBC:tst-fmtmsg: GLIBC:tst-fmtmsg:6
+HALT: GLIBC:tst-fmtmsg:1
+ERROR: GLIBC:tst-fmtmsg:2
+WARNING: GLIBC:tst-fmtmsg:3
+INFO: GLIBC:tst-fmtmsg:4
+GLIBC:tst-fmtmsg:5
+TEST: GLIBC:tst-fmtmsg:6
+GLIBC:tst-fmtmsg: HALT: GLIBC:tst-fmtmsg:1
+GLIBC:tst-fmtmsg: ERROR: GLIBC:tst-fmtmsg:2
+GLIBC:tst-fmtmsg: WARNING: GLIBC:tst-fmtmsg:3
+GLIBC:tst-fmtmsg: INFO: GLIBC:tst-fmtmsg:4
+GLIBC:tst-fmtmsg: GLIBC:tst-fmtmsg:5
+GLIBC:tst-fmtmsg: TEST: GLIBC:tst-fmtmsg:6
+halt
+GLIBC:tst-fmtmsg:1
+halt
+GLIBC:tst-fmtmsg:2
+halt
+GLIBC:tst-fmtmsg:3
+halt
+GLIBC:tst-fmtmsg:4
+halt
+GLIBC:tst-fmtmsg:5
+halt
+GLIBC:tst-fmtmsg:6
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg:1
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg:2
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg:3
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg:4
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg:5
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg:6
+HALT: halt
+GLIBC:tst-fmtmsg:1
+ERROR: halt
+GLIBC:tst-fmtmsg:2
+WARNING: halt
+GLIBC:tst-fmtmsg:3
+INFO: halt
+GLIBC:tst-fmtmsg:4
+halt
+GLIBC:tst-fmtmsg:5
+TEST: halt
+GLIBC:tst-fmtmsg:6
+GLIBC:tst-fmtmsg: HALT: halt
+GLIBC:tst-fmtmsg:1
+GLIBC:tst-fmtmsg: ERROR: halt
+GLIBC:tst-fmtmsg:2
+GLIBC:tst-fmtmsg: WARNING: halt
+GLIBC:tst-fmtmsg:3
+GLIBC:tst-fmtmsg: INFO: halt
+GLIBC:tst-fmtmsg:4
+GLIBC:tst-fmtmsg: halt
+GLIBC:tst-fmtmsg:5
+GLIBC:tst-fmtmsg: TEST: halt
+GLIBC:tst-fmtmsg:6
+TO FIX: should print message for MM_HALT GLIBC:tst-fmtmsg:1
+TO FIX: should print message for MM_ERROR GLIBC:tst-fmtmsg:2
+TO FIX: should print message for MM_WARNING GLIBC:tst-fmtmsg:3
+TO FIX: should print message for MM_INFO GLIBC:tst-fmtmsg:4
+TO FIX: should print message for MM_NOSEV GLIBC:tst-fmtmsg:5
+TO FIX: should print message for MM_TEST GLIBC:tst-fmtmsg:6
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_HALT GLIBC:tst-fmtmsg:1
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_ERROR GLIBC:tst-fmtmsg:2
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_WARNING GLIBC:tst-fmtmsg:3
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_INFO GLIBC:tst-fmtmsg:4
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_NOSEV GLIBC:tst-fmtmsg:5
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_TEST GLIBC:tst-fmtmsg:6
+HALT: TO FIX: should print message for MM_HALT GLIBC:tst-fmtmsg:1
+ERROR: TO FIX: should print message for MM_ERROR GLIBC:tst-fmtmsg:2
+WARNING: TO FIX: should print message for MM_WARNING GLIBC:tst-fmtmsg:3
+INFO: TO FIX: should print message for MM_INFO GLIBC:tst-fmtmsg:4
+TO FIX: should print message for MM_NOSEV GLIBC:tst-fmtmsg:5
+TEST: TO FIX: should print message for MM_TEST GLIBC:tst-fmtmsg:6
+GLIBC:tst-fmtmsg: HALT: TO FIX: should print message for MM_HALT GLIBC:tst-fmtmsg:1
+GLIBC:tst-fmtmsg: ERROR: TO FIX: should print message for MM_ERROR GLIBC:tst-fmtmsg:2
+GLIBC:tst-fmtmsg: WARNING: TO FIX: should print message for MM_WARNING GLIBC:tst-fmtmsg:3
+GLIBC:tst-fmtmsg: INFO: TO FIX: should print message for MM_INFO GLIBC:tst-fmtmsg:4
+GLIBC:tst-fmtmsg: TO FIX: should print message for MM_NOSEV GLIBC:tst-fmtmsg:5
+GLIBC:tst-fmtmsg: TEST: TO FIX: should print message for MM_TEST GLIBC:tst-fmtmsg:6
+halt
+TO FIX: should print message for MM_HALT GLIBC:tst-fmtmsg:1
+halt
+TO FIX: should print message for MM_ERROR GLIBC:tst-fmtmsg:2
+halt
+TO FIX: should print message for MM_WARNING GLIBC:tst-fmtmsg:3
+halt
+TO FIX: should print message for MM_INFO GLIBC:tst-fmtmsg:4
+halt
+TO FIX: should print message for MM_NOSEV GLIBC:tst-fmtmsg:5
+halt
+TO FIX: should print message for MM_TEST GLIBC:tst-fmtmsg:6
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_HALT GLIBC:tst-fmtmsg:1
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_ERROR GLIBC:tst-fmtmsg:2
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_WARNING GLIBC:tst-fmtmsg:3
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_INFO GLIBC:tst-fmtmsg:4
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_NOSEV GLIBC:tst-fmtmsg:5
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_TEST GLIBC:tst-fmtmsg:6
+HALT: halt
+TO FIX: should print message for MM_HALT GLIBC:tst-fmtmsg:1
+ERROR: halt
+TO FIX: should print message for MM_ERROR GLIBC:tst-fmtmsg:2
+WARNING: halt
+TO FIX: should print message for MM_WARNING GLIBC:tst-fmtmsg:3
+INFO: halt
+TO FIX: should print message for MM_INFO GLIBC:tst-fmtmsg:4
+halt
+TO FIX: should print message for MM_NOSEV GLIBC:tst-fmtmsg:5
+TEST: halt
+TO FIX: should print message for MM_TEST GLIBC:tst-fmtmsg:6
+GLIBC:tst-fmtmsg: HALT: halt
+TO FIX: should print message for MM_HALT GLIBC:tst-fmtmsg:1
+GLIBC:tst-fmtmsg: ERROR: halt
+TO FIX: should print message for MM_ERROR GLIBC:tst-fmtmsg:2
+GLIBC:tst-fmtmsg: WARNING: halt
+TO FIX: should print message for MM_WARNING GLIBC:tst-fmtmsg:3
+GLIBC:tst-fmtmsg: INFO: halt
+TO FIX: should print message for MM_INFO GLIBC:tst-fmtmsg:4
+GLIBC:tst-fmtmsg: halt
+TO FIX: should print message for MM_NOSEV GLIBC:tst-fmtmsg:5
+GLIBC:tst-fmtmsg: TEST: halt
+TO FIX: should print message for MM_TEST GLIBC:tst-fmtmsg:6
+EOF
+exit $?
diff --git a/REORG.TODO/stdlib/tst-getrandom.c b/REORG.TODO/stdlib/tst-getrandom.c
new file mode 100644
index 0000000000..e84a83f248
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-getrandom.c
@@ -0,0 +1,245 @@
+/* Tests for the getentropy, getrandom functions.
+ Copyright (C) 2016-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/random.h>
+
+/* Set to true if any errors are encountered. */
+static bool errors;
+
+/* Test getrandom with a single buffer length. NB: The passed-in
+ buffer must have room for four extra bytes after the specified
+ length, which are used to test that getrandom leaves those bytes
+ unchanged. */
+static void
+test_length (char *buffer, size_t length, unsigned int flags)
+{
+ memset (buffer, 0, length);
+ strcpy (buffer + length, "123");
+ ssize_t ret = getrandom (buffer, length, flags);
+ if (ret < 0)
+ {
+ /* EAGAIN is an expected error with GRND_RANDOM and
+ GRND_NONBLOCK. */
+ if ((flags & GRND_RANDOM)
+ && (flags & GRND_NONBLOCK)
+ && errno == EAGAIN)
+ return;
+ printf ("error: getrandom (%zu, 0x%x): %m\n", length, flags);
+ errors = true;
+ return;
+ }
+ if (ret != length)
+ {
+ if (flags & GRND_RANDOM)
+ {
+ if (ret == 0 || ret > length)
+ {
+ printf ("error: getrandom (%zu, 0x%x) returned %zd\n",
+ length, flags, ret);
+ errors = true;
+ }
+ }
+ else
+ {
+ printf ("error: getrandom (%zu, 0x%x) returned %zd\n",
+ length, flags, ret);
+ errors = true;
+ }
+ }
+ if (length >= 7)
+ {
+ /* One spurious test failure in 2**56 is sufficiently
+ unlikely. */
+ int non_null = 0;
+ for (int i = 0; i < length; ++i)
+ non_null += buffer[i] != 0;
+ if (non_null == 0)
+ {
+ printf ("error: getrandom (%zu, 0x%x) returned all-zero bytes\n",
+ length, flags);
+ errors = true;
+ }
+ }
+ if (memcmp (buffer + length, "123", 4) != 0)
+ {
+ printf ("error: getrandom (%zu, 0x%x) wrote spurious bytes\n",
+ length, flags);
+ errors = true;
+ }
+}
+
+/* Call getrandom repeatedly to fill the buffer. */
+static bool
+getrandom_full (char *buffer, size_t length, unsigned int flags)
+{
+ char *end = buffer + length;
+ while (buffer < end)
+ {
+ ssize_t ret = getrandom (buffer, end - buffer, flags);
+ if (ret < 0)
+ {
+ printf ("error: getrandom (%zu, 0x%x): %m\n", length, flags);
+ errors = true;
+ return false;
+ }
+ buffer += ret;
+ }
+
+ return true;
+}
+
+static void
+test_flags (unsigned int flags)
+{
+ /* Test various lengths, but only for !GRND_RANDOM, to conserve
+ entropy. */
+ {
+ enum { max_length = 300 };
+ char buffer[max_length + 4];
+ if (flags & GRND_RANDOM)
+ test_length (buffer, 0, flags);
+ else
+ {
+ for (int length = 0; length <= 9; ++length)
+ test_length (buffer, length, flags);
+ test_length (buffer, 16, flags);
+ test_length (buffer, max_length, flags);
+ }
+ }
+
+ /* Test that getrandom returns different data. */
+ if (!(flags & GRND_NONBLOCK))
+ {
+ char buffer1[8];
+ memset (buffer1, 0, sizeof (buffer1));
+
+ char buffer2[8];
+ memset (buffer2, 0, sizeof (buffer2));
+
+ if (getrandom_full (buffer1, sizeof (buffer1), flags)
+ && getrandom_full (buffer2, sizeof (buffer2), flags))
+ {
+ /* The probability that these two 8-byte buffers are equal
+ is very small (assuming that two subsequent calls to
+ getrandom result are independent, uniformly distributed
+ random variables). */
+ if (memcmp (buffer1, buffer2, sizeof (buffer1)) == 0)
+ {
+ printf ("error: getrandom returns constant value\n");
+ errors = true;
+ }
+ }
+ }
+}
+
+static void
+test_getentropy (void)
+{
+ char buf[16];
+ memset (buf, '@', sizeof (buf));
+ if (getentropy (buf, 0) != 0)
+ {
+ printf ("error: getentropy zero length: %m\n");
+ errors = true;
+ return;
+ }
+ for (size_t i = 0; i < sizeof (buf); ++i)
+ if (buf[i] != '@')
+ {
+ printf ("error: getentropy modified zero-length buffer\n");
+ errors = true;
+ return;
+ }
+
+ if (getentropy (buf, sizeof (buf)) != 0)
+ {
+ printf ("error: getentropy buf: %m\n");
+ errors = true;
+ return;
+ }
+
+ char buf2[256];
+ _Static_assert (sizeof (buf) < sizeof (buf2), "buf and buf2 compatible");
+ memset (buf2, '@', sizeof (buf2));
+ if (getentropy (buf2, sizeof (buf)) != 0)
+ {
+ printf ("error: getentropy buf2: %m\n");
+ errors = true;
+ return;
+ }
+
+ /* The probability that these two buffers are equal is very
+ small. */
+ if (memcmp (buf, buf2, sizeof (buf) == 0))
+ {
+ printf ("error: getentropy appears to return constant bytes\n");
+ errors = true;
+ return;
+ }
+
+ for (size_t i = sizeof (buf); i < sizeof (buf2); ++i)
+ if (buf2[i] != '@')
+ {
+ printf ("error: getentropy wrote beyond the end of the buffer\n");
+ errors = true;
+ return;
+ }
+
+ char buf3[257];
+ if (getentropy (buf3, sizeof (buf3)) == 0)
+ {
+ printf ("error: getentropy successful for 257 byte buffer\n");
+ errors = true;
+ return;
+ }
+ if (errno != EIO)
+ {
+ printf ("error: getentropy wrong error for 257 byte buffer: %m\n");
+ errors = true;
+ return;
+ }
+}
+
+static int
+do_test (void)
+{
+ /* Check if getrandom is not supported by this system. */
+ if (getrandom (NULL, 0, 0) == -1 && errno == ENOSYS)
+ return 77;
+
+ for (int use_random = 0; use_random < 2; ++use_random)
+ for (int use_nonblock = 0; use_nonblock < 2; ++use_nonblock)
+ {
+ unsigned int flags = 0;
+ if (use_random)
+ flags |= GRND_RANDOM;
+ if (use_nonblock)
+ flags |= GRND_NONBLOCK;
+ test_flags (flags);
+ }
+
+ test_getentropy ();
+
+ return errors;
+}
+
+#include <support/test-driver.c>
diff --git a/REORG.TODO/stdlib/tst-limits.c b/REORG.TODO/stdlib/tst-limits.c
new file mode 100644
index 0000000000..9aabc360f6
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-limits.c
@@ -0,0 +1,72 @@
+/* It is important that this comes first to not hide effects introduced
+ by other headers. */
+#include <limits.h>
+
+#include <inttypes.h>
+#include <stdio.h>
+
+
+static long long int
+bitval (int bits)
+{
+ long long int val = 0;
+ while (bits-- > 0)
+ val |= 1ll << bits;
+ return val;
+}
+
+
+static int
+do_test (void)
+{
+ int result = 0;
+
+#define TEST(name, format, expected) \
+ printf ("%-12s expected = %-20" format " actual = %" format "\n", \
+ #name ":", expected, name); \
+ result |= name != expected
+
+ /* The limits from ISO C99. */
+
+ /* We cannot support anything but 8-bit chars. */
+ TEST (CHAR_BIT, "d", 8);
+ TEST (SCHAR_MIN, "d", -128);
+ TEST (SCHAR_MAX, "d", 127);
+ TEST (UCHAR_MAX, "d", 255);
+
+ TEST (SHRT_MIN, "d", -(1 << (sizeof (short int) * CHAR_BIT - 1)));
+ TEST (SHRT_MAX, "d", (1 << (sizeof (short int) * CHAR_BIT - 1)) - 1);
+ TEST (USHRT_MAX, "d", (1 << sizeof (short int) * CHAR_BIT) - 1);
+
+ TEST (INT_MIN, "d", (int) -bitval (sizeof (int) * CHAR_BIT - 1) - 1);
+ TEST (INT_MAX, "d", (int) bitval (sizeof (int) * CHAR_BIT - 1));
+ TEST (UINT_MAX, "u",
+ (unsigned int) bitval (sizeof (unsigned int) * CHAR_BIT));
+
+ TEST (LONG_MIN, "ld",
+ (long int) -bitval (sizeof (long int) * CHAR_BIT - 1) - 1);
+ TEST (LONG_MAX, "ld", (long int) bitval (sizeof (long int) * CHAR_BIT - 1));
+ TEST (ULONG_MAX, "lu",
+ (unsigned long int) bitval (sizeof (unsigned long int) * CHAR_BIT));
+
+ TEST (LLONG_MIN, "lld", -bitval (sizeof (long long int) * CHAR_BIT - 1) - 1);
+ TEST (LLONG_MAX, "lld", bitval (sizeof (long long int) * CHAR_BIT - 1));
+ TEST (ULLONG_MAX, "llu",
+ (unsigned long long int) bitval (sizeof (unsigned long long int)
+ * CHAR_BIT));
+
+ /* Values from POSIX and Unix. */
+#ifdef PAGESIZE
+ TEST (PAGESIZE, "d", getpagesize ());
+#elif defined (PAGE_SIZE)
+ TEST (PAGE_SIZE, "d", getpagesize ());
+#endif
+
+ TEST (WORD_BIT, "d", (int) sizeof (int) * CHAR_BIT);
+ TEST (LONG_BIT, "d", (int) sizeof (long int) * CHAR_BIT);
+
+ return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-makecontext.c b/REORG.TODO/stdlib/tst-makecontext.c
new file mode 100644
index 0000000000..d7ffad5f64
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-makecontext.c
@@ -0,0 +1,110 @@
+/* Copyright (C) 2006-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <ucontext.h>
+#include <assert.h>
+#include <unwind.h>
+#include <dlfcn.h>
+#include <gnu/lib-names.h>
+
+ucontext_t ucp;
+char st1[16384];
+__thread int thr;
+
+int somevar = -76;
+long othervar = -78L;
+
+struct trace_arg
+{
+ int cnt, size;
+};
+
+static _Unwind_Reason_Code
+backtrace_helper (struct _Unwind_Context *ctx, void *a)
+{
+ struct trace_arg *arg = a;
+ if (++arg->cnt == arg->size)
+ return _URC_END_OF_STACK;
+ return _URC_NO_REASON;
+}
+
+void
+cf (int i)
+{
+ struct trace_arg arg = { .size = 100, .cnt = -1 };
+ void *handle;
+ _Unwind_Reason_Code (*unwind_backtrace) (_Unwind_Trace_Fn, void *);
+
+ if (i != othervar || thr != 94)
+ {
+ printf ("i %d thr %d\n", i, thr);
+ exit (1);
+ }
+
+ /* Test if callback function of _Unwind_Backtrace is not called infinitely
+ times. See Bug 18508 or gcc bug "Bug 66303 - runtime.Caller() returns
+ infinitely deep stack frames on s390x.".
+ The go runtime calls backtrace_full() in
+ <gcc-src>/libbacktrace/backtrace.c, which uses _Unwind_Backtrace(). */
+ handle = dlopen (LIBGCC_S_SO, RTLD_LAZY);
+ if (handle != NULL)
+ {
+ unwind_backtrace = dlsym (handle, "_Unwind_Backtrace");
+ if (unwind_backtrace != NULL)
+ {
+ unwind_backtrace (backtrace_helper, &arg);
+ assert (arg.cnt != -1 && arg.cnt < 100);
+ }
+ dlclose (handle);
+ }
+
+ /* Since uc_link below has been set to NULL, setcontext is supposed to
+ terminate the process normally after this function returns. */
+}
+
+int
+do_test (void)
+{
+ if (getcontext (&ucp) != 0)
+ {
+ if (errno == ENOSYS)
+ {
+ puts ("context handling not supported");
+ return 0;
+ }
+
+ puts ("getcontext failed");
+ return 1;
+ }
+ thr = 94;
+ ucp.uc_link = NULL;
+ ucp.uc_stack.ss_sp = st1;
+ ucp.uc_stack.ss_size = sizeof st1;
+ makecontext (&ucp, (void (*) (void)) cf, 1, somevar - 2);
+ if (setcontext (&ucp) != 0)
+ {
+ puts ("setcontext failed");
+ return 1;
+ }
+ return 2;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-makecontext2.c b/REORG.TODO/stdlib/tst-makecontext2.c
new file mode 100644
index 0000000000..0d078279a8
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-makecontext2.c
@@ -0,0 +1,79 @@
+/* Copyright (C) 2008-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ucontext.h>
+#include <tst-stack-align.h>
+
+ucontext_t ucp, ucp2;
+char st1[262144] __attribute__((aligned (16)));
+
+void
+cf (int i, int j)
+{
+ if (i != 78 || j != 274)
+ {
+ printf ("i %d j %d\n", i, j);
+ exit (1);
+ }
+ else if (TEST_STACK_ALIGN ())
+ {
+ puts ("insufficiently aligned stack");
+ exit (2);
+ }
+}
+
+int
+do_test (void)
+{
+ for (size_t j = 32; j < 64; j += sizeof (long))
+ {
+ if (getcontext (&ucp) != 0)
+ {
+ if (errno == ENOSYS)
+ {
+ puts ("context handling not supported");
+ return 0;
+ }
+
+ puts ("getcontext failed");
+ return 1;
+ }
+ ucp.uc_link = &ucp2;
+ ucp.uc_stack.ss_sp = st1;
+ ucp.uc_stack.ss_size = sizeof (st1) - j;
+ memset (&st1[sizeof (st1) - j], 0x55, j);
+ makecontext (&ucp, (void (*) (void)) cf, 2, 78, 274);
+ if (swapcontext (&ucp2, &ucp) != 0)
+ {
+ puts ("setcontext failed");
+ return 1;
+ }
+
+ for (size_t i = j; i > 0; i--)
+ if (st1[sizeof (st1) - j + i - 1] != 0x55)
+ { printf ("fail %zd %zd\n", i, j); break; }
+ }
+
+ return 0;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-makecontext3.c b/REORG.TODO/stdlib/tst-makecontext3.c
new file mode 100644
index 0000000000..ccdeb4a282
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-makecontext3.c
@@ -0,0 +1,220 @@
+/* Copyright (C) 2001-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ucontext.h>
+#include <unistd.h>
+
+static ucontext_t ctx[3];
+
+static int was_in_f1;
+static int was_in_f2;
+
+static char st2[32768];
+
+static volatile int flag;
+
+static void
+f1 (int a00, int a01, int a02, int a03, int a04, int a05, int a06, int a07,
+ int a08, int a09, int a10, int a11, int a12, int a13, int a14, int a15,
+ int a16, int a17, int a18, int a19, int a20, int a21, int a22, int a23,
+ int a24, int a25, int a26, int a27, int a28, int a29, int a30, int a31,
+ int a32)
+{
+ printf ("start f1(a00=%08x,a01=%08x,a02=%08x,a03=%08x,\n"
+ " a04=%08x,a05=%08x,a06=%08x,a07=%08x,\n"
+ " a08=%08x,a09=%08x,a10=%08x,a11=%08x,\n"
+ " a12=%08x,a13=%08x,a14=%08x,a15=%08x,\n"
+ " a16=%08x,a17=%08x,a18=%08x,a19=%08x,\n"
+ " a20=%08x,a21=%08x,a22=%08x,a23=%08x,\n"
+ " a24=%08x,a25=%08x,a26=%08x,a27=%08x,\n"
+ " a28=%08x,a29=%08x,a30=%08x,a31=%08x,\n"
+ " a32=%08x) [%d]\n",
+ a00, a01, a02, a03, a04, a05, a06, a07,
+ a08, a09, a10, a11, a12, a13, a14, a15,
+ a16, a17, a18, a19, a20, a21, a22, a23,
+ a24, a25, a26, a27, a28, a29, a30, a31,
+ a32, flag);
+
+ if (a00 != (0x00000001 << flag) || a01 != (0x00000004 << flag)
+ || a02 != (0x00000012 << flag) || a03 != (0x00000048 << flag)
+ || a04 != (0x00000123 << flag) || a05 != (0x0000048d << flag)
+ || a06 != (0x00001234 << flag) || a07 != (0x000048d1 << flag)
+ || a08 != (0x00012345 << flag) || a09 != (0x00048d15 << flag)
+ || a10 != (0x00123456 << flag) || a11 != (0x0048d159 << flag)
+ || a12 != (0x01234567 << flag) || a13 != (0x048d159e << flag)
+ || a14 != (0x12345678 << flag) || a15 != (0x48d159e2 << flag)
+ || a16 != (0x23456789 << flag) || a17 != (0x8d159e26 << flag)
+ || a18 != (0x3456789a << flag) || a19 != (0xd159e26a << flag)
+ || a20 != (0x456789ab << flag) || a21 != (0x159e26af << flag)
+ || a22 != (0x56789abc << flag) || a23 != (0x59e26af3 << flag)
+ || a24 != (0x6789abcd << flag) || a25 != (0x9e26af37 << flag)
+ || a26 != (0x789abcde << flag) || a27 != (0xe26af37b << flag)
+ || a28 != (0x89abcdef << flag) || a29 != (0x26af37bc << flag)
+ || a30 != (0x9abcdef0 << flag) || a31 != (0x6af37bc3 << flag)
+ || a32 != (0xabcdef0f << flag))
+ {
+ puts ("arg mismatch");
+ exit (-1);
+ }
+
+ if (flag && swapcontext (&ctx[1], &ctx[2]) != 0)
+ {
+ printf ("%s: swapcontext: %m\n", __FUNCTION__);
+ exit (1);
+ }
+ printf ("finish f1 [%d]\n", flag);
+ flag++;
+ was_in_f1++;
+}
+
+static void
+f2 (void)
+{
+ puts ("start f2");
+ if (swapcontext (&ctx[2], &ctx[1]) != 0)
+ {
+ printf ("%s: swapcontext: %m\n", __FUNCTION__);
+ exit (1);
+ }
+ puts ("finish f2");
+ was_in_f2 = 1;
+}
+
+volatile int global;
+
+
+static int back_in_main;
+
+
+static void
+check_called (void)
+{
+ if (back_in_main == 0)
+ {
+ puts ("program did not reach main again");
+ _exit (1);
+ }
+}
+
+
+int
+main (void)
+{
+ atexit (check_called);
+
+ char st1[32768];
+
+ puts ("making contexts");
+ if (getcontext (&ctx[0]) != 0)
+ {
+ if (errno == ENOSYS)
+ {
+ back_in_main = 1;
+ exit (0);
+ }
+
+ printf ("%s: getcontext: %m\n", __FUNCTION__);
+ exit (1);
+ }
+
+ if (getcontext (&ctx[1]) != 0)
+ {
+ printf ("%s: getcontext: %m\n", __FUNCTION__);
+ exit (1);
+ }
+
+ ctx[1].uc_stack.ss_sp = st1;
+ ctx[1].uc_stack.ss_size = sizeof st1;
+ ctx[1].uc_link = &ctx[0];
+ errno = 0;
+ makecontext (&ctx[1], (void (*) (void)) f1, 33,
+ 0x00000001 << flag, 0x00000004 << flag,
+ 0x00000012 << flag, 0x00000048 << flag,
+ 0x00000123 << flag, 0x0000048d << flag,
+ 0x00001234 << flag, 0x000048d1 << flag,
+ 0x00012345 << flag, 0x00048d15 << flag,
+ 0x00123456 << flag, 0x0048d159 << flag,
+ 0x01234567 << flag, 0x048d159e << flag,
+ 0x12345678 << flag, 0x48d159e2 << flag,
+ 0x23456789 << flag, 0x8d159e26 << flag,
+ 0x3456789a << flag, 0xd159e26a << flag,
+ 0x456789ab << flag, 0x159e26af << flag,
+ 0x56789abc << flag, 0x59e26af3 << flag,
+ 0x6789abcd << flag, 0x9e26af37 << flag,
+ 0x789abcde << flag, 0xe26af37b << flag,
+ 0x89abcdef << flag, 0x26af37bc << flag,
+ 0x9abcdef0 << flag, 0x6af37bc3 << flag,
+ 0xabcdef0f << flag);
+
+ /* Without this check, a stub makecontext can make us spin forever. */
+ if (errno == ENOSYS)
+ {
+ puts ("makecontext not implemented");
+ back_in_main = 1;
+ return 0;
+ }
+
+ /* Play some tricks with this context. */
+ if (++global == 1)
+ if (setcontext (&ctx[1]) != 0)
+ {
+ printf ("%s: setcontext: %m\n", __FUNCTION__);
+ exit (1);
+ }
+ if (global != 2)
+ {
+ printf ("%s: 'global' not incremented twice\n", __FUNCTION__);
+ exit (1);
+ }
+
+ if (getcontext (&ctx[2]) != 0)
+ {
+ printf ("%s: second getcontext: %m\n", __FUNCTION__);
+ exit (1);
+ }
+ ctx[2].uc_stack.ss_sp = st2;
+ ctx[2].uc_stack.ss_size = sizeof st2;
+ ctx[2].uc_link = &ctx[1];
+ makecontext (&ctx[2], f2, 0);
+
+ puts ("swapping contexts");
+ if (swapcontext (&ctx[0], &ctx[2]) != 0)
+ {
+ printf ("%s: swapcontext: %m\n", __FUNCTION__);
+ exit (1);
+ }
+ puts ("back at main program");
+ back_in_main = 1;
+
+ if (was_in_f1 < 2)
+ {
+ puts ("didn't reach f1 twice");
+ exit (1);
+ }
+ if (was_in_f2 == 0)
+ {
+ puts ("didn't reach f2");
+ exit (1);
+ }
+
+ puts ("test succeeded");
+ return 0;
+}
diff --git a/REORG.TODO/stdlib/tst-putenv.c b/REORG.TODO/stdlib/tst-putenv.c
new file mode 100644
index 0000000000..47513ea42b
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-putenv.c
@@ -0,0 +1,18 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+static int
+do_test (void)
+{
+ char *p = getenv ("SOMETHING_NOBODY_USES");
+ if (p == NULL)
+ {
+ puts ("envvar not defined");
+ return 1;
+ }
+
+ return 0;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-putenvmod.c b/REORG.TODO/stdlib/tst-putenvmod.c
new file mode 100644
index 0000000000..7c0c337d3f
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-putenvmod.c
@@ -0,0 +1,17 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+void
+__attribute ((constructor))
+init (void)
+{
+ puts ("init DSO");
+
+ static char str[] = "SOMETHING_NOBODY_USES=something_else";
+ if (putenv (str) != 0)
+ {
+ puts ("putenv failed");
+ _exit (1);
+ }
+}
diff --git a/REORG.TODO/stdlib/tst-qsort.c b/REORG.TODO/stdlib/tst-qsort.c
new file mode 100644
index 0000000000..2b26e74d0b
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-qsort.c
@@ -0,0 +1,55 @@
+/* Test case by Paul Eggert <eggert@twinsun.com> */
+#include <stdio.h>
+#include <stdlib.h>
+#include <tst-stack-align.h>
+
+struct big { char c[4 * 1024]; };
+
+struct big *array;
+struct big *array_end;
+
+static int align_check;
+
+int
+compare (void const *a1, void const *b1)
+{
+ struct big const *a = a1;
+ struct big const *b = b1;
+
+ if (!align_check)
+ align_check = TEST_STACK_ALIGN () ? -1 : 1;
+
+ if (! (array <= a && a < array_end
+ && array <= b && b < array_end))
+ {
+ exit (EXIT_FAILURE);
+ }
+ return b->c[0] - a->c[0];
+}
+
+int
+main (int argc, char **argv)
+{
+ size_t i;
+ size_t array_members = argv[1] ? atoi (argv[1]) : 50;
+ array = (struct big *) malloc (array_members * sizeof *array);
+ if (array == NULL)
+ {
+ puts ("no memory");
+ exit (EXIT_FAILURE);
+ }
+
+ array_end = array + array_members;
+ for (i = 0; i < array_members; i++)
+ array[i].c[0] = i % 128;
+
+ qsort (array, array_members, sizeof *array, compare);
+
+ if (align_check == -1)
+ {
+ puts ("stack not sufficiently aligned");
+ exit (EXIT_FAILURE);
+ }
+
+ return 0;
+}
diff --git a/REORG.TODO/stdlib/tst-qsort2.c b/REORG.TODO/stdlib/tst-qsort2.c
new file mode 100644
index 0000000000..10d16852b0
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-qsort2.c
@@ -0,0 +1,89 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+char *array;
+char *array_end;
+size_t member_size;
+
+int
+compare (const void *a1, const void *b1)
+{
+ const char *a = a1;
+ const char *b = b1;
+
+ if (! (array <= a && a < array_end
+ && array <= b && b < array_end))
+ {
+ puts ("compare arguments not inside of the array");
+ exit (EXIT_FAILURE);
+ }
+ int ret = b[0] - a[0];
+ if (ret)
+ return ret;
+ if (member_size > 1)
+ return b[1] - a[1];
+ return 0;
+}
+
+int
+test (size_t nmemb, size_t size)
+{
+ array = malloc (nmemb * size);
+ if (array == NULL)
+ {
+ printf ("%zd x %zd: no memory", nmemb, size);
+ return 1;
+ }
+
+ array_end = array + nmemb * size;
+ member_size = size;
+
+ char *p;
+ size_t i;
+ size_t bias = random ();
+ for (i = 0, p = array; i < nmemb; i++, p += size)
+ {
+ p[0] = (char) (i + bias);
+ if (size > 1)
+ p[1] = (char) ((i + bias) >> 8);
+ }
+
+ qsort (array, nmemb, size, compare);
+
+ for (i = 0, p = array; i < nmemb - 1; i++, p += size)
+ {
+ if (p[0] < p[size]
+ || (size > 1 && p[0] == p[size] && p[1] < p[size + 1]))
+ {
+ printf ("%zd x %zd: failure at offset %zd\n", nmemb,
+ size, i);
+ free (array);
+ return 1;
+ }
+ }
+
+ free (array);
+ return 0;
+}
+
+int
+main (int argc, char **argv)
+{
+ int ret = 0;
+ if (argc >= 3)
+ ret |= test (atoi (argv[1]), atoi (argv[2]));
+ else
+ {
+ ret |= test (10000, 1);
+ ret |= test (200000, 2);
+ ret |= test (2000000, 3);
+ ret |= test (2132310, 4);
+ ret |= test (1202730, 7);
+ ret |= test (1184710, 8);
+ ret |= test (272710, 12);
+ ret |= test (14170, 32);
+ ret |= test (4170, 320);
+ }
+
+ return ret;
+}
diff --git a/REORG.TODO/stdlib/tst-quick_exit.cc b/REORG.TODO/stdlib/tst-quick_exit.cc
new file mode 100644
index 0000000000..b46fafed5c
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-quick_exit.cc
@@ -0,0 +1,47 @@
+/* Bug 20198: Do not call object destructors at exit.
+ Copyright (C) 2016-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+struct A
+{
+ ~A () { abort (); }
+};
+
+thread_local A a;
+
+void
+__attribute__ ((noinline, noclone))
+optimization_barrier (A &)
+{
+}
+
+static int
+do_test ()
+{
+ optimization_barrier (a);
+ /* The C++11 standard in 18.5.12 says:
+ "Objects shall not be destroyed as a result of calling
+ quick_exit."
+ If quick_exit calls the destructors the test aborts. */
+ quick_exit (0);
+ return 0;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-rand48-2.c b/REORG.TODO/stdlib/tst-rand48-2.c
new file mode 100644
index 0000000000..8b8fef4430
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-rand48-2.c
@@ -0,0 +1,116 @@
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+
+static int
+do_test (void)
+{
+ time_t t = time (NULL);
+ int i, ret = 0;
+ double d;
+ long int l;
+ struct drand48_data data;
+ unsigned short int buf[3];
+
+ srand48 ((long int) t);
+ for (i = 0; i < 50; i++)
+ if ((d = drand48 ()) < 0.0 || d >= 1.0)
+ {
+ printf ("drand48 %d %g\n", i, d);
+ ret = 1;
+ }
+
+ srand48_r ((long int) t, &data);
+ for (i = 0; i < 50; i++)
+ if (drand48_r (&data, &d) != 0 || d < 0.0 || d >= 1.0)
+ {
+ printf ("drand48_r %d %g\n", i, d);
+ ret = 1;
+ }
+
+ buf[2] = (t & 0xffff0000) >> 16; buf[1] = (t & 0xffff); buf[0] = 0x330e;
+ for (i = 0; i < 50; i++)
+ if ((d = erand48 (buf)) < 0.0 || d >= 1.0)
+ {
+ printf ("erand48 %d %g\n", i, d);
+ ret = 1;
+ }
+
+ buf[2] = (t & 0xffff0000) >> 16; buf[1] = (t & 0xffff); buf[0] = 0x330e;
+ for (i = 0; i < 50; i++)
+ if (erand48_r (buf, &data, &d) != 0 || d < 0.0 || d >= 1.0)
+ {
+ printf ("erand48_r %d %g\n", i, d);
+ ret = 1;
+ }
+
+ srand48 ((long int) t);
+ for (i = 0; i < 50; i++)
+ if ((l = lrand48 ()) < 0 || l > INT32_MAX)
+ {
+ printf ("lrand48 %d %ld\n", i, l);
+ ret = 1;
+ }
+
+ srand48_r ((long int) t, &data);
+ for (i = 0; i < 50; i++)
+ if (lrand48_r (&data, &l) != 0 || l < 0 || l > INT32_MAX)
+ {
+ printf ("lrand48_r %d %ld\n", i, l);
+ ret = 1;
+ }
+
+ buf[2] = (t & 0xffff0000) >> 16; buf[1] = (t & 0xffff); buf[0] = 0x330e;
+ for (i = 0; i < 50; i++)
+ if ((l = nrand48 (buf)) < 0 || l > INT32_MAX)
+ {
+ printf ("nrand48 %d %ld\n", i, l);
+ ret = 1;
+ }
+
+ buf[2] = (t & 0xffff0000) >> 16; buf[1] = (t & 0xffff); buf[0] = 0x330e;
+ for (i = 0; i < 50; i++)
+ if (nrand48_r (buf, &data, &l) != 0 || l < 0 || l > INT32_MAX)
+ {
+ printf ("nrand48_r %d %ld\n", i, l);
+ ret = 1;
+ }
+
+ srand48 ((long int) t);
+ for (i = 0; i < 50; i++)
+ if ((l = mrand48 ()) < INT32_MIN || l > INT32_MAX)
+ {
+ printf ("mrand48 %d %ld\n", i, l);
+ ret = 1;
+ }
+
+ srand48_r ((long int) t, &data);
+ for (i = 0; i < 50; i++)
+ if (mrand48_r (&data, &l) != 0 || l < INT32_MIN || l > INT32_MAX)
+ {
+ printf ("mrand48_r %d %ld\n", i, l);
+ ret = 1;
+ }
+
+ buf[2] = (t & 0xffff0000) >> 16; buf[1] = (t & 0xffff); buf[0] = 0x330e;
+ for (i = 0; i < 50; i++)
+ if ((l = jrand48 (buf)) < INT32_MIN || l > INT32_MAX)
+ {
+ printf ("jrand48 %d %ld\n", i, l);
+ ret = 1;
+ }
+
+ buf[2] = (t & 0xffff0000) >> 16; buf[1] = (t & 0xffff); buf[0] = 0x330e;
+ for (i = 0; i < 50; i++)
+ if (jrand48_r (buf, &data, &l) != 0 || l < INT32_MIN || l > INT32_MAX)
+ {
+ printf ("jrand48_r %d %ld\n", i, l);
+ ret = 1;
+ }
+
+ return ret;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-rand48.c b/REORG.TODO/stdlib/tst-rand48.c
new file mode 100644
index 0000000000..973c62e1eb
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-rand48.c
@@ -0,0 +1,393 @@
+#include <float.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifndef DECIMAL_DIG
+# define DECIMAL_DIG 21
+#endif
+
+
+static int
+do_test (void)
+{
+ unsigned short int xs[3] = { 0x0001, 0x0012, 0x0123 };
+ unsigned short int lxs[7];
+ unsigned short int *xsp;
+ int result = 0;
+ long int l;
+ double d;
+ double e;
+
+ /* Test srand48. */
+ srand48 (0x98765432);
+ /* Get the values of the internal Xi array. */
+ xsp = seed48 (xs);
+ if (xsp[0] != 0x330e || xsp[1] != 0x5432 || xsp[2] != 0x9876)
+ {
+ puts ("srand48(0x98765432) didn't set correct value");
+ printf (" expected: { %04hx, %04hx, %04hx }\n", 0x330e, 0x5432, 0x9876);
+ printf (" seen: { %04hx, %04hx, %04hx }\n", xsp[0], xsp[1], xsp[2]);
+ result = 1;
+ }
+ /* Put the values back. */
+ memcpy (xs, xsp, sizeof (xs));
+ (void) seed48 (xs);
+
+ /* See whether the correct values are installed. */
+ l = lrand48 ();
+ if (l != 0x2fed1413l)
+ {
+ printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x2fed1413l, l);
+ result = 1;
+ }
+
+ l = mrand48 ();
+ if (l != -0x5d73effdl)
+ {
+ printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, -0x5d73effdl, l);
+ result = 1;
+ }
+
+ l = lrand48 ();
+ if (l != 0x585fcfb7l)
+ {
+ printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x585fcfb7l, l);
+ result = 1;
+ }
+
+ l = mrand48 ();
+ if (l != -0x61770b8cl)
+ {
+ printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, -0x61770b8cl, l);
+ result = 1;
+ }
+
+ /* Test seed48. The previous call should have install the values in
+ the initialization of `xs' above. */
+ xs[0] = 0x1234;
+ xs[1] = 0x5678;
+ xs[2] = 0x9012;
+ xsp = seed48 (xs);
+ if (xsp[0] != 0x62f2 || xsp[1] != 0xf474 || xsp[2] != 0x9e88)
+ {
+ puts ("seed48() did not install the values correctly");
+ printf (" expected: { %04hx, %04hx, %04hx }\n", 0x62f2, 0xf474, 0x9e88);
+ printf (" seen: { %04hx, %04hx, %04hx }\n", xsp[0], xsp[1], xsp[2]);
+ result = 1;
+ }
+
+ /* Test lrand48 and mrand48. We continue from the seed established
+ above. */
+ l = lrand48 ();
+ if (l != 0x017e48b5l)
+ {
+ printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x017e48b5l, l);
+ result = 1;
+ }
+
+ l = mrand48 ();
+ if (l != -0x1485e05dl)
+ {
+ printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, -0x1485e05dl, l);
+ result = 1;
+ }
+
+ l = lrand48 ();
+ if (l != 0x6b6a3f95l)
+ {
+ printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x6b6a3f95l, l);
+ result = 1;
+ }
+
+ l = mrand48 ();
+ if (l != 0x175c0d6fl)
+ {
+ printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x175c0d6fl, l);
+ result = 1;
+ }
+
+ /* Test lcong48. */
+ lxs[0] = 0x4567;
+ lxs[1] = 0x6789;
+ lxs[2] = 0x8901;
+ lxs[3] = 0x0123;
+ lxs[4] = 0x2345;
+ lxs[5] = 0x1111;
+ lxs[6] = 0x2222;
+ lcong48 (lxs);
+
+ /* See whether the correct values are installed. */
+ l = lrand48 ();
+ if (l != 0x6df63d66l)
+ {
+ printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x6df63d66l, l);
+ result = 1;
+ }
+
+ l = mrand48 ();
+ if (l != 0x2f92c8e1l)
+ {
+ printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x2f92c8e1l, l);
+ result = 1;
+ }
+
+ l = lrand48 ();
+ if (l != 0x3b4869ffl)
+ {
+ printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x3b4869ffl, l);
+ result = 1;
+ }
+
+ l = mrand48 ();
+ if (l != 0x5cd4cc3el)
+ {
+ printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x5cd4cc3el, l);
+ result = 1;
+ }
+
+ /* Check whether srand48() restores the A and C parameters. */
+ srand48 (0x98765432);
+
+ /* See whether the correct values are installed. */
+ l = lrand48 ();
+ if (l != 0x2fed1413l)
+ {
+ printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x2fed1413l, l);
+ result = 1;
+ }
+
+ l = mrand48 ();
+ if (l != -0x5d73effdl)
+ {
+ printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, -0x5d73effdl, l);
+ result = 1;
+ }
+
+ l = lrand48 ();
+ if (l != 0x585fcfb7l)
+ {
+ printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x585fcfb7l, l);
+ result = 1;
+ }
+
+ l = mrand48 ();
+ if (l != -0x61770b8cl)
+ {
+ printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, -0x61770b8cl, l);
+ result = 1;
+ }
+
+ /* And again to see whether seed48() does the same. */
+ lcong48 (lxs);
+
+ /* See whether lxs wasn't modified. */
+ l = lrand48 ();
+ if (l != 0x6df63d66l)
+ {
+ printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x6df63d66l, l);
+ result = 1;
+ }
+
+ /* Test seed48. The previous call should have install the values in
+ the initialization of `xs' above. */
+ xs[0] = 0x1234;
+ xs[1] = 0x5678;
+ xs[2] = 0x9012;
+ xsp = seed48 (xs);
+ if (xsp[0] != 0x0637 || xsp[1] != 0x7acd || xsp[2] != 0xdbec)
+ {
+ puts ("seed48() did not install the values correctly");
+ printf (" expected: { %04hx, %04hx, %04hx }\n", 0x0637, 0x7acd, 0xdbec);
+ printf (" seen: { %04hx, %04hx, %04hx }\n", xsp[0], xsp[1], xsp[2]);
+ result = 1;
+ }
+
+ /* Test lrand48 and mrand48. We continue from the seed established
+ above. */
+ l = lrand48 ();
+ if (l != 0x017e48b5l)
+ {
+ printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x017e48b5l, l);
+ result = 1;
+ }
+
+ l = mrand48 ();
+ if (l != -0x1485e05dl)
+ {
+ printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, -0x1485e05dl, l);
+ result = 1;
+ }
+
+ l = lrand48 ();
+ if (l != 0x6b6a3f95l)
+ {
+ printf ("lrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x6b6a3f95l, l);
+ result = 1;
+ }
+
+ l = mrand48 ();
+ if (l != 0x175c0d6fl)
+ {
+ printf ("mrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x175c0d6fl, l);
+ result = 1;
+ }
+
+ /* Test drand48. */
+ d = drand48 ();
+ if (d != 0.0908832261858485424)
+ {
+ printf ("drand48() in line %d failed: expected %.*g, seen %.*g\n",
+ __LINE__ - 4, DECIMAL_DIG, 0.0908832261858485424,
+ DECIMAL_DIG, d);
+ result = 1;
+ }
+
+ d = drand48 ();
+ if (d != 0.943149381730059133133)
+ {
+ printf ("drand48() in line %d failed: expected %.*g, seen %.*g\n",
+ __LINE__ - 4, DECIMAL_DIG, 0.943149381730059133133,
+ DECIMAL_DIG, d);
+ result = 1;
+ }
+
+ /* Now the functions which get the Xis passed. */
+ xs[0] = 0x3849;
+ xs[1] = 0x5061;
+ xs[2] = 0x7283;
+
+ l = nrand48 (xs);
+ if (l != 0x1efe61a1l)
+ {
+ printf ("nrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x1efe61a1l, l);
+ result = 1;
+ }
+
+ l = jrand48 (xs);
+ if (l != -0xa973860l)
+ {
+ printf ("jrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, -0xa973860l, l);
+ result = 1;
+ }
+
+ l = nrand48 (xs);
+ if (l != 0x2a5e57fel)
+ {
+ printf ("nrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x2a5e57fel, l);
+ result = 1;
+ }
+
+ l = jrand48 (xs);
+ if (l != 0x71a779a8l)
+ {
+ printf ("jrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x71a779a8l, l);
+ result = 1;
+ }
+
+ /* Test whether the global A and C are used. */
+ lcong48 (lxs);
+
+ l = nrand48 (xs);
+ if (l != 0x32beee9fl)
+ {
+ printf ("nrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x32beee9fl, l);
+ result = 1;
+ }
+
+ l = jrand48 (xs);
+ if (l != 0x7bddf3bal)
+ {
+ printf ("jrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x7bddf3bal, l);
+ result = 1;
+ }
+
+ l = nrand48 (xs);
+ if (l != 0x85bdf28l)
+ {
+ printf ("nrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x85bdf28l, l);
+ result = 1;
+ }
+
+ l = jrand48 (xs);
+ if (l != 0x7b433e47l)
+ {
+ printf ("jrand48() in line %d failed: expected %lx, seen %lx\n",
+ __LINE__ - 4, 0x7b433e47l, l);
+ result = 1;
+ }
+
+ /* Test erand48. Also compare with the drand48 results. */
+ (void) seed48 (xs);
+
+ d = drand48 ();
+ e = erand48 (xs);
+ if (d != e)
+ {
+ printf ("\
+drand48() and erand48 in lines %d and %d produce different results\n",
+ __LINE__ - 6, __LINE__ - 5);
+ printf (" drand48() = %g, erand48() = %g\n", d, e);
+ result = 1;
+ }
+ else if (e != 0.640650904452755298735)
+ {
+ printf ("erand48() in line %d failed: expected %.*g, seen %.*g\n",
+ __LINE__ - 4, DECIMAL_DIG, 0.640650904452755298735,
+ DECIMAL_DIG, e);
+ result = 1;
+
+ }
+
+ d = drand48 ();
+ e = erand48 (xs);
+ if (d != e)
+ {
+ printf ("\
+drand48() and erand48 in lines %d and %d produce different results\n",
+ __LINE__ - 6, __LINE__ - 5);
+ printf (" drand48() = %g, erand48() = %g\n", d, e);
+ result = 1;
+ }
+ else if (e != 0.115372323508150742555)
+ {
+ printf ("erand48() in line %d failed: expected %.*g, seen %.*g\n",
+ __LINE__ - 4, DECIMAL_DIG, 0.0115372323508150742555,
+ DECIMAL_DIG, e);
+ result = 1;
+
+ }
+
+ return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-random.c b/REORG.TODO/stdlib/tst-random.c
new file mode 100644
index 0000000000..8fe0993dd7
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-random.c
@@ -0,0 +1,122 @@
+/* Test program for random(), srandom(), initstate(), setstate()
+ Written by Michael J. Fischer, August 21, 2000
+ Placed in the public domain. */
+
+/* This program primarily tests the correct functioning of srandom()
+ and setstate(). The strategy is generate and store a set of random
+ sequences, each with a specified starting seed. Then each sequence
+ is regenerated twice and checked against the stored values.
+
+ First they are regenerated one sequence at a time, using srandom()
+ to set the initial state. A discrepency here would suggest that
+ srandom() was failing to completely initialize the random number
+ generator.
+
+ Second the sequences are regenerated in an interleaved order.
+ A state vector is created for each sequence using initstate().
+ setstate() is used to switch from sequence to sequence during
+ the interleaved generation. A discrepency here would suggest
+ a problem with either initstate() failing to initialize the
+ random number generator properly, or the failure of setstate()
+ to correctly save and restore state information. Also, each
+ time setstate() is called, the returned value is checked for
+ correctness (since we know what it should be).
+
+ Note: We use default state vector for sequence 0 and our own
+ state vectors for the remaining sequences. This is to give a check
+ that the value returned by initstate() is valid and can indeed be
+ used in the future. */
+
+/* Strategy:
+ 1. Use srandom() followed by calls on random to generate a set of
+ sequences of values.
+ 2. Regenerate and check the sequences.
+ 3. Use initstate() to create new states.
+ 4. Regenerate the sequences in an interleaved manner and check.
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+
+const int degree = 128; /* random number generator degree (should
+ be one of 8, 16, 32, 64, 128, 256) */
+const int nseq = 3; /* number of test sequences */
+const int nrnd = 50; /* length of each test sequence */
+const unsigned int seed[3] = { 0x12344321U, 0xEE11DD22U, 0xFEDCBA98 };
+
+void fail (const char *msg, int s, int i) __attribute__ ((__noreturn__));
+
+static int
+do_test (void)
+{
+ long int rnd[nseq][nrnd]; /* pseudorandom numbers */
+ char* state[nseq]; /* state for PRNG */
+ char* oldstate[nseq]; /* old PRNG state */
+ int s; /* sequence index */
+ int i; /* element index */
+
+ printf ("Begining random package test using %d sequences of length %d.\n",
+ nseq, nrnd);
+
+ /* 1. Generate and store the sequences. */
+ printf ("Generating random sequences.\n");
+ for (s = 0; s < nseq; ++s)
+ {
+ srandom ( seed[s] );
+ for (i = 0; i < nrnd; ++i)
+ rnd[s][i] = random ();
+ }
+
+ /* 2. Regenerate and check. */
+ printf ("Regenerating and checking sequences.\n");
+ for (s = 0; s < nseq; ++s)
+ {
+ srandom (seed[s]);
+ for (i = 0; i < nrnd; ++i)
+ if (rnd[s][i] != random ())
+ fail ("first regenerate test", s, i);
+ }
+
+ /* 3. Create state vector, one for each sequence.
+ First state is random's internal state; others are malloced. */
+ printf ("Creating and checking state vector for each sequence.\n");
+ srandom (seed[0]); /* reseed with first seed */
+ for (s = 1; s < nseq; ++s)
+ {
+ state[s] = (char*) malloc (degree);
+ oldstate[s] = initstate (seed[s], state[s], degree);
+ }
+ state[0] = oldstate[1];
+
+ /* Check returned values. */
+ for (s = 1; s < nseq - 1; ++s)
+ if (state[s] != oldstate[s + 1])
+ fail ("bad initstate() return value", s, i);
+
+ /* 4. Regenerate sequences interleaved and check. */
+ printf ("Regenerating and checking sequences in interleaved order.\n");
+ for (i = 0; i < nrnd; ++i)
+ {
+ for (s = 0; s < nseq; ++s)
+ {
+ char *oldstate = (char *) setstate (state[s]);
+ if (oldstate != state[(s + nseq - 1) % nseq])
+ fail ("bad setstate() return value", s, i);
+ if (rnd[s][i] != random ())
+ fail ("bad value generated in interleave test", s, i);
+ }
+ }
+ printf ("All tests passed!\n");
+ return 0;
+}
+
+void
+fail (const char *msg, int s, int i)
+{
+ printf ("\nTest FAILED: ");
+ printf ("%s (seq %d, pos %d).\n", msg, s, i);
+ exit (1);
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-random2.c b/REORG.TODO/stdlib/tst-random2.c
new file mode 100644
index 0000000000..093e16879c
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-random2.c
@@ -0,0 +1,61 @@
+/* Test initstate saving the old state.
+ Copyright (C) 2005-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Jakub Jelinek <jakub@redhat.com>, 2005.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+static int
+do_test (void)
+{
+ int pass;
+ int ret = 0;
+ long int r[2];
+
+ for (pass = 0; pass < 2; pass++)
+ {
+ srandom (0x12344321);
+
+ int j;
+ for (j = 0; j < 3; ++j)
+ random ();
+ if (pass == 1)
+ {
+ char state[128];
+ char *ostate = initstate (0x34562101, state, 128);
+ if (setstate (ostate) != state)
+ {
+ puts ("setstate (ostate) != state");
+ ret = 1;
+ }
+ }
+
+ random ();
+ r[pass] = random ();
+ }
+
+ if (r[0] != r[1])
+ {
+ printf ("%ld != %ld\n", r[0], r[1]);
+ ret = 1;
+ }
+ return ret;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-secure-getenv.c b/REORG.TODO/stdlib/tst-secure-getenv.c
new file mode 100644
index 0000000000..2705cf9c5b
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-secure-getenv.c
@@ -0,0 +1,242 @@
+/* Copyright (C) 2012-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+/* Test that secure_getenv works by invoking the test as a SGID
+ program with a group ID from the supplementary group list. This
+ test can fail spuriously if the user is not a member of a suitable
+ supplementary group. */
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+#include <support/support.h>
+#include <support/test-driver.h>
+
+static char MAGIC_ARGUMENT[] = "run-actual-test";
+#define MAGIC_STATUS 19
+
+/* Return a GID which is not our current GID, but is present in the
+ supplementary group list. */
+static gid_t
+choose_gid (void)
+{
+ const int count = 64;
+ gid_t groups[count];
+ int ret = getgroups (count, groups);
+ if (ret < 0)
+ {
+ printf ("getgroups: %m\n");
+ exit (1);
+ }
+ gid_t current = getgid ();
+ for (int i = 0; i < ret; ++i)
+ {
+ if (groups[i] != current)
+ return groups[i];
+ }
+ return 0;
+}
+
+
+/* Copies the executable into a restricted directory, so that we can
+ safely make it SGID with the TARGET group ID. Then runs the
+ executable. */
+static int
+run_executable_sgid (gid_t target)
+{
+ char *dirname = xasprintf ("%s/secure-getenv.%jd",
+ test_dir, (intmax_t) getpid ());
+ char *execname = xasprintf ("%s/bin", dirname);
+ int infd = -1;
+ int outfd = -1;
+ int ret = -1;
+ if (mkdir (dirname, 0700) < 0)
+ {
+ printf ("mkdir: %m\n");
+ goto err;
+ }
+ infd = open ("/proc/self/exe", O_RDONLY);
+ if (infd < 0)
+ {
+ printf ("open (/proc/self/exe): %m\n");
+ goto err;
+ }
+ outfd = open (execname, O_WRONLY | O_CREAT | O_EXCL, 0700);
+ if (outfd < 0)
+ {
+ printf ("open (%s): %m\n", execname);
+ goto err;
+ }
+ char buf[4096];
+ for (;;)
+ {
+ ssize_t rdcount = read (infd, buf, sizeof (buf));
+ if (rdcount < 0)
+ {
+ printf ("read: %m\n");
+ goto err;
+ }
+ if (rdcount == 0)
+ break;
+ char *p = buf;
+ char *end = buf + rdcount;
+ while (p != end)
+ {
+ ssize_t wrcount = write (outfd, buf, end - p);
+ if (wrcount == 0)
+ errno = ENOSPC;
+ if (wrcount <= 0)
+ {
+ printf ("write: %m\n");
+ goto err;
+ }
+ p += wrcount;
+ }
+ }
+ if (fchown (outfd, getuid (), target) < 0)
+ {
+ printf ("fchown (%s): %m\n", execname);
+ goto err;
+ }
+ if (fchmod (outfd, 02750) < 0)
+ {
+ printf ("fchmod (%s): %m\n", execname);
+ goto err;
+ }
+ if (close (outfd) < 0)
+ {
+ printf ("close (outfd): %m\n");
+ goto err;
+ }
+ if (close (infd) < 0)
+ {
+ printf ("close (infd): %m\n");
+ goto err;
+ }
+
+ int kid = fork ();
+ if (kid < 0)
+ {
+ printf ("fork: %m\n");
+ goto err;
+ }
+ if (kid == 0)
+ {
+ /* Child process. */
+ char *args[] = { execname, MAGIC_ARGUMENT, NULL };
+ execve (execname, args, environ);
+ printf ("execve (%s): %m\n", execname);
+ _exit (1);
+ }
+ int status;
+ if (waitpid (kid, &status, 0) < 0)
+ {
+ printf ("waitpid: %m\n");
+ goto err;
+ }
+ if (!WIFEXITED (status) || WEXITSTATUS (status) != MAGIC_STATUS)
+ {
+ printf ("Unexpected exit status %d from child process\n",
+ status);
+ goto err;
+ }
+ ret = 0;
+
+err:
+ if (outfd >= 0)
+ close (outfd);
+ if (infd >= 0)
+ close (infd);
+ if (execname)
+ {
+ unlink (execname);
+ free (execname);
+ }
+ if (dirname)
+ {
+ rmdir (dirname);
+ free (dirname);
+ }
+ return ret;
+}
+
+static int
+do_test (void)
+{
+ if (getenv ("PATH") == NULL)
+ {
+ printf ("PATH not set\n");
+ exit (1);
+ }
+ if (secure_getenv ("PATH") == NULL)
+ {
+ printf ("PATH not set according to secure_getenv\n");
+ exit (1);
+ }
+ if (strcmp (getenv ("PATH"), secure_getenv ("PATH")) != 0)
+ {
+ printf ("PATH mismatch (%s, %s)\n",
+ getenv ("PATH"), secure_getenv ("PATH"));
+ exit (1);
+ }
+
+ gid_t target = choose_gid ();
+ if (target == 0)
+ {
+ fprintf (stderr,
+ "Could not find a suitable GID for user %jd, skipping test\n",
+ (intmax_t) getuid ());
+ exit (0);
+ }
+ return run_executable_sgid (target);
+}
+
+static void
+alternative_main (int argc, char **argv)
+{
+ if (argc == 2 && strcmp (argv[1], MAGIC_ARGUMENT) == 0)
+ {
+ if (getgid () == getegid ())
+ {
+ /* This can happen if the file system is mounted nosuid. */
+ fprintf (stderr, "SGID failed: GID and EGID match (%jd)\n",
+ (intmax_t) getgid ());
+ exit (MAGIC_STATUS);
+ }
+ if (getenv ("PATH") == NULL)
+ {
+ printf ("PATH variable not present\n");
+ exit (3);
+ }
+ if (secure_getenv ("PATH") != NULL)
+ {
+ printf ("PATH variable not filtered out\n");
+ exit (4);
+ }
+ exit (MAGIC_STATUS);
+ }
+}
+
+#define PREPARE alternative_main
+#include <support/test-driver.c>
diff --git a/REORG.TODO/stdlib/tst-setcontext.c b/REORG.TODO/stdlib/tst-setcontext.c
new file mode 100644
index 0000000000..20b2ff6f3b
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-setcontext.c
@@ -0,0 +1,244 @@
+/* Copyright (C) 2001-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ucontext.h>
+#include <unistd.h>
+
+static ucontext_t ctx[3];
+
+static int was_in_f1;
+static int was_in_f2;
+
+static char st2[32768];
+
+static void
+f1 (int a0, int a1, int a2, int a3)
+{
+ printf ("start f1(a0=%x,a1=%x,a2=%x,a3=%x)\n", a0, a1, a2, a3);
+
+ if (a0 != 1 || a1 != 2 || a2 != 3 || a3 != -4)
+ {
+ puts ("arg mismatch");
+ exit (-1);
+ }
+
+ if (swapcontext (&ctx[1], &ctx[2]) != 0)
+ {
+ printf ("%s: swapcontext: %m\n", __FUNCTION__);
+ exit (1);
+ }
+ puts ("finish f1");
+ was_in_f1 = 1;
+}
+
+static void
+f2 (void)
+{
+ char on_stack[1];
+
+ puts ("start f2");
+
+ printf ("&on_stack=%p\n", on_stack);
+ if (on_stack < st2 || on_stack >= st2 + sizeof (st2))
+ {
+ printf ("%s: memory stack is not where it belongs!", __FUNCTION__);
+ exit (1);
+ }
+
+ if (swapcontext (&ctx[2], &ctx[1]) != 0)
+ {
+ printf ("%s: swapcontext: %m\n", __FUNCTION__);
+ exit (1);
+ }
+ puts ("finish f2");
+ was_in_f2 = 1;
+}
+
+void
+test_stack (volatile int a, volatile int b,
+ volatile int c, volatile int d)
+{
+ volatile int e = 5;
+ volatile int f = 6;
+ ucontext_t uc;
+
+ /* Test for cases where getcontext is clobbering the callers
+ stack, including parameters. */
+ getcontext (&uc);
+
+ if (a != 1)
+ {
+ printf ("%s: getcontext clobbers parm a\n", __FUNCTION__);
+ exit (1);
+ }
+
+ if (b != 2)
+ {
+ printf ("%s: getcontext clobbers parm b\n", __FUNCTION__);
+ exit (1);
+ }
+
+ if (c != 3)
+ {
+ printf ("%s: getcontext clobbers parm c\n", __FUNCTION__);
+ exit (1);
+ }
+
+ if (d != 4)
+ {
+ printf ("%s: getcontext clobbers parm d\n", __FUNCTION__);
+ exit (1);
+ }
+
+ if (e != 5)
+ {
+ printf ("%s: getcontext clobbers varible e\n", __FUNCTION__);
+ exit (1);
+ }
+
+ if (f != 6)
+ {
+ printf ("%s: getcontext clobbers variable f\n", __FUNCTION__);
+ exit (1);
+ }
+}
+
+volatile int global;
+
+
+static int back_in_main;
+
+
+static void
+check_called (void)
+{
+ if (back_in_main == 0)
+ {
+ puts ("program did not reach main again");
+ _exit (1);
+ }
+}
+
+
+int
+main (void)
+{
+ atexit (check_called);
+
+ char st1[32768];
+ stack_t stack_before, stack_after;
+
+ sigaltstack (NULL, &stack_before);
+
+ puts ("making contexts");
+ if (getcontext (&ctx[1]) != 0)
+ {
+ if (errno == ENOSYS)
+ {
+ back_in_main = 1;
+ exit (0);
+ }
+
+ printf ("%s: getcontext: %m\n", __FUNCTION__);
+ exit (1);
+ }
+
+ test_stack (1, 2, 3, 4);
+
+ /* Play some tricks with this context. */
+ if (++global == 1)
+ if (setcontext (&ctx[1]) != 0)
+ {
+ printf ("%s: setcontext: %m\n", __FUNCTION__);
+ exit (1);
+ }
+ if (global != 2)
+ {
+ printf ("%s: 'global' not incremented twice\n", __FUNCTION__);
+ exit (1);
+ }
+
+ ctx[1].uc_stack.ss_sp = st1;
+ ctx[1].uc_stack.ss_size = sizeof st1;
+ ctx[1].uc_link = &ctx[0];
+ {
+ ucontext_t tempctx = ctx[1];
+ makecontext (&ctx[1], (void (*) (void)) f1, 4, 1, 2, 3, -4);
+
+ /* Without this check, a stub makecontext can make us spin forever. */
+ if (memcmp (&tempctx, &ctx[1], sizeof ctx[1]) == 0)
+ {
+ puts ("makecontext was a no-op, presuming not implemented");
+ return 0;
+ }
+ }
+
+ if (getcontext (&ctx[2]) != 0)
+ {
+ printf ("%s: second getcontext: %m\n", __FUNCTION__);
+ exit (1);
+ }
+ ctx[2].uc_stack.ss_sp = st2;
+ ctx[2].uc_stack.ss_size = sizeof st2;
+ ctx[2].uc_link = &ctx[1];
+ makecontext (&ctx[2], f2, 0);
+
+ puts ("swapping contexts");
+ if (swapcontext (&ctx[0], &ctx[2]) != 0)
+ {
+ printf ("%s: swapcontext: %m\n", __FUNCTION__);
+ exit (1);
+ }
+ puts ("back at main program");
+ back_in_main = 1;
+
+ sigaltstack (NULL, &stack_after);
+
+ if (was_in_f1 == 0)
+ {
+ puts ("didn't reach f1");
+ exit (1);
+ }
+ if (was_in_f2 == 0)
+ {
+ puts ("didn't reach f2");
+ exit (1);
+ }
+
+ /* Check sigaltstack state is not clobbered as in BZ #16629. */
+ if (stack_before.ss_sp != stack_after.ss_sp)
+ {
+ printf ("stack ss_sp mismatch: %p %p\n",
+ stack_before.ss_sp, stack_after.ss_sp);
+ exit (1);
+ }
+
+ if (stack_before.ss_size != stack_after.ss_size)
+ {
+ printf ("stack ss_size mismatch: %zd %zd\n",
+ stack_before.ss_size, stack_after.ss_size);
+ exit (1);
+ }
+
+ puts ("test succeeded");
+ return 0;
+}
diff --git a/REORG.TODO/stdlib/tst-setcontext2.c b/REORG.TODO/stdlib/tst-setcontext2.c
new file mode 100644
index 0000000000..07fb974c46
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-setcontext2.c
@@ -0,0 +1,230 @@
+/* Testcase checks, if setcontext(), swapcontext() restores signal-mask
+ and if pending signals are delivered after those calls.
+ Copyright (C) 2015-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <signal.h>
+#include <ucontext.h>
+#include <unistd.h>
+
+volatile int global;
+volatile sig_atomic_t handlerCalled;
+
+static void
+check (const char *funcName)
+{
+ sigset_t set;
+
+ /* check if SIGUSR2 is unblocked after setcontext-call. */
+ sigprocmask (SIG_BLOCK, NULL, &set);
+
+ if (sigismember (&set, SIGUSR2) != 0)
+ {
+ printf ("FAIL: SIGUSR2 is blocked after %s.\n", funcName);
+ exit (1);
+ }
+
+ if (sigismember (&set, SIGUSR1) != 1)
+ {
+ printf ("FAIL: SIGUSR1 is not blocked after %s.\n", funcName);
+ exit (1);
+ }
+}
+
+static void
+signalmask (int how, int signum)
+{
+ sigset_t set;
+ sigemptyset (&set);
+ sigaddset (&set, signum);
+ if (sigprocmask (how, &set, NULL) != 0)
+ {
+ printf ("FAIL: sigprocmaks (%d, %d, NULL): %m\n", how, signum);
+ exit (1);
+ }
+}
+
+static void
+signalpending (int signum, const char *msg)
+{
+ sigset_t set;
+ sigemptyset (&set);
+ if (sigpending (&set) != 0)
+ {
+ printf ("FAIL: sigpending: %m\n");
+ exit (1);
+ }
+ if (sigismember (&set, SIGUSR2) != 1)
+ {
+ printf ("FAIL: Signal %d is not pending %s\n", signum, msg);
+ exit (1);
+ }
+}
+
+static void
+handler (int __attribute__ ((unused)) signum)
+{
+ handlerCalled ++;
+}
+
+static int
+do_test (void)
+{
+ ucontext_t ctx, oldctx;
+ struct sigaction action;
+ pid_t pid;
+
+ pid = getpid ();
+
+ /* unblock SIGUSR2 */
+ signalmask (SIG_UNBLOCK, SIGUSR2);
+
+ /* block SIGUSR1 */
+ signalmask (SIG_BLOCK, SIGUSR1);
+
+ /* register handler for SIGUSR2 */
+ action.sa_flags = 0;
+ action.sa_handler = handler;
+ sigemptyset (&action.sa_mask);
+ sigaction (SIGUSR2, &action, NULL);
+
+ if (getcontext (&ctx) != 0)
+ {
+ printf ("FAIL: getcontext: %m\n");
+ exit (1);
+ }
+
+ global++;
+
+ if (global == 1)
+ {
+ puts ("after getcontext");
+
+ /* block SIGUSR2 */
+ signalmask (SIG_BLOCK, SIGUSR2);
+
+ /* send SIGUSR2 to me */
+ handlerCalled = 0;
+ kill (pid, SIGUSR2);
+
+ /* was SIGUSR2 handler called? */
+ if (handlerCalled != 0)
+ {
+ puts ("FAIL: signal handler was called, but signal was blocked.");
+ exit (1);
+ }
+
+ /* is SIGUSR2 pending? */
+ signalpending (SIGUSR2, "before setcontext");
+
+ /* SIGUSR2 will be unblocked by setcontext-call. */
+ if (setcontext (&ctx) != 0)
+ {
+ printf ("FAIL: setcontext: %m\n");
+ exit (1);
+ }
+ }
+ else if (global == 2)
+ {
+ puts ("after setcontext");
+
+ /* check SIGUSR1/2 */
+ check ("setcontext");
+
+ /* was SIGUSR2 handler called? */
+ if (handlerCalled != 1)
+ {
+ puts ("FAIL: signal handler was not called after setcontext.");
+ exit (1);
+ }
+
+ /* block SIGUSR2 */
+ signalmask (SIG_BLOCK, SIGUSR2);
+
+ /* send SIGUSR2 to me */
+ handlerCalled = 0;
+ kill (pid, SIGUSR2);
+
+ /* was SIGUSR2 handler called? */
+ if (handlerCalled != 0)
+ {
+ puts ("FAIL: signal handler was called, but signal was blocked.");
+ exit (1);
+ }
+
+ /* is SIGUSR2 pending? */
+ signalpending (SIGUSR2, "before swapcontext");
+
+ if (swapcontext (&oldctx, &ctx) != 0)
+ {
+ printf ("FAIL: swapcontext: %m\n");
+ exit (1);
+ }
+
+ puts ("after returned from swapcontext");
+
+ if (global != 3)
+ {
+ puts ("FAIL: returned from swapcontext without ctx-context called.");
+ exit (1);
+ }
+
+ puts ("test succeeded");
+ return 0;
+ }
+ else if ( global != 3 )
+ {
+ puts ("FAIL: 'global' not incremented three times");
+ exit (1);
+ }
+
+ puts ("after swapcontext");
+ /* check SIGUSR1/2 */
+ check ("swapcontext");
+
+ /* was SIGUSR2 handler called? */
+ if (handlerCalled != 1)
+ {
+ puts ("FAIL: signal handler was not called after swapcontext.");
+ exit (1);
+ }
+
+ /* check sigmask in old context of swapcontext-call */
+ if (sigismember (&oldctx.uc_sigmask, SIGUSR2) != 1)
+ {
+ puts ("FAIL: SIGUSR2 is not blocked in oldctx.uc_sigmask.");
+ exit (1);
+ }
+
+ if (sigismember (&oldctx.uc_sigmask, SIGUSR1) != 1)
+ {
+ puts ("FAIL: SIGUSR1 is not blocked in oldctx.uc_sigmaks.");
+ exit (1);
+ }
+
+ /* change to old context, which was gathered by swapcontext() call. */
+ setcontext (&oldctx);
+
+ puts ("FAIL: returned from setcontext (&oldctx)");
+ exit (1);
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-setcontext3.c b/REORG.TODO/stdlib/tst-setcontext3.c
new file mode 100644
index 0000000000..414a9a7f41
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-setcontext3.c
@@ -0,0 +1,138 @@
+/* Bug 18125: Verify setcontext calls exit() and not _exit().
+ Copyright (C) 2015-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ucontext.h>
+#include <unistd.h>
+#include <limits.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+/* Please note that depending on the outcome of Bug 18135 this test
+ may become invalid, and instead of testing for calling exit it
+ should be reworked to test for the last context calling
+ pthread_exit(). */
+
+static ucontext_t ctx;
+static char *filename;
+
+/* It is intended that this function does nothing. */
+static void
+cf (void)
+{
+ printf ("called context function\n");
+}
+
+static void
+exit_called (void)
+{
+ int fd;
+ ssize_t res;
+ const char buf[] = "Called exit function\n";
+
+ fd = open (filename, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR);
+ if (fd == -1)
+ {
+ printf ("FAIL: Unable to create test file %s\n", filename);
+ exit (1);
+ }
+ res = write (fd, buf, sizeof (buf));
+ if (res != sizeof (buf))
+ {
+ printf ("FAIL: Expected to write test file in one write call.\n");
+ exit (1);
+ }
+ res = close (fd);
+ if (res == -1)
+ {
+ printf ("FAIL: Failed to close test file.\n");
+ exit (1);
+ }
+ printf ("PASS: %s", buf);
+}
+
+/* The test expects a filename given by the wrapper calling script.
+ The test then registers an atexit handler that will create the
+ file to indicate that the atexit handler ran. Then the test
+ creates a context, modifies it with makecontext, and sets it.
+ The context has only a single context which then must exit.
+ If it incorrectly exits via _exit then the atexit handler is
+ not run, the file is not created, and the wrapper detects this
+ and fails the test. This test cannot be done using an _exit
+ interposer since setcontext avoids the PLT and calls _exit
+ directly. */
+static int
+do_test (int argc, char **argv)
+{
+ int ret;
+ char st1[32768];
+ ucontext_t tempctx = ctx;
+
+ if (argc < 2)
+ {
+ printf ("FAIL: Test missing filename argument.\n");
+ exit (1);
+ }
+
+ filename = argv[1];
+
+ atexit (exit_called);
+
+ puts ("making contexts");
+ if (getcontext (&ctx) != 0)
+ {
+ if (errno == ENOSYS)
+ {
+ /* Exit with 77 to mark the test as UNSUPPORTED. */
+ printf ("UNSUPPORTED: getcontext not implemented.\n");
+ exit (77);
+ }
+
+ printf ("FAIL: getcontext failed.\n");
+ exit (1);
+ }
+
+ ctx.uc_stack.ss_sp = st1;
+ ctx.uc_stack.ss_size = sizeof (st1);
+ ctx.uc_link = 0;
+ makecontext (&ctx, cf, 0);
+
+ /* Without this check, a stub makecontext can make us spin forever. */
+ if (memcmp (&tempctx, &ctx, sizeof ctx) == 0)
+ {
+ puts ("UNSUPPORTED: makecontext was a no-op, presuming not implemented");
+ exit (77);
+ }
+
+ ret = setcontext (&ctx);
+ if (ret != 0)
+ {
+ printf ("FAIL: setcontext returned with %d and errno of %d.\n", ret, errno);
+ exit (1);
+ }
+
+ printf ("FAIL: Impossibly returned to main.\n");
+ exit (1);
+}
+
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-setcontext3.sh b/REORG.TODO/stdlib/tst-setcontext3.sh
new file mode 100644
index 0000000000..158d0dc0a8
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-setcontext3.sh
@@ -0,0 +1,52 @@
+#!/bin/sh
+# Bug 18125: Test the exit functionality of setcontext().
+# Copyright (C) 2015-2017 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, see
+# <http://www.gnu.org/licenses/>.
+
+set -e
+
+common_objpfx=$1
+test_program_prefix_before_env=$2
+run_program_env=$3
+test_program_prefix_after_env=$4
+objpfx=$5
+
+test_pre="${test_program_prefix_before_env} ${run_program_env}"
+test="${test_program_prefix_after_env} ${objpfx}tst-setcontext3"
+out=${objpfx}tst-setcontext3.out
+
+cleanup() {
+ rm -f $tempfile
+}
+trap cleanup 0
+
+tempfile=$(mktemp "tst-setcontext3.XXXXXXXXXX")
+
+# We want to run the test program and see if secontext called
+# exit() and wrote out the test file we specified. If the
+# test exits with a non-zero status this will fail because we
+# are using `set -e`.
+$test_pre $test "$tempfile"
+
+# Look for resulting file.
+if [ -e "$tempfile" ]; then
+ echo "PASS: tst-setcontext3 an exit() and created $tempfile"
+ exit 0
+else
+ echo "FAIL: tst-setcontext3 did not create $tempfile"
+ exit 1
+fi
diff --git a/REORG.TODO/stdlib/tst-strfmon_l.c b/REORG.TODO/stdlib/tst-strfmon_l.c
new file mode 100644
index 0000000000..49fa31907e
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strfmon_l.c
@@ -0,0 +1,220 @@
+/* Test locale dependence of strfmon_l.
+ Copyright (C) 2016-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdbool.h>
+#include <stdio.h>
+#include <monetary.h>
+#include <string.h>
+#include <stdlib.h>
+#include <locale.h>
+
+static const char *const en_us_name = "en_US.ISO-8859-1";
+
+/* Locale value to be used by tests. */
+static locale_t loc;
+static const char *loc_name;
+
+/* Set the global locale to GLOBAL_NAME, and the locale referenced by
+ the loc variable above to LOCAL_NAME. */
+static void
+init_loc (const char *global_name, const char *local_name)
+{
+ loc = newlocale (LC_ALL_MASK, local_name, 0);
+ if (loc == 0)
+ {
+ printf ("error: newlocale (%s): %m\n", local_name);
+ abort ();
+ }
+ loc_name = local_name;
+
+ if (setlocale (LC_ALL, global_name) == NULL)
+ {
+ printf ("error: setlocale (%s): %m\n", global_name);
+ abort ();
+ }
+}
+
+/* Expected strings for a positive or negative value. */
+struct testcase
+{
+ const char *i; /* %i */
+ const char *n; /* %n */
+ const char *i_ungrouped; /* %^i */
+ const char *n_ungrouped; /* %^n */
+};
+
+/* Collected expected strings for both positive and negative
+ values. */
+struct testcase_pair
+{
+ struct testcase positive; /* 1234567.89 */
+ struct testcase negative; /* -1234567.89 */
+};
+
+static bool errors;
+
+/* Test one value using the locale loc. */
+static void
+test_one (const char *format, double value, const char *expected)
+{
+ static char actual[64];
+ int result = strfmon_l (actual, sizeof (actual), loc, format, value);
+ if (result < 0)
+ {
+ printf ("error: locale %s, format \"%s\", value %g: strfmon_l: %m\n",
+ loc_name, format, value);
+ errors = true;
+ }
+ else if (strcmp (actual, expected) != 0)
+ {
+ printf ("error: locale %s, format \"%s\", value %g: mismatch\n",
+ loc_name, format, value);
+ printf ("error: expected: \"%s\"\n", expected);
+ printf ("error: actual: \"%s\"\n", actual);
+ errors = true;
+ }
+}
+
+static void
+test_pair (const struct testcase_pair *pair)
+{
+ double positive = 1234567.89;
+ test_one ("%i", positive, pair->positive.i);
+ test_one ("%n", positive, pair->positive.n);
+ test_one ("%^i", positive, pair->positive.i_ungrouped);
+ test_one ("%^n", positive, pair->positive.n_ungrouped);
+ double negative = -1234567.89;
+ test_one ("%i", negative, pair->negative.i);
+ test_one ("%n", negative, pair->negative.n);
+ test_one ("%^i", negative, pair->negative.i_ungrouped);
+ test_one ("%^n", negative, pair->negative.n_ungrouped);
+}
+
+static const struct testcase_pair en_us =
+ {
+ {
+ "USD 1,234,567.89", "$1,234,567.89",
+ "USD 1234567.89", "$1234567.89"
+ },
+ {
+ "-USD 1,234,567.89", "-$1,234,567.89",
+ "-USD 1234567.89", "-$1234567.89"
+ }
+ };
+
+static void
+test_en_us (const char *other_name)
+{
+ init_loc (other_name, en_us_name);
+ test_pair (&en_us);
+ freelocale (loc);
+}
+
+struct locale_pair
+{
+ const char *locale_name;
+ struct testcase_pair pair;
+};
+
+static const struct locale_pair tests[] =
+ {
+ {
+ "de_DE.UTF-8",
+ {
+ {
+ "1.234.567,89 EUR", "1.234.567,89 \u20ac",
+ "1234567,89 EUR", "1234567,89 \u20ac"
+ },
+ {
+ "-1.234.567,89 EUR", "-1.234.567,89 \u20ac",
+ "-1234567,89 EUR", "-1234567,89 \u20ac"
+ }
+ },
+ },
+ {
+ "tg_TJ.UTF-8",
+ {
+ {
+ "1 234 567.89 TJS", "1 234 567.89 \u0440\u0443\u0431",
+ "1234567.89 TJS", "1234567.89 \u0440\u0443\u0431"
+ },
+ {
+ "-1 234 567.89 TJS", "-1 234 567.89 \u0440\u0443\u0431",
+ "-1234567.89 TJS", "-1234567.89 \u0440\u0443\u0431"
+ }
+ }
+ },
+ {
+ "te_IN.UTF-8",
+ {
+ {
+ "INR12,34,567.89", "\u20b912,34,567.89",
+ "INR1234567.89", "\u20b91234567.89"
+ },
+ {
+ "-INR12,34,567.89", "-\u20b912,34,567.89",
+ "-INR1234567.89", "-\u20b91234567.89"
+ }
+ }
+ },
+ {
+ "bn_IN.UTF-8",
+ {
+ {
+ "INR 12,345,67.89", "\u20b9 12,345,67.89",
+ "INR 1234567.89", "\u20b9 1234567.89"
+ },
+ {
+ "-INR 12,345,67.89", "-\u20b9 12,345,67.89",
+ "-INR 1234567.89", "-\u20b9 1234567.89"
+ }
+ }
+ },
+ {
+ "el_GR.UTF-8",
+ {
+ {
+ "1.234.567,89EUR", "1.234.567,89\u20ac",
+ "1234567,89EUR", "1234567,89\u20ac"
+ },
+ {
+ "-EUR1.234.567,89", "-\u20ac1.234.567,89",
+ "-EUR1234567,89", "-\u20ac1234567,89",
+ }
+ }
+ },
+ {}
+ };
+
+static int
+do_test (void)
+{
+ for (const struct locale_pair *test = tests;
+ test->locale_name != NULL; ++test)
+ {
+ init_loc (en_us_name, test->locale_name);
+ test_pair (&test->pair);
+ freelocale (loc);
+ test_en_us (test->locale_name);
+ }
+
+ return errors;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strfrom-locale.c b/REORG.TODO/stdlib/tst-strfrom-locale.c
new file mode 100644
index 0000000000..f01b42d575
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strfrom-locale.c
@@ -0,0 +1,91 @@
+/* Tests for strfromf, strfromd, strfroml functions.
+ Copyright (C) 2016-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include "tst-strfrom.h"
+
+static const struct test tests[] = {
+ TEST ("12,345000", "%f", 50, 9, 12.345),
+ TEST ("9,999", "%.3f", 50, 5, 9.999),
+ TEST ("0,125000", "%f", 50, 8, .125),
+ TEST ("0,000000", "%f", 50, 8, .0),
+ TEST ("0", "%g", 50, 1, .0),
+ TEST ("9,900000", "%f", 50, 8, 9.9),
+ TEST ("9,1", "%.5f", 4, 7, 9.123456),
+ TEST ("9,91235", "%g", 50, 7, 9.91234567812345678),
+ TEST ("79,8765", "%G", 50, 7, 79.8765432111),
+ TEST ("79,9", "%.3g", 50, 4, 79.8765432111),
+ TEST ("1,000000e+38", "%e", 50, 12, 1e+38),
+ TEST ("1,000000e+38", "%e", 50, 12, 1e38),
+ TEST ("-1,000000e-37", "%e", 50, 13, -1e-37),
+ TEST ("1,000000e-37", "%e", 50, 12, 0.00000001e-29),
+ TEST ("1,000000e-37", "%e", 50, 12, 1.000000e-37),
+ TEST ("5,900000e-16", "%e", 50, 12, 5.9e-16),
+ TEST ("1,234500e+20", "%e", 50, 12, 12.345e19),
+ TEST ("1,000000e+05", "%e", 50, 12, 1e5),
+ TEST ("-NAN", "%G", 50, 4, -NAN_),
+ TEST ("-inf", "%g", 50, 4, -INF),
+ TEST ("inf", "%g", 50, 3, INF)
+};
+/* Tests with buffer size small. */
+static const struct test stest[] = {
+ TEST ("1234", "%g", 5, 7, 12345.345),
+ TEST ("0,12", "%f", 5, 8, .125),
+ TEST ("9,99", "%.3f", 5, 5, 9.999),
+ TEST ("100", "%g", 5, 3, 1e2)
+};
+/* Hexadecimal tests. */
+static const struct htests htest[] = {
+ HTEST ("%a", { "0x1,ffp+6", "0x3,fep+5", "0x7,fcp+4", "0xf,f8p+3" },
+ 0x1.ffp+6),
+ HTEST ("%a", { "0x1,88p+4", "0x3,1p+3", "0x6,2p+2", "0xc,4p+1" },
+ 0x1.88p+4),
+ HTEST ("%A", { "-0X1,88P+5", "-0X3,1P+4", "-0X6,2P+3", "-0XC,4P+2" },
+ -0x1.88p+5),
+ HTEST ("%a", { "0x1,44p+10", "0x2,88p+9", "0x5,1p+8", "0xa,2p+7" },
+ 0x1.44p+10),
+ HTEST ("%a", { "0x1p-10", "0x2p-11", "0x4p-12", "0x8p-13" },
+ 0x0.0040p+0),
+ HTEST ("%a", { "0x1,4p+3", "0x2,8p+2", "0x5p+1", "0xap+0" },
+ 10.0)
+};
+
+GEN_TEST_STRTOD_FOREACH (TEST_STRFROM)
+
+static int
+test_locale (const char *locale)
+{
+ printf ("Testing in locale: %s\n", locale);
+ if (setlocale (LC_ALL, locale) == NULL)
+ {
+ printf ("Cannot set locale %s\n", locale);
+ }
+ return STRTOD_TEST_FOREACH (test_);
+}
+
+static int
+do_test (void)
+{
+ int result = 0;
+ result += test_locale ("de_DE.UTF-8");
+ result += test_locale ("tr_TR.ISO-8859-9");
+ result += test_locale ("tr_TR.UTF-8");
+ return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strfrom.c b/REORG.TODO/stdlib/tst-strfrom.c
new file mode 100644
index 0000000000..5aa54fa7cb
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strfrom.c
@@ -0,0 +1,91 @@
+/* Tests for strfromf, strfromd, strfroml functions.
+ Copyright (C) 2016-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include "tst-strfrom.h"
+
+static const struct test tests[] = {
+ TEST ("12.345000", "%f", 50, 9, 12.345),
+ TEST ("9.999", "%.3f", 50, 5, 9.999),
+ TEST ("0.125000", "%f", 50, 8, .125),
+ TEST ("0.000000", "%f", 50, 8, .0),
+ TEST ("0", "%g", 50, 1, .0),
+ TEST ("9.900000", "%f", 50, 8, 9.9),
+ TEST ("9.1", "%.5f", 4, 7, 9.123456),
+ TEST ("9.91235", "%g", 50, 7, 9.91234567812345678),
+ TEST ("79.8765", "%G", 50, 7, 79.8765432111),
+ TEST ("79.9", "%.3g", 50, 4, 79.8765432111),
+ TEST ("1.000000e+38", "%e", 50, 12, 1e+38),
+ TEST ("1.000000e+38", "%e", 50, 12, 1e38),
+ TEST ("-1.000000e-37", "%e", 50, 13, -1e-37),
+ TEST ("1.000000e-37", "%e", 50, 12, 0.00000001e-29),
+ TEST ("1.000000e-37", "%e", 50, 12, 1.000000e-37),
+ TEST ("5.900000e-16", "%e", 50, 12, 5.9e-16),
+ TEST ("1.234500e+20", "%e", 50, 12, 12.345e19),
+ TEST ("1.000000e+05", "%e", 50, 12, 1e5),
+ TEST ("-NAN", "%G", 50, 4, -NAN_),
+ TEST ("-inf", "%g", 50, 4, -INF),
+ TEST ("inf", "%g", 50, 3, INF)
+};
+/* Tests with buffer size small. */
+static const struct test stest[] = {
+ TEST ("1234", "%g", 5, 7, 12345.345),
+ TEST ("0.12", "%f", 5, 8, .125),
+ TEST ("9.99", "%.3f", 5, 5, 9.999),
+ TEST ("100", "%g", 5, 3, 1e2)
+};
+/* Hexadecimal tests. */
+static const struct htests htest[] = {
+ HTEST ("%a", { "0x1.ffp+6", "0x3.fep+5", "0x7.fcp+4", "0xf.f8p+3" },
+ 0x1.ffp+6),
+ HTEST ("%a", { "0x1.88p+4", "0x3.1p+3", "0x6.2p+2", "0xc.4p+1" },
+ 0x1.88p+4),
+ HTEST ("%A", { "-0X1.88P+5", "-0X3.1P+4", "-0X6.2P+3", "-0XC.4P+2" },
+ -0x1.88p+5),
+ HTEST ("%a", { "0x1.44p+10", "0x2.88p+9", "0x5.1p+8", "0xa.2p+7" },
+ 0x1.44p+10),
+ HTEST ("%a", { "0x1p-10", "0x2p-11", "0x4p-12", "0x8p-13" },
+ 0x0.0040p+0),
+ HTEST ("%a", { "0x1.4p+3", "0x2.8p+2", "0x5p+1", "0xap+0" },
+ 10.0)
+};
+
+GEN_TEST_STRTOD_FOREACH (TEST_STRFROM)
+
+static int
+test_locale (const char *locale)
+{
+ printf ("Testing in locale: %s\n", locale);
+ if (setlocale (LC_ALL, locale) == NULL)
+ {
+ printf ("Cannot set locale %s\n", locale);
+ }
+ return STRTOD_TEST_FOREACH (test_);
+}
+
+static int
+do_test (void)
+{
+ int result = 0;
+ result += test_locale ("C");
+ result += test_locale ("en_US.ISO-8859-1");
+ result += test_locale ("en_US.UTF-8");
+ return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strfrom.h b/REORG.TODO/stdlib/tst-strfrom.h
new file mode 100644
index 0000000000..86c0c19392
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strfrom.h
@@ -0,0 +1,120 @@
+/* Tests for strfromf, strfromd, strfroml functions.
+ Copyright (C) 2016-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <float.h>
+#include <math.h>
+#include <locale.h>
+
+#include "tst-strtod.h"
+
+#define _CONCAT(a, b) a ## b
+#define CONCAT(a, b) _CONCAT (a, b)
+
+/* Generator to create an FTYPE member variabled named FSUF
+ * used to populate struct member variables. */
+#define FTYPE_MEMBER(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \
+ FTYPE FSUF;
+
+#define STRUCT_FOREACH_FLOAT_FTYPE GEN_TEST_STRTOD_FOREACH (FTYPE_MEMBER)
+
+#define ENTRY(FSUF, FTYPE, FTOSTR, LSUF, CSUF, ...) \
+ CONCAT (__VA_ARGS__, LSUF),
+/* This is hacky way around the seemingly unavoidable macro
+ * expansion of the INFINITY or HUGE_VAL like macros in the
+ * above. It is assumed the compiler will implicitly convert
+ * the infinity correctly. */
+#define INF INFINITY + 0.0
+#define NAN_ NAN + 0.0
+
+struct test_input
+{
+ STRUCT_FOREACH_FLOAT_FTYPE
+};
+struct test {
+ const char *s;
+ const char *fmt;
+ int size;
+ int rc;
+ struct test_input t;
+};
+#define TEST(s, fmt, size, rc, val) \
+ { \
+ s, fmt, size, rc, { GEN_TEST_STRTOD_FOREACH (ENTRY, val) } \
+ }
+/* Hexadecimal tests. */
+struct htests
+{
+ const char *fmt;
+ const char *exp[4];
+ struct test_input t;
+};
+#define HTEST(fmt, exp1, exp2, exp3, exp4, val) \
+ { \
+ fmt, exp1, exp2, exp3, exp4, { GEN_TEST_STRTOD_FOREACH (ENTRY, val) } \
+ }
+
+#define TEST_STRFROM(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \
+static int \
+test_ ## FSUF (void) \
+{ \
+ char buf[50], sbuf[5]; \
+ int status = 0; \
+ int i, rc = 0, rc1 = 0; \
+ for (i = 0; i < sizeof (stest) / sizeof (stest[0]); i++) \
+ { \
+ rc = FTOSTR (sbuf, stest[i].size, stest[i].fmt, stest[i].t.FSUF); \
+ rc1 = (strcmp (sbuf, stest[i].s) != 0) || (rc != stest[i].rc); \
+ if (rc1) \
+ { \
+ printf (#FTOSTR ": got %s (%d), expected %s (%d)\n", \
+ sbuf, rc, stest[i].s, stest[i].rc); \
+ status++; \
+ } \
+ } \
+ for (i = 0; i < sizeof (tests) / sizeof (tests[0]); i++) \
+ { \
+ rc = FTOSTR (buf, tests[i].size, tests[i].fmt, tests[i].t.FSUF); \
+ rc1 = (strcmp (buf, tests[i].s) != 0) || (rc != tests[i].rc); \
+ if (rc1) \
+ { \
+ printf (#FTOSTR ": got %s (%d), expected %s (%d)\n", \
+ buf, rc, tests[i].s, tests[i].rc); \
+ status++; \
+ } \
+ } \
+ for (i = 0; i < sizeof (htest) / sizeof (htest[0]); i++) \
+ { \
+ rc = FTOSTR (buf, 50, htest[i].fmt, htest[i].t.FSUF); \
+ if (strcmp (buf, htest[i].exp[0]) == 0 || \
+ strcmp (buf, htest[i].exp[1]) == 0 || \
+ strcmp (buf, htest[i].exp[2]) == 0 || \
+ strcmp (buf, htest[i].exp[3]) == 0) \
+ continue; \
+ else \
+ { \
+ printf (#FTOSTR ": got %s (%d), expected %s or %s or %s " \
+ "or %s\n", buf, rc, htest[i].exp[0], htest[i].exp[1], \
+ htest[i].exp[2], htest[i].exp[3]); \
+ status++; \
+ } \
+ } \
+ return status; \
+}
diff --git a/REORG.TODO/stdlib/tst-strtod-nan-locale-main.c b/REORG.TODO/stdlib/tst-strtod-nan-locale-main.c
new file mode 100644
index 0000000000..8044dad89f
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod-nan-locale-main.c
@@ -0,0 +1,89 @@
+/* Test strtod functions work with all ASCII letters in NAN(...) in
+ Turkish locales (bug 19266).
+ Copyright (C) 2015-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <locale.h>
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <wchar.h>
+
+#define STR_(X) #X
+#define STR(X) STR_(X)
+#define FNPFXS STR (FNPFX)
+#define CONCAT_(X, Y) X ## Y
+#define CONCAT(X, Y) CONCAT_ (X, Y)
+#define FNX(FN) CONCAT (FNPFX, FN)
+
+#define TEST(LOC, STR, FN, TYPE) \
+ do \
+ { \
+ CHAR *ep; \
+ TYPE val = FNX (FN) (STR, &ep); \
+ if (isnan (val) && *ep == 0) \
+ printf ("PASS: %s: " FNPFXS #FN " (" SFMT ")\n", LOC, STR); \
+ else \
+ { \
+ printf ("FAIL: %s: " FNPFXS #FN " (" SFMT ")\n", LOC, STR); \
+ result = 1; \
+ } \
+ } \
+ while (0)
+
+static int
+test_one_locale (const char *loc)
+{
+ if (setlocale (LC_ALL, loc) == NULL)
+ {
+ printf ("setlocale (LC_ALL, \"%s\") failed\n", loc);
+ return 1;
+ }
+ int result = 0;
+ for (int i = 10; i < 36; i++)
+ {
+ CHAR s[7];
+ s[0] = L_('N');
+ s[1] = L_('A');
+ s[2] = L_('N');
+ s[3] = L_('(');
+ s[4] = L_('A') + i - 10;
+ s[5] = L_(')');
+ s[6] = 0;
+ TEST (loc, s, f, float);
+ TEST (loc, s, d, double);
+ TEST (loc, s, ld, long double);
+ s[4] = L_('a') + i - 10;
+ TEST (loc, s, f, float);
+ TEST (loc, s, d, double);
+ TEST (loc, s, ld, long double);
+ }
+ return result;
+}
+
+static int
+do_test (void)
+{
+ int result = 0;
+ result |= test_one_locale ("C");
+ result |= test_one_locale ("tr_TR.UTF-8");
+ result |= test_one_locale ("tr_TR.ISO-8859-9");
+ return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strtod-nan-locale.c b/REORG.TODO/stdlib/tst-strtod-nan-locale.c
new file mode 100644
index 0000000000..cf0820df75
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod-nan-locale.c
@@ -0,0 +1,25 @@
+/* Test strtod functions work with all ASCII letters in NAN(...) in
+ Turkish locales (bug 19266). Narrow string version.
+ Copyright (C) 2015-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#define CHAR char
+#define SFMT "\"%s\""
+#define FNPFX strto
+#define L_(C) C
+
+#include <tst-strtod-nan-locale-main.c>
diff --git a/REORG.TODO/stdlib/tst-strtod-overflow.c b/REORG.TODO/stdlib/tst-strtod-overflow.c
new file mode 100644
index 0000000000..c1eb561dec
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod-overflow.c
@@ -0,0 +1,49 @@
+/* Test for integer/buffer overflow in strtod.
+ Copyright (C) 2012-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define EXPONENT "e-2147483649"
+#define SIZE 214748364
+
+static int
+do_test (void)
+{
+ char *p = malloc (1 + SIZE + sizeof (EXPONENT));
+ if (p == NULL)
+ {
+ puts ("malloc failed, cannot test for overflow");
+ return 0;
+ }
+ p[0] = '1';
+ memset (p + 1, '0', SIZE);
+ memcpy (p + 1 + SIZE, EXPONENT, sizeof (EXPONENT));
+ double d = strtod (p, NULL);
+ if (d != 0)
+ {
+ printf ("strtod returned wrong value: %a\n", d);
+ return 1;
+ }
+ return 0;
+}
+
+#define TEST_FUNCTION do_test ()
+#define TIMEOUT 30
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strtod-round-data b/REORG.TODO/stdlib/tst-strtod-round-data
new file mode 100644
index 0000000000..cb908036fd
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod-round-data
@@ -0,0 +1,150 @@
+3.518437208883201171875E+013
+1.00000005960464477550
+1.0000000596046447755
+1.000000059604644776
+1.000000059604644775
+1.00000005960464478
+1.0000000596046448
+1.000000059604645
+1.00000005960464
+1.0000000596046
+1.000000059605
+1.00000005960
+1.0000000596
+1.000000060
+1.00000006
+1.0000001
+1.000000
+1.00000000000000011113
+1.00000000000000011103
+1.00000000000000011102
+1.00000000000000011101
+1.0000000000000001111
+1.000000000000000111
+1.00000000000000011
+1.0000000000000001
+3929201589819414e-25
+0.000000000000000000000000000000000000000000002101947696487225606385594374934874196920392912814773657635602425834686624028790902229957282543182373046875
+1.00000005960464477539062499
+1.000000059604644775390625
+1.00000005960464477539062501
+1.00000011920928955078125
+1.00000017881393432617187499
+1.000000178813934326171875
+1.00000017881393432617187501
+1.0000002384185791015625
+1.08420217248550443400745280086994171142578125e-19
+1.0842022371089897897127399001987457793916291848290711641311645507812499e-19
+1.08420223710898978971273990019874577939162918482907116413116455078125e-19
+1.0842022371089897897127399001987457793916291848290711641311645507812501e-19
+1.0842023017324751454180269995275498473574771196581423282623291015625e-19
+1.0842023663559605011233140988563539153233250544872134923934936523437499e-19
+1.08420236635596050112331409885635391532332505448721349239349365234375e-19
+1.0842023663559605011233140988563539153233250544872134923934936523437501e-19
+1.084202430979445856828601198185157983289172989316284656524658203125e-19
+7.52316384526264005099991383822237233803945956334136013765601092018187046051025390625e-37
+7.5231642936781486349413765338158389908126215730251815381410578824437213052434003657253924757242202758789062499e-37
+7.52316429367814863494137653381583899081262157302518153814105788244372130524340036572539247572422027587890625e-37
+7.5231642936781486349413765338158389908126215730251815381410578824437213052434003657253924757242202758789062501e-37
+7.5231647420936572188828392294093056435857835827090029386261048447055721499765468252007849514484405517578125e-37
+7.5231651905091658028243019250027722963589455923928243391111518069674229947096932846761774271726608276367187499e-37
+7.52316519050916580282430192500277229635894559239282433911115180696742299470969328467617742717266082763671875e-37
+7.5231651905091658028243019250027722963589455923928243391111518069674229947096932846761774271726608276367187501e-37
+7.523165638924674386765764620596238949132107602076645739596198769229273839442839744151569902896881103515625e-37
+340282356779733661637539395458142568447.999
+340282356779733661637539395458142568448
+340282356779733661637539395458142568448.001
+-340282356779733661637539395458142568447.999
+-340282356779733661637539395458142568448
+-340282356779733661637539395458142568448.001
+179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497791.999
+179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497792
+179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497792.001
+-179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497791.999
+-179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497792
+-179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497792.001
+1189731495357231765053511589829488667966254004695567218956499277562499181851727204760449442904570461384330567646167443286662555267489487930236325136097654342377232417536489080362029584951246485605740928178136611230674219048500381811805207877203107268812398885808170517032687767579195512604426112969939697309064970421357373593737548189791064578075396520278041564919877710332117871859964923206311175434753221226253534337199304629504137668677812103359730222935610071343425325633562626092674600633358193879055413937592435479934747155496913520748914500847834599706604816899916747713074435514585511372746030946789075371775796999312354227866587803370992862072730331502951338476357350089453460696354521572546926077765383044577075982892200047380230605947983926605074559374288887635146614087580689065065271437207231562037396763728185780908406142166217047877746112568232134313256340568095056911759884246066540728231159508276273778086735741815471986687141421432344475502062691975457742639931301197788106590436213127071090684338861628772228444915189303418963135612389885203608036075349871783050435209372998381734440835020273404521625820382960095748088096587424348978607559613437524195438026532392163371033702927429354975024746264545597290170945602348672367013792302348098432637396409095613884932277251719835310031547998505803752546406866843706502753183166325399209709698038388729144247605351114448647488475730429635692916794001788966968620265007002798266353024717022066273037990476329714600171995445673732316103762568799871343179341500144434361457105461379244904895252415230182712399067436456639767780598951274425173976825259444309519076481099524794546856555816525710213317614010389620491220471110091857573837438278112540147709446027133781874510952001326117006323864207925852079541370644269957126564493435341201207708574988136737425864785839645124060309307041974867276363338370018636105162869283008917743830711050229193144085029688094638483773246680141155923835213247853616763725824680857167751837090780487900840228387283614547346509044804890143691849792564977383927445249156165014494875205013001248617782698812613355440377357151258089863597284198597765215866830359241005748505543689358738031324284465243629136488333487686637331181039189590604124992017972343852392605049057443576119873279945400832860199527936922650062116335246759763699388664096895732875994904427617012292176896143437273923395471742216159840248646356256801083915667206811346470984128630513747606135060039717590702096972930814428759032404269759101709671790756463178143949787623821836792662477247624052842849718333550449622140658955581054081751312471819712726722479962465958577056952080928160441258225609897705262614494607339126216928069521406520619119688243287473394538225119027875465220992256233111477265049726174251028452120761620567236506258269287781320020740354052506311094266116406810709272834304862320539294205143454357131313879679493260017348668942730474494178249137387898297328336833589009038180169681270850774180709517707029996636939683240047817287633101083794404428541740415811916696232677498555197744273877942786661835044988438574758774422356087368185157228627335879058660154558309535912070401295584736621504268847267595223765835863174255756697267818931047523414328918687705134068360361363742640382966108545994545911705825697417989043286767551310728319742954355856116731710961138337957358885918445698641669559694166808074917226884181158917536699176609687522288426691820400183361523559409155799556283862329497478912575261457830579497761228960488413082611130636745385531466634515743840239035698486403517044157039226831085528805370810274043977756176084122952933117637894899009906118591255725255303492783199432613047841255537488113392259699564654048366964907825009036946741350368993216860237824660346368178183476516236016631293185747612693520285606412666148401080833153012602745585750872969103848152851344605317151546396041150523486651715472516090757848631964035419441554251667764234034722117421393132102998968842527073068624998951156916755512381404671428195378673434142765187038589280087599553911407299582781759652177398265112189244631130776935980062283655148992367895151475032666162688096176262281649169171506024644941424855074678761732513983988468070793092275675388024763356241941156378024394000502219343689759498466840264622527907455975633934878799543518206521383037618795439338086429200645002065120039545639315698201147683480515936292743251499063438531296922453863968872815997353125881179686462705170051219974666064694475306164653842558263043808428507798331085671416437696164008096171739721381877119714312306163210350382599226246553966125970240408129674442076735944784179006667645805896851048093638137596670696937010699212957919299380937222250509562807981779341384684146547286314982564181910419531236194060603634063907761401557097370591258981203660079555061603095538604465962028762337280258716255780315038694244061790279947528902264433516193654532433289688740976918527.999
+1189731495357231765053511589829488667966254004695567218956499277562499181851727204760449442904570461384330567646167443286662555267489487930236325136097654342377232417536489080362029584951246485605740928178136611230674219048500381811805207877203107268812398885808170517032687767579195512604426112969939697309064970421357373593737548189791064578075396520278041564919877710332117871859964923206311175434753221226253534337199304629504137668677812103359730222935610071343425325633562626092674600633358193879055413937592435479934747155496913520748914500847834599706604816899916747713074435514585511372746030946789075371775796999312354227866587803370992862072730331502951338476357350089453460696354521572546926077765383044577075982892200047380230605947983926605074559374288887635146614087580689065065271437207231562037396763728185780908406142166217047877746112568232134313256340568095056911759884246066540728231159508276273778086735741815471986687141421432344475502062691975457742639931301197788106590436213127071090684338861628772228444915189303418963135612389885203608036075349871783050435209372998381734440835020273404521625820382960095748088096587424348978607559613437524195438026532392163371033702927429354975024746264545597290170945602348672367013792302348098432637396409095613884932277251719835310031547998505803752546406866843706502753183166325399209709698038388729144247605351114448647488475730429635692916794001788966968620265007002798266353024717022066273037990476329714600171995445673732316103762568799871343179341500144434361457105461379244904895252415230182712399067436456639767780598951274425173976825259444309519076481099524794546856555816525710213317614010389620491220471110091857573837438278112540147709446027133781874510952001326117006323864207925852079541370644269957126564493435341201207708574988136737425864785839645124060309307041974867276363338370018636105162869283008917743830711050229193144085029688094638483773246680141155923835213247853616763725824680857167751837090780487900840228387283614547346509044804890143691849792564977383927445249156165014494875205013001248617782698812613355440377357151258089863597284198597765215866830359241005748505543689358738031324284465243629136488333487686637331181039189590604124992017972343852392605049057443576119873279945400832860199527936922650062116335246759763699388664096895732875994904427617012292176896143437273923395471742216159840248646356256801083915667206811346470984128630513747606135060039717590702096972930814428759032404269759101709671790756463178143949787623821836792662477247624052842849718333550449622140658955581054081751312471819712726722479962465958577056952080928160441258225609897705262614494607339126216928069521406520619119688243287473394538225119027875465220992256233111477265049726174251028452120761620567236506258269287781320020740354052506311094266116406810709272834304862320539294205143454357131313879679493260017348668942730474494178249137387898297328336833589009038180169681270850774180709517707029996636939683240047817287633101083794404428541740415811916696232677498555197744273877942786661835044988438574758774422356087368185157228627335879058660154558309535912070401295584736621504268847267595223765835863174255756697267818931047523414328918687705134068360361363742640382966108545994545911705825697417989043286767551310728319742954355856116731710961138337957358885918445698641669559694166808074917226884181158917536699176609687522288426691820400183361523559409155799556283862329497478912575261457830579497761228960488413082611130636745385531466634515743840239035698486403517044157039226831085528805370810274043977756176084122952933117637894899009906118591255725255303492783199432613047841255537488113392259699564654048366964907825009036946741350368993216860237824660346368178183476516236016631293185747612693520285606412666148401080833153012602745585750872969103848152851344605317151546396041150523486651715472516090757848631964035419441554251667764234034722117421393132102998968842527073068624998951156916755512381404671428195378673434142765187038589280087599553911407299582781759652177398265112189244631130776935980062283655148992367895151475032666162688096176262281649169171506024644941424855074678761732513983988468070793092275675388024763356241941156378024394000502219343689759498466840264622527907455975633934878799543518206521383037618795439338086429200645002065120039545639315698201147683480515936292743251499063438531296922453863968872815997353125881179686462705170051219974666064694475306164653842558263043808428507798331085671416437696164008096171739721381877119714312306163210350382599226246553966125970240408129674442076735944784179006667645805896851048093638137596670696937010699212957919299380937222250509562807981779341384684146547286314982564181910419531236194060603634063907761401557097370591258981203660079555061603095538604465962028762337280258716255780315038694244061790279947528902264433516193654532433289688740976918528
+1189731495357231765053511589829488667966254004695567218956499277562499181851727204760449442904570461384330567646167443286662555267489487930236325136097654342377232417536489080362029584951246485605740928178136611230674219048500381811805207877203107268812398885808170517032687767579195512604426112969939697309064970421357373593737548189791064578075396520278041564919877710332117871859964923206311175434753221226253534337199304629504137668677812103359730222935610071343425325633562626092674600633358193879055413937592435479934747155496913520748914500847834599706604816899916747713074435514585511372746030946789075371775796999312354227866587803370992862072730331502951338476357350089453460696354521572546926077765383044577075982892200047380230605947983926605074559374288887635146614087580689065065271437207231562037396763728185780908406142166217047877746112568232134313256340568095056911759884246066540728231159508276273778086735741815471986687141421432344475502062691975457742639931301197788106590436213127071090684338861628772228444915189303418963135612389885203608036075349871783050435209372998381734440835020273404521625820382960095748088096587424348978607559613437524195438026532392163371033702927429354975024746264545597290170945602348672367013792302348098432637396409095613884932277251719835310031547998505803752546406866843706502753183166325399209709698038388729144247605351114448647488475730429635692916794001788966968620265007002798266353024717022066273037990476329714600171995445673732316103762568799871343179341500144434361457105461379244904895252415230182712399067436456639767780598951274425173976825259444309519076481099524794546856555816525710213317614010389620491220471110091857573837438278112540147709446027133781874510952001326117006323864207925852079541370644269957126564493435341201207708574988136737425864785839645124060309307041974867276363338370018636105162869283008917743830711050229193144085029688094638483773246680141155923835213247853616763725824680857167751837090780487900840228387283614547346509044804890143691849792564977383927445249156165014494875205013001248617782698812613355440377357151258089863597284198597765215866830359241005748505543689358738031324284465243629136488333487686637331181039189590604124992017972343852392605049057443576119873279945400832860199527936922650062116335246759763699388664096895732875994904427617012292176896143437273923395471742216159840248646356256801083915667206811346470984128630513747606135060039717590702096972930814428759032404269759101709671790756463178143949787623821836792662477247624052842849718333550449622140658955581054081751312471819712726722479962465958577056952080928160441258225609897705262614494607339126216928069521406520619119688243287473394538225119027875465220992256233111477265049726174251028452120761620567236506258269287781320020740354052506311094266116406810709272834304862320539294205143454357131313879679493260017348668942730474494178249137387898297328336833589009038180169681270850774180709517707029996636939683240047817287633101083794404428541740415811916696232677498555197744273877942786661835044988438574758774422356087368185157228627335879058660154558309535912070401295584736621504268847267595223765835863174255756697267818931047523414328918687705134068360361363742640382966108545994545911705825697417989043286767551310728319742954355856116731710961138337957358885918445698641669559694166808074917226884181158917536699176609687522288426691820400183361523559409155799556283862329497478912575261457830579497761228960488413082611130636745385531466634515743840239035698486403517044157039226831085528805370810274043977756176084122952933117637894899009906118591255725255303492783199432613047841255537488113392259699564654048366964907825009036946741350368993216860237824660346368178183476516236016631293185747612693520285606412666148401080833153012602745585750872969103848152851344605317151546396041150523486651715472516090757848631964035419441554251667764234034722117421393132102998968842527073068624998951156916755512381404671428195378673434142765187038589280087599553911407299582781759652177398265112189244631130776935980062283655148992367895151475032666162688096176262281649169171506024644941424855074678761732513983988468070793092275675388024763356241941156378024394000502219343689759498466840264622527907455975633934878799543518206521383037618795439338086429200645002065120039545639315698201147683480515936292743251499063438531296922453863968872815997353125881179686462705170051219974666064694475306164653842558263043808428507798331085671416437696164008096171739721381877119714312306163210350382599226246553966125970240408129674442076735944784179006667645805896851048093638137596670696937010699212957919299380937222250509562807981779341384684146547286314982564181910419531236194060603634063907761401557097370591258981203660079555061603095538604465962028762337280258716255780315038694244061790279947528902264433516193654532433289688740976918528.001
+-1189731495357231765053511589829488667966254004695567218956499277562499181851727204760449442904570461384330567646167443286662555267489487930236325136097654342377232417536489080362029584951246485605740928178136611230674219048500381811805207877203107268812398885808170517032687767579195512604426112969939697309064970421357373593737548189791064578075396520278041564919877710332117871859964923206311175434753221226253534337199304629504137668677812103359730222935610071343425325633562626092674600633358193879055413937592435479934747155496913520748914500847834599706604816899916747713074435514585511372746030946789075371775796999312354227866587803370992862072730331502951338476357350089453460696354521572546926077765383044577075982892200047380230605947983926605074559374288887635146614087580689065065271437207231562037396763728185780908406142166217047877746112568232134313256340568095056911759884246066540728231159508276273778086735741815471986687141421432344475502062691975457742639931301197788106590436213127071090684338861628772228444915189303418963135612389885203608036075349871783050435209372998381734440835020273404521625820382960095748088096587424348978607559613437524195438026532392163371033702927429354975024746264545597290170945602348672367013792302348098432637396409095613884932277251719835310031547998505803752546406866843706502753183166325399209709698038388729144247605351114448647488475730429635692916794001788966968620265007002798266353024717022066273037990476329714600171995445673732316103762568799871343179341500144434361457105461379244904895252415230182712399067436456639767780598951274425173976825259444309519076481099524794546856555816525710213317614010389620491220471110091857573837438278112540147709446027133781874510952001326117006323864207925852079541370644269957126564493435341201207708574988136737425864785839645124060309307041974867276363338370018636105162869283008917743830711050229193144085029688094638483773246680141155923835213247853616763725824680857167751837090780487900840228387283614547346509044804890143691849792564977383927445249156165014494875205013001248617782698812613355440377357151258089863597284198597765215866830359241005748505543689358738031324284465243629136488333487686637331181039189590604124992017972343852392605049057443576119873279945400832860199527936922650062116335246759763699388664096895732875994904427617012292176896143437273923395471742216159840248646356256801083915667206811346470984128630513747606135060039717590702096972930814428759032404269759101709671790756463178143949787623821836792662477247624052842849718333550449622140658955581054081751312471819712726722479962465958577056952080928160441258225609897705262614494607339126216928069521406520619119688243287473394538225119027875465220992256233111477265049726174251028452120761620567236506258269287781320020740354052506311094266116406810709272834304862320539294205143454357131313879679493260017348668942730474494178249137387898297328336833589009038180169681270850774180709517707029996636939683240047817287633101083794404428541740415811916696232677498555197744273877942786661835044988438574758774422356087368185157228627335879058660154558309535912070401295584736621504268847267595223765835863174255756697267818931047523414328918687705134068360361363742640382966108545994545911705825697417989043286767551310728319742954355856116731710961138337957358885918445698641669559694166808074917226884181158917536699176609687522288426691820400183361523559409155799556283862329497478912575261457830579497761228960488413082611130636745385531466634515743840239035698486403517044157039226831085528805370810274043977756176084122952933117637894899009906118591255725255303492783199432613047841255537488113392259699564654048366964907825009036946741350368993216860237824660346368178183476516236016631293185747612693520285606412666148401080833153012602745585750872969103848152851344605317151546396041150523486651715472516090757848631964035419441554251667764234034722117421393132102998968842527073068624998951156916755512381404671428195378673434142765187038589280087599553911407299582781759652177398265112189244631130776935980062283655148992367895151475032666162688096176262281649169171506024644941424855074678761732513983988468070793092275675388024763356241941156378024394000502219343689759498466840264622527907455975633934878799543518206521383037618795439338086429200645002065120039545639315698201147683480515936292743251499063438531296922453863968872815997353125881179686462705170051219974666064694475306164653842558263043808428507798331085671416437696164008096171739721381877119714312306163210350382599226246553966125970240408129674442076735944784179006667645805896851048093638137596670696937010699212957919299380937222250509562807981779341384684146547286314982564181910419531236194060603634063907761401557097370591258981203660079555061603095538604465962028762337280258716255780315038694244061790279947528902264433516193654532433289688740976918527.999
+-1189731495357231765053511589829488667966254004695567218956499277562499181851727204760449442904570461384330567646167443286662555267489487930236325136097654342377232417536489080362029584951246485605740928178136611230674219048500381811805207877203107268812398885808170517032687767579195512604426112969939697309064970421357373593737548189791064578075396520278041564919877710332117871859964923206311175434753221226253534337199304629504137668677812103359730222935610071343425325633562626092674600633358193879055413937592435479934747155496913520748914500847834599706604816899916747713074435514585511372746030946789075371775796999312354227866587803370992862072730331502951338476357350089453460696354521572546926077765383044577075982892200047380230605947983926605074559374288887635146614087580689065065271437207231562037396763728185780908406142166217047877746112568232134313256340568095056911759884246066540728231159508276273778086735741815471986687141421432344475502062691975457742639931301197788106590436213127071090684338861628772228444915189303418963135612389885203608036075349871783050435209372998381734440835020273404521625820382960095748088096587424348978607559613437524195438026532392163371033702927429354975024746264545597290170945602348672367013792302348098432637396409095613884932277251719835310031547998505803752546406866843706502753183166325399209709698038388729144247605351114448647488475730429635692916794001788966968620265007002798266353024717022066273037990476329714600171995445673732316103762568799871343179341500144434361457105461379244904895252415230182712399067436456639767780598951274425173976825259444309519076481099524794546856555816525710213317614010389620491220471110091857573837438278112540147709446027133781874510952001326117006323864207925852079541370644269957126564493435341201207708574988136737425864785839645124060309307041974867276363338370018636105162869283008917743830711050229193144085029688094638483773246680141155923835213247853616763725824680857167751837090780487900840228387283614547346509044804890143691849792564977383927445249156165014494875205013001248617782698812613355440377357151258089863597284198597765215866830359241005748505543689358738031324284465243629136488333487686637331181039189590604124992017972343852392605049057443576119873279945400832860199527936922650062116335246759763699388664096895732875994904427617012292176896143437273923395471742216159840248646356256801083915667206811346470984128630513747606135060039717590702096972930814428759032404269759101709671790756463178143949787623821836792662477247624052842849718333550449622140658955581054081751312471819712726722479962465958577056952080928160441258225609897705262614494607339126216928069521406520619119688243287473394538225119027875465220992256233111477265049726174251028452120761620567236506258269287781320020740354052506311094266116406810709272834304862320539294205143454357131313879679493260017348668942730474494178249137387898297328336833589009038180169681270850774180709517707029996636939683240047817287633101083794404428541740415811916696232677498555197744273877942786661835044988438574758774422356087368185157228627335879058660154558309535912070401295584736621504268847267595223765835863174255756697267818931047523414328918687705134068360361363742640382966108545994545911705825697417989043286767551310728319742954355856116731710961138337957358885918445698641669559694166808074917226884181158917536699176609687522288426691820400183361523559409155799556283862329497478912575261457830579497761228960488413082611130636745385531466634515743840239035698486403517044157039226831085528805370810274043977756176084122952933117637894899009906118591255725255303492783199432613047841255537488113392259699564654048366964907825009036946741350368993216860237824660346368178183476516236016631293185747612693520285606412666148401080833153012602745585750872969103848152851344605317151546396041150523486651715472516090757848631964035419441554251667764234034722117421393132102998968842527073068624998951156916755512381404671428195378673434142765187038589280087599553911407299582781759652177398265112189244631130776935980062283655148992367895151475032666162688096176262281649169171506024644941424855074678761732513983988468070793092275675388024763356241941156378024394000502219343689759498466840264622527907455975633934878799543518206521383037618795439338086429200645002065120039545639315698201147683480515936292743251499063438531296922453863968872815997353125881179686462705170051219974666064694475306164653842558263043808428507798331085671416437696164008096171739721381877119714312306163210350382599226246553966125970240408129674442076735944784179006667645805896851048093638137596670696937010699212957919299380937222250509562807981779341384684146547286314982564181910419531236194060603634063907761401557097370591258981203660079555061603095538604465962028762337280258716255780315038694244061790279947528902264433516193654532433289688740976918528
+-1189731495357231765053511589829488667966254004695567218956499277562499181851727204760449442904570461384330567646167443286662555267489487930236325136097654342377232417536489080362029584951246485605740928178136611230674219048500381811805207877203107268812398885808170517032687767579195512604426112969939697309064970421357373593737548189791064578075396520278041564919877710332117871859964923206311175434753221226253534337199304629504137668677812103359730222935610071343425325633562626092674600633358193879055413937592435479934747155496913520748914500847834599706604816899916747713074435514585511372746030946789075371775796999312354227866587803370992862072730331502951338476357350089453460696354521572546926077765383044577075982892200047380230605947983926605074559374288887635146614087580689065065271437207231562037396763728185780908406142166217047877746112568232134313256340568095056911759884246066540728231159508276273778086735741815471986687141421432344475502062691975457742639931301197788106590436213127071090684338861628772228444915189303418963135612389885203608036075349871783050435209372998381734440835020273404521625820382960095748088096587424348978607559613437524195438026532392163371033702927429354975024746264545597290170945602348672367013792302348098432637396409095613884932277251719835310031547998505803752546406866843706502753183166325399209709698038388729144247605351114448647488475730429635692916794001788966968620265007002798266353024717022066273037990476329714600171995445673732316103762568799871343179341500144434361457105461379244904895252415230182712399067436456639767780598951274425173976825259444309519076481099524794546856555816525710213317614010389620491220471110091857573837438278112540147709446027133781874510952001326117006323864207925852079541370644269957126564493435341201207708574988136737425864785839645124060309307041974867276363338370018636105162869283008917743830711050229193144085029688094638483773246680141155923835213247853616763725824680857167751837090780487900840228387283614547346509044804890143691849792564977383927445249156165014494875205013001248617782698812613355440377357151258089863597284198597765215866830359241005748505543689358738031324284465243629136488333487686637331181039189590604124992017972343852392605049057443576119873279945400832860199527936922650062116335246759763699388664096895732875994904427617012292176896143437273923395471742216159840248646356256801083915667206811346470984128630513747606135060039717590702096972930814428759032404269759101709671790756463178143949787623821836792662477247624052842849718333550449622140658955581054081751312471819712726722479962465958577056952080928160441258225609897705262614494607339126216928069521406520619119688243287473394538225119027875465220992256233111477265049726174251028452120761620567236506258269287781320020740354052506311094266116406810709272834304862320539294205143454357131313879679493260017348668942730474494178249137387898297328336833589009038180169681270850774180709517707029996636939683240047817287633101083794404428541740415811916696232677498555197744273877942786661835044988438574758774422356087368185157228627335879058660154558309535912070401295584736621504268847267595223765835863174255756697267818931047523414328918687705134068360361363742640382966108545994545911705825697417989043286767551310728319742954355856116731710961138337957358885918445698641669559694166808074917226884181158917536699176609687522288426691820400183361523559409155799556283862329497478912575261457830579497761228960488413082611130636745385531466634515743840239035698486403517044157039226831085528805370810274043977756176084122952933117637894899009906118591255725255303492783199432613047841255537488113392259699564654048366964907825009036946741350368993216860237824660346368178183476516236016631293185747612693520285606412666148401080833153012602745585750872969103848152851344605317151546396041150523486651715472516090757848631964035419441554251667764234034722117421393132102998968842527073068624998951156916755512381404671428195378673434142765187038589280087599553911407299582781759652177398265112189244631130776935980062283655148992367895151475032666162688096176262281649169171506024644941424855074678761732513983988468070793092275675388024763356241941156378024394000502219343689759498466840264622527907455975633934878799543518206521383037618795439338086429200645002065120039545639315698201147683480515936292743251499063438531296922453863968872815997353125881179686462705170051219974666064694475306164653842558263043808428507798331085671416437696164008096171739721381877119714312306163210350382599226246553966125970240408129674442076735944784179006667645805896851048093638137596670696937010699212957919299380937222250509562807981779341384684146547286314982564181910419531236194060603634063907761401557097370591258981203660079555061603095538604465962028762337280258716255780315038694244061790279947528902264433516193654532433289688740976918528.001
+1189731495357231765085759326628007073479956869869102141501186852722712468967898039614731304160537056720508735524794218059326466407441245944473611725143413248467166796545513080184004525512467970210316955903084154210995219628561620502745688412979158287475743437748747529021767100495257876251386789060100486382120270573746835428422826338960972409135720437886908785614210084478384078153933033666173528598766851519250363351426064628258395419088471393111667700918729834985086320676654241316634560118019882210119337445330955835919527132875094715720056355846555701747536986251959671182002652387533752686564043006387189322467736998297209841197138514624008092952665297074506030396759964773170346856327642777902149445005909504598179054586496247232351389508014081573398665168934777318775791837135956795815584276253258339396528978452820191499230693717636210145879266988271829694083738038077122921912824291024453524934340394022902439339419069066610906029009607658742583030029946393156561520787087964747197937630779342237465827257153805466210260228188924675519409775662832664987585685048138307557155853256492278248578919164433813909200793462409840728598763947896501274688614908225267667177701366807438669326623433058218213443062408099675370787076912329373870411405571681619566725953239506667420107865842757661716617919733022513948046643510651078865572997073260056512303946747105979292110003450407489924836142530065624248678935670746065899317880622000638073367400369402302158314033221251653687424468051520786824115060818437539740055831113916055471483034808874617739843143938172333284262271469979254217432808855959164876994617775909494325360213896498452140653220161981435472501438614603134083005358006470142761755484855437912983836446436796696188799077203473615780300012474195744483595979884254878292198513051622049258764225807542304782444925923341494613428285320468971377328625604051015673705708956626631746891317417396029708456942140863834024650370695696409569123851257481398138888752582030034869787470552028103940729085803240085987569938856671422005581372166650497556769407574429118602955596567887598719046627586511067969787887833869882951233268645804198215954308918671793783729688211286988794688142675294614947234254538088223560934361145676358046211831627683890340178210365154617001635372653348370422726598857026002477929177288289123739070353691365311645518715750245510770260801141976525982246774038853785442558514521428892111522375063439093517487315386834431958429128019507409290585031131279294212910898440219254009319059392162713475019891930586543895163777707714398600339409818266699397506309660607491889862314049922386749339985169589508248405389966372279472368480994566101598780613797426213113809272341186010030687520020604372850246235750477820866306072249009107891882044221153421572454947459745218327822086016027106392614825047067937041894741980478402880643992102437022027245971074555342753214011193822631471157489050501952568860820401920833804902096485703539056563038766617104309221550246208420803236102663918198532911605896456149452566847699113209434574026975730941194301255893892984954283771852399164279918441721650800291777296251806440774844416950920058440264116651186795378697819243783770608877693892976259074109340205317427395771831523271197915676367134269045536541349377669517895718456625645303642348316558188118515730182101737730372539888936801532474040601312554322979825347707786172180885839980406705981955978435796108903153166067253815216088254644383863063765964591075911345075411534030241991912223282597135304726831878735179556423807036390298160370960490420948364372810759652439684318393869597369898890279242300069046830503059657125858043553373113729594871087942860315948055593344147677932119321424028600190292509664619336217631490498027916950777163752425164438252351468600785554531423979834791445600150108890772427261831495874930509509679414887523661977405914784645916502014777727175798319834059621717421648892845862179131151362279648610789587662840109016397812560123410281881558369684764808427158589621053418154441646967665840185085136102607775409115734963155803833286789583501481573372226195484679719674349562964338708154613401347218002057551149833995233231065737207320566592164688912051242035274499618147339269167576074688060033124924140616954310412384530235227956908301847998406574780144353357884105883387959218296741020722854954100887277304947480547152700263711114665576920925961724019512061174430771918685854961160518537953685957360038825116204970615989239857746870933341859397441672382036764530524729808239765622931171203720639459438906663253650619610229282159290703571350858167568164860431176138378765549296218562697437528856056494473388171789278961444737763604387979003662127798027475934505640301147524790717395857232708656327584954348395562117135230986025734451614751913114005140624270977801178582308406486958461409022442175446835595658183592121309722334474915831657286355138025915434411459395393534709704525536550715391.999
+1189731495357231765085759326628007073479956869869102141501186852722712468967898039614731304160537056720508735524794218059326466407441245944473611725143413248467166796545513080184004525512467970210316955903084154210995219628561620502745688412979158287475743437748747529021767100495257876251386789060100486382120270573746835428422826338960972409135720437886908785614210084478384078153933033666173528598766851519250363351426064628258395419088471393111667700918729834985086320676654241316634560118019882210119337445330955835919527132875094715720056355846555701747536986251959671182002652387533752686564043006387189322467736998297209841197138514624008092952665297074506030396759964773170346856327642777902149445005909504598179054586496247232351389508014081573398665168934777318775791837135956795815584276253258339396528978452820191499230693717636210145879266988271829694083738038077122921912824291024453524934340394022902439339419069066610906029009607658742583030029946393156561520787087964747197937630779342237465827257153805466210260228188924675519409775662832664987585685048138307557155853256492278248578919164433813909200793462409840728598763947896501274688614908225267667177701366807438669326623433058218213443062408099675370787076912329373870411405571681619566725953239506667420107865842757661716617919733022513948046643510651078865572997073260056512303946747105979292110003450407489924836142530065624248678935670746065899317880622000638073367400369402302158314033221251653687424468051520786824115060818437539740055831113916055471483034808874617739843143938172333284262271469979254217432808855959164876994617775909494325360213896498452140653220161981435472501438614603134083005358006470142761755484855437912983836446436796696188799077203473615780300012474195744483595979884254878292198513051622049258764225807542304782444925923341494613428285320468971377328625604051015673705708956626631746891317417396029708456942140863834024650370695696409569123851257481398138888752582030034869787470552028103940729085803240085987569938856671422005581372166650497556769407574429118602955596567887598719046627586511067969787887833869882951233268645804198215954308918671793783729688211286988794688142675294614947234254538088223560934361145676358046211831627683890340178210365154617001635372653348370422726598857026002477929177288289123739070353691365311645518715750245510770260801141976525982246774038853785442558514521428892111522375063439093517487315386834431958429128019507409290585031131279294212910898440219254009319059392162713475019891930586543895163777707714398600339409818266699397506309660607491889862314049922386749339985169589508248405389966372279472368480994566101598780613797426213113809272341186010030687520020604372850246235750477820866306072249009107891882044221153421572454947459745218327822086016027106392614825047067937041894741980478402880643992102437022027245971074555342753214011193822631471157489050501952568860820401920833804902096485703539056563038766617104309221550246208420803236102663918198532911605896456149452566847699113209434574026975730941194301255893892984954283771852399164279918441721650800291777296251806440774844416950920058440264116651186795378697819243783770608877693892976259074109340205317427395771831523271197915676367134269045536541349377669517895718456625645303642348316558188118515730182101737730372539888936801532474040601312554322979825347707786172180885839980406705981955978435796108903153166067253815216088254644383863063765964591075911345075411534030241991912223282597135304726831878735179556423807036390298160370960490420948364372810759652439684318393869597369898890279242300069046830503059657125858043553373113729594871087942860315948055593344147677932119321424028600190292509664619336217631490498027916950777163752425164438252351468600785554531423979834791445600150108890772427261831495874930509509679414887523661977405914784645916502014777727175798319834059621717421648892845862179131151362279648610789587662840109016397812560123410281881558369684764808427158589621053418154441646967665840185085136102607775409115734963155803833286789583501481573372226195484679719674349562964338708154613401347218002057551149833995233231065737207320566592164688912051242035274499618147339269167576074688060033124924140616954310412384530235227956908301847998406574780144353357884105883387959218296741020722854954100887277304947480547152700263711114665576920925961724019512061174430771918685854961160518537953685957360038825116204970615989239857746870933341859397441672382036764530524729808239765622931171203720639459438906663253650619610229282159290703571350858167568164860431176138378765549296218562697437528856056494473388171789278961444737763604387979003662127798027475934505640301147524790717395857232708656327584954348395562117135230986025734451614751913114005140624270977801178582308406486958461409022442175446835595658183592121309722334474915831657286355138025915434411459395393534709704525536550715392
+1189731495357231765085759326628007073479956869869102141501186852722712468967898039614731304160537056720508735524794218059326466407441245944473611725143413248467166796545513080184004525512467970210316955903084154210995219628561620502745688412979158287475743437748747529021767100495257876251386789060100486382120270573746835428422826338960972409135720437886908785614210084478384078153933033666173528598766851519250363351426064628258395419088471393111667700918729834985086320676654241316634560118019882210119337445330955835919527132875094715720056355846555701747536986251959671182002652387533752686564043006387189322467736998297209841197138514624008092952665297074506030396759964773170346856327642777902149445005909504598179054586496247232351389508014081573398665168934777318775791837135956795815584276253258339396528978452820191499230693717636210145879266988271829694083738038077122921912824291024453524934340394022902439339419069066610906029009607658742583030029946393156561520787087964747197937630779342237465827257153805466210260228188924675519409775662832664987585685048138307557155853256492278248578919164433813909200793462409840728598763947896501274688614908225267667177701366807438669326623433058218213443062408099675370787076912329373870411405571681619566725953239506667420107865842757661716617919733022513948046643510651078865572997073260056512303946747105979292110003450407489924836142530065624248678935670746065899317880622000638073367400369402302158314033221251653687424468051520786824115060818437539740055831113916055471483034808874617739843143938172333284262271469979254217432808855959164876994617775909494325360213896498452140653220161981435472501438614603134083005358006470142761755484855437912983836446436796696188799077203473615780300012474195744483595979884254878292198513051622049258764225807542304782444925923341494613428285320468971377328625604051015673705708956626631746891317417396029708456942140863834024650370695696409569123851257481398138888752582030034869787470552028103940729085803240085987569938856671422005581372166650497556769407574429118602955596567887598719046627586511067969787887833869882951233268645804198215954308918671793783729688211286988794688142675294614947234254538088223560934361145676358046211831627683890340178210365154617001635372653348370422726598857026002477929177288289123739070353691365311645518715750245510770260801141976525982246774038853785442558514521428892111522375063439093517487315386834431958429128019507409290585031131279294212910898440219254009319059392162713475019891930586543895163777707714398600339409818266699397506309660607491889862314049922386749339985169589508248405389966372279472368480994566101598780613797426213113809272341186010030687520020604372850246235750477820866306072249009107891882044221153421572454947459745218327822086016027106392614825047067937041894741980478402880643992102437022027245971074555342753214011193822631471157489050501952568860820401920833804902096485703539056563038766617104309221550246208420803236102663918198532911605896456149452566847699113209434574026975730941194301255893892984954283771852399164279918441721650800291777296251806440774844416950920058440264116651186795378697819243783770608877693892976259074109340205317427395771831523271197915676367134269045536541349377669517895718456625645303642348316558188118515730182101737730372539888936801532474040601312554322979825347707786172180885839980406705981955978435796108903153166067253815216088254644383863063765964591075911345075411534030241991912223282597135304726831878735179556423807036390298160370960490420948364372810759652439684318393869597369898890279242300069046830503059657125858043553373113729594871087942860315948055593344147677932119321424028600190292509664619336217631490498027916950777163752425164438252351468600785554531423979834791445600150108890772427261831495874930509509679414887523661977405914784645916502014777727175798319834059621717421648892845862179131151362279648610789587662840109016397812560123410281881558369684764808427158589621053418154441646967665840185085136102607775409115734963155803833286789583501481573372226195484679719674349562964338708154613401347218002057551149833995233231065737207320566592164688912051242035274499618147339269167576074688060033124924140616954310412384530235227956908301847998406574780144353357884105883387959218296741020722854954100887277304947480547152700263711114665576920925961724019512061174430771918685854961160518537953685957360038825116204970615989239857746870933341859397441672382036764530524729808239765622931171203720639459438906663253650619610229282159290703571350858167568164860431176138378765549296218562697437528856056494473388171789278961444737763604387979003662127798027475934505640301147524790717395857232708656327584954348395562117135230986025734451614751913114005140624270977801178582308406486958461409022442175446835595658183592121309722334474915831657286355138025915434411459395393534709704525536550715392.001
+-1189731495357231765085759326628007073479956869869102141501186852722712468967898039614731304160537056720508735524794218059326466407441245944473611725143413248467166796545513080184004525512467970210316955903084154210995219628561620502745688412979158287475743437748747529021767100495257876251386789060100486382120270573746835428422826338960972409135720437886908785614210084478384078153933033666173528598766851519250363351426064628258395419088471393111667700918729834985086320676654241316634560118019882210119337445330955835919527132875094715720056355846555701747536986251959671182002652387533752686564043006387189322467736998297209841197138514624008092952665297074506030396759964773170346856327642777902149445005909504598179054586496247232351389508014081573398665168934777318775791837135956795815584276253258339396528978452820191499230693717636210145879266988271829694083738038077122921912824291024453524934340394022902439339419069066610906029009607658742583030029946393156561520787087964747197937630779342237465827257153805466210260228188924675519409775662832664987585685048138307557155853256492278248578919164433813909200793462409840728598763947896501274688614908225267667177701366807438669326623433058218213443062408099675370787076912329373870411405571681619566725953239506667420107865842757661716617919733022513948046643510651078865572997073260056512303946747105979292110003450407489924836142530065624248678935670746065899317880622000638073367400369402302158314033221251653687424468051520786824115060818437539740055831113916055471483034808874617739843143938172333284262271469979254217432808855959164876994617775909494325360213896498452140653220161981435472501438614603134083005358006470142761755484855437912983836446436796696188799077203473615780300012474195744483595979884254878292198513051622049258764225807542304782444925923341494613428285320468971377328625604051015673705708956626631746891317417396029708456942140863834024650370695696409569123851257481398138888752582030034869787470552028103940729085803240085987569938856671422005581372166650497556769407574429118602955596567887598719046627586511067969787887833869882951233268645804198215954308918671793783729688211286988794688142675294614947234254538088223560934361145676358046211831627683890340178210365154617001635372653348370422726598857026002477929177288289123739070353691365311645518715750245510770260801141976525982246774038853785442558514521428892111522375063439093517487315386834431958429128019507409290585031131279294212910898440219254009319059392162713475019891930586543895163777707714398600339409818266699397506309660607491889862314049922386749339985169589508248405389966372279472368480994566101598780613797426213113809272341186010030687520020604372850246235750477820866306072249009107891882044221153421572454947459745218327822086016027106392614825047067937041894741980478402880643992102437022027245971074555342753214011193822631471157489050501952568860820401920833804902096485703539056563038766617104309221550246208420803236102663918198532911605896456149452566847699113209434574026975730941194301255893892984954283771852399164279918441721650800291777296251806440774844416950920058440264116651186795378697819243783770608877693892976259074109340205317427395771831523271197915676367134269045536541349377669517895718456625645303642348316558188118515730182101737730372539888936801532474040601312554322979825347707786172180885839980406705981955978435796108903153166067253815216088254644383863063765964591075911345075411534030241991912223282597135304726831878735179556423807036390298160370960490420948364372810759652439684318393869597369898890279242300069046830503059657125858043553373113729594871087942860315948055593344147677932119321424028600190292509664619336217631490498027916950777163752425164438252351468600785554531423979834791445600150108890772427261831495874930509509679414887523661977405914784645916502014777727175798319834059621717421648892845862179131151362279648610789587662840109016397812560123410281881558369684764808427158589621053418154441646967665840185085136102607775409115734963155803833286789583501481573372226195484679719674349562964338708154613401347218002057551149833995233231065737207320566592164688912051242035274499618147339269167576074688060033124924140616954310412384530235227956908301847998406574780144353357884105883387959218296741020722854954100887277304947480547152700263711114665576920925961724019512061174430771918685854961160518537953685957360038825116204970615989239857746870933341859397441672382036764530524729808239765622931171203720639459438906663253650619610229282159290703571350858167568164860431176138378765549296218562697437528856056494473388171789278961444737763604387979003662127798027475934505640301147524790717395857232708656327584954348395562117135230986025734451614751913114005140624270977801178582308406486958461409022442175446835595658183592121309722334474915831657286355138025915434411459395393534709704525536550715391.999
+-1189731495357231765085759326628007073479956869869102141501186852722712468967898039614731304160537056720508735524794218059326466407441245944473611725143413248467166796545513080184004525512467970210316955903084154210995219628561620502745688412979158287475743437748747529021767100495257876251386789060100486382120270573746835428422826338960972409135720437886908785614210084478384078153933033666173528598766851519250363351426064628258395419088471393111667700918729834985086320676654241316634560118019882210119337445330955835919527132875094715720056355846555701747536986251959671182002652387533752686564043006387189322467736998297209841197138514624008092952665297074506030396759964773170346856327642777902149445005909504598179054586496247232351389508014081573398665168934777318775791837135956795815584276253258339396528978452820191499230693717636210145879266988271829694083738038077122921912824291024453524934340394022902439339419069066610906029009607658742583030029946393156561520787087964747197937630779342237465827257153805466210260228188924675519409775662832664987585685048138307557155853256492278248578919164433813909200793462409840728598763947896501274688614908225267667177701366807438669326623433058218213443062408099675370787076912329373870411405571681619566725953239506667420107865842757661716617919733022513948046643510651078865572997073260056512303946747105979292110003450407489924836142530065624248678935670746065899317880622000638073367400369402302158314033221251653687424468051520786824115060818437539740055831113916055471483034808874617739843143938172333284262271469979254217432808855959164876994617775909494325360213896498452140653220161981435472501438614603134083005358006470142761755484855437912983836446436796696188799077203473615780300012474195744483595979884254878292198513051622049258764225807542304782444925923341494613428285320468971377328625604051015673705708956626631746891317417396029708456942140863834024650370695696409569123851257481398138888752582030034869787470552028103940729085803240085987569938856671422005581372166650497556769407574429118602955596567887598719046627586511067969787887833869882951233268645804198215954308918671793783729688211286988794688142675294614947234254538088223560934361145676358046211831627683890340178210365154617001635372653348370422726598857026002477929177288289123739070353691365311645518715750245510770260801141976525982246774038853785442558514521428892111522375063439093517487315386834431958429128019507409290585031131279294212910898440219254009319059392162713475019891930586543895163777707714398600339409818266699397506309660607491889862314049922386749339985169589508248405389966372279472368480994566101598780613797426213113809272341186010030687520020604372850246235750477820866306072249009107891882044221153421572454947459745218327822086016027106392614825047067937041894741980478402880643992102437022027245971074555342753214011193822631471157489050501952568860820401920833804902096485703539056563038766617104309221550246208420803236102663918198532911605896456149452566847699113209434574026975730941194301255893892984954283771852399164279918441721650800291777296251806440774844416950920058440264116651186795378697819243783770608877693892976259074109340205317427395771831523271197915676367134269045536541349377669517895718456625645303642348316558188118515730182101737730372539888936801532474040601312554322979825347707786172180885839980406705981955978435796108903153166067253815216088254644383863063765964591075911345075411534030241991912223282597135304726831878735179556423807036390298160370960490420948364372810759652439684318393869597369898890279242300069046830503059657125858043553373113729594871087942860315948055593344147677932119321424028600190292509664619336217631490498027916950777163752425164438252351468600785554531423979834791445600150108890772427261831495874930509509679414887523661977405914784645916502014777727175798319834059621717421648892845862179131151362279648610789587662840109016397812560123410281881558369684764808427158589621053418154441646967665840185085136102607775409115734963155803833286789583501481573372226195484679719674349562964338708154613401347218002057551149833995233231065737207320566592164688912051242035274499618147339269167576074688060033124924140616954310412384530235227956908301847998406574780144353357884105883387959218296741020722854954100887277304947480547152700263711114665576920925961724019512061174430771918685854961160518537953685957360038825116204970615989239857746870933341859397441672382036764530524729808239765622931171203720639459438906663253650619610229282159290703571350858167568164860431176138378765549296218562697437528856056494473388171789278961444737763604387979003662127798027475934505640301147524790717395857232708656327584954348395562117135230986025734451614751913114005140624270977801178582308406486958461409022442175446835595658183592121309722334474915831657286355138025915434411459395393534709704525536550715392
+-1189731495357231765085759326628007073479956869869102141501186852722712468967898039614731304160537056720508735524794218059326466407441245944473611725143413248467166796545513080184004525512467970210316955903084154210995219628561620502745688412979158287475743437748747529021767100495257876251386789060100486382120270573746835428422826338960972409135720437886908785614210084478384078153933033666173528598766851519250363351426064628258395419088471393111667700918729834985086320676654241316634560118019882210119337445330955835919527132875094715720056355846555701747536986251959671182002652387533752686564043006387189322467736998297209841197138514624008092952665297074506030396759964773170346856327642777902149445005909504598179054586496247232351389508014081573398665168934777318775791837135956795815584276253258339396528978452820191499230693717636210145879266988271829694083738038077122921912824291024453524934340394022902439339419069066610906029009607658742583030029946393156561520787087964747197937630779342237465827257153805466210260228188924675519409775662832664987585685048138307557155853256492278248578919164433813909200793462409840728598763947896501274688614908225267667177701366807438669326623433058218213443062408099675370787076912329373870411405571681619566725953239506667420107865842757661716617919733022513948046643510651078865572997073260056512303946747105979292110003450407489924836142530065624248678935670746065899317880622000638073367400369402302158314033221251653687424468051520786824115060818437539740055831113916055471483034808874617739843143938172333284262271469979254217432808855959164876994617775909494325360213896498452140653220161981435472501438614603134083005358006470142761755484855437912983836446436796696188799077203473615780300012474195744483595979884254878292198513051622049258764225807542304782444925923341494613428285320468971377328625604051015673705708956626631746891317417396029708456942140863834024650370695696409569123851257481398138888752582030034869787470552028103940729085803240085987569938856671422005581372166650497556769407574429118602955596567887598719046627586511067969787887833869882951233268645804198215954308918671793783729688211286988794688142675294614947234254538088223560934361145676358046211831627683890340178210365154617001635372653348370422726598857026002477929177288289123739070353691365311645518715750245510770260801141976525982246774038853785442558514521428892111522375063439093517487315386834431958429128019507409290585031131279294212910898440219254009319059392162713475019891930586543895163777707714398600339409818266699397506309660607491889862314049922386749339985169589508248405389966372279472368480994566101598780613797426213113809272341186010030687520020604372850246235750477820866306072249009107891882044221153421572454947459745218327822086016027106392614825047067937041894741980478402880643992102437022027245971074555342753214011193822631471157489050501952568860820401920833804902096485703539056563038766617104309221550246208420803236102663918198532911605896456149452566847699113209434574026975730941194301255893892984954283771852399164279918441721650800291777296251806440774844416950920058440264116651186795378697819243783770608877693892976259074109340205317427395771831523271197915676367134269045536541349377669517895718456625645303642348316558188118515730182101737730372539888936801532474040601312554322979825347707786172180885839980406705981955978435796108903153166067253815216088254644383863063765964591075911345075411534030241991912223282597135304726831878735179556423807036390298160370960490420948364372810759652439684318393869597369898890279242300069046830503059657125858043553373113729594871087942860315948055593344147677932119321424028600190292509664619336217631490498027916950777163752425164438252351468600785554531423979834791445600150108890772427261831495874930509509679414887523661977405914784645916502014777727175798319834059621717421648892845862179131151362279648610789587662840109016397812560123410281881558369684764808427158589621053418154441646967665840185085136102607775409115734963155803833286789583501481573372226195484679719674349562964338708154613401347218002057551149833995233231065737207320566592164688912051242035274499618147339269167576074688060033124924140616954310412384530235227956908301847998406574780144353357884105883387959218296741020722854954100887277304947480547152700263711114665576920925961724019512061174430771918685854961160518537953685957360038825116204970615989239857746870933341859397441672382036764530524729808239765622931171203720639459438906663253650619610229282159290703571350858167568164860431176138378765549296218562697437528856056494473388171789278961444737763604387979003662127798027475934505640301147524790717395857232708656327584954348395562117135230986025734451614751913114005140624270977801178582308406486958461409022442175446835595658183592121309722334474915831657286355138025915434411459395393534709704525536550715392.001
+2.10194769648722560638559437493487419692039291281477365763560242583468662402879090222995728254318237304687499e-45
+2.101947696487225606385594374934874196920392912814773657635602425834686624028790902229957282543182373046875e-45
+2.10194769648722560638559437493487419692039291281477365763560242583468662402879090222995728254318237304687501e-45
+-2.10194769648722560638559437493487419692039291281477365763560242583468662402879090222995728254318237304687499e-45
+-2.101947696487225606385594374934874196920392912814773657635602425834686624028790902229957282543182373046875e-45
+-2.10194769648722560638559437493487419692039291281477365763560242583468662402879090222995728254318237304687501e-45
+3.50324616081204267730932395822479032820065485469128942939267070972447770671465150371659547090530395507812499e-45
+3.503246160812042677309323958224790328200654854691289429392670709724477706714651503716595470905303955078125e-45
+3.50324616081204267730932395822479032820065485469128942939267070972447770671465150371659547090530395507812501e-45
+-3.50324616081204267730932395822479032820065485469128942939267070972447770671465150371659547090530395507812499e-45
+-3.503246160812042677309323958224790328200654854691289429392670709724477706714651503716595470905303955078125e-45
+-3.50324616081204267730932395822479032820065485469128942939267070972447770671465150371659547090530395507812501e-45
+7.410984687618698162648531893023320585475897039214871466383785237510132609053131277979497545424539885696948470431685765963899850655339096945981621940161728171894510697854671067917687257517734731555330779540854980960845750095811137303474765809687100959097544227100475730780971111893578483867565399878350301522805593404659373979179073872386829939581848166016912201945649993128979841136206248449867871357218035220901702390328579173252022052897402080290685402160661237554998340267130003581248647904138574340187552090159017259254714629617513415977493871857473787096164563890871811984127167305601704549300470526959016576377688490826798697257336652176556794107250876433756084600398490497214911746308553955635418864151316847843631308023759629577398300170898437499e-324
+7.4109846876186981626485318930233205854758970392148714663837852375101326090531312779794975454245398856969484704316857659638998506553390969459816219401617281718945106978546710679176872575177347315553307795408549809608457500958111373034747658096871009590975442271004757307809711118935784838675653998783503015228055934046593739791790738723868299395818481660169122019456499931289798411362062484498678713572180352209017023903285791732520220528974020802906854021606612375549983402671300035812486479041385743401875520901590172592547146296175134159774938718574737870961645638908718119841271673056017045493004705269590165763776884908267986972573366521765567941072508764337560846003984904972149117463085539556354188641513168478436313080237596295773983001708984375e-324
+7.410984687618698162648531893023320585475897039214871466383785237510132609053131277979497545424539885696948470431685765963899850655339096945981621940161728171894510697854671067917687257517734731555330779540854980960845750095811137303474765809687100959097544227100475730780971111893578483867565399878350301522805593404659373979179073872386829939581848166016912201945649993128979841136206248449867871357218035220901702390328579173252022052897402080290685402160661237554998340267130003581248647904138574340187552090159017259254714629617513415977493871857473787096164563890871811984127167305601704549300470526959016576377688490826798697257336652176556794107250876433756084600398490497214911746308553955635418864151316847843631308023759629577398300170898437501e-324
+-7.410984687618698162648531893023320585475897039214871466383785237510132609053131277979497545424539885696948470431685765963899850655339096945981621940161728171894510697854671067917687257517734731555330779540854980960845750095811137303474765809687100959097544227100475730780971111893578483867565399878350301522805593404659373979179073872386829939581848166016912201945649993128979841136206248449867871357218035220901702390328579173252022052897402080290685402160661237554998340267130003581248647904138574340187552090159017259254714629617513415977493871857473787096164563890871811984127167305601704549300470526959016576377688490826798697257336652176556794107250876433756084600398490497214911746308553955635418864151316847843631308023759629577398300170898437499e-324
+-7.4109846876186981626485318930233205854758970392148714663837852375101326090531312779794975454245398856969484704316857659638998506553390969459816219401617281718945106978546710679176872575177347315553307795408549809608457500958111373034747658096871009590975442271004757307809711118935784838675653998783503015228055934046593739791790738723868299395818481660169122019456499931289798411362062484498678713572180352209017023903285791732520220528974020802906854021606612375549983402671300035812486479041385743401875520901590172592547146296175134159774938718574737870961645638908718119841271673056017045493004705269590165763776884908267986972573366521765567941072508764337560846003984904972149117463085539556354188641513168478436313080237596295773983001708984375e-324
+-7.410984687618698162648531893023320585475897039214871466383785237510132609053131277979497545424539885696948470431685765963899850655339096945981621940161728171894510697854671067917687257517734731555330779540854980960845750095811137303474765809687100959097544227100475730780971111893578483867565399878350301522805593404659373979179073872386829939581848166016912201945649993128979841136206248449867871357218035220901702390328579173252022052897402080290685402160661237554998340267130003581248647904138574340187552090159017259254714629617513415977493871857473787096164563890871811984127167305601704549300470526959016576377688490826798697257336652176556794107250876433756084600398490497214911746308553955635418864151316847843631308023759629577398300170898437501e-324
+5.4677992978237119037926089004291297245985762235403450155814707305425575329500966052143410629387408077958710210208052966529504784489330482549602621133847135082257338717668975178538378957084503396349323438489751160934104796903302909028868611999312592165232778075745690821530731336739429587895774023213939331012985331912661021188896306095323395084578542200319963179359407180003251440084380484161504585462684082946932782829488183829817567452314437076943950532707791252404699268678810198502871250235796855577909830559749628817599194837522029036891995648803056846354520653635957919882905363521007017169741463296044392266269433408052686419017699718627761948763856040592690841721239300491445991666051031755802326720329666454066568630314348735511753639418257984253319063825247065727664852328745422305642626091617823968872438962470092440688372515677832232712866924800106797113478024083516199991991274936894113006233377518471389394984262004503058455485659100090665241525454803628182902241401701783637353179296850056973639305945938813428953287892593620291195986011128990061888798763718548789025717537674780281005583347165047846045925077914824515331335131286063574407181821236377907693209224423490663289916878620725507793163931390372011875799729330162278748985052557432333005334989519381566364065326138465761456173231416844807264090741841972247545424908843928136253653308813487994328446248389608261444391573619177442907290731163188581917588219420107047265367485141413919810885909689112244064797106324295291545892937991321479061743491490060940946128274533657682130125169586930571899403551122506297763180795732325134340989331155893724289358918212707392997768032299997207208451112971425779939507837165263255764268971211819536322993221774123134726665579460265871378186589562858761835613344584269098062275786969729830545786485401407774313414954958161677096004701941411411592755485864471870515173326244464631295701572087440183178339987662926763241220698078822661709054601073523477544653542795020468256078409306409100874886828781860529824879343987945751252081314345990313550683792348814627862441324030155730592166581251009922787324590431548734575328663628650380722603024383412564651446272117561042207738413114131099731016728935023152239431311619533848376583687509108453086730196255111695352464186678221927564757730319825223049341618853631333478241227227268084583396688436229936266854011427192767039363517491659523133852472534104124441112346615696891097070121463652258681270378076538381697594264658479637863087159293838880752928175545408262813403793568695416998388572304528748824756265665683890518422696169422338806137532304784682662448207928681740476188343739117833525916386815135793034906806117413105008719197882837614738262050320291539494104952056471606645482046176634075459021552555959590354956262127809953013679512507451424271839221946794056861055980558363033732905772356986051180966474116423192194741572438649215204229781279620370445373851348786918527399785630808242657122705381806661616271132182017797793661244078445747547535623384548769818529655539279036503234072455810991588075181817695975173110136482659854557506203058080551018873203138260451109855100526720073566126209666125604482413705611996796777927332827103568863352291499261312290355143742018042254470707107847293593205234049774839191754781030496978091006099559675240966730110167624903610656473267105556155633783594089546261107653110531808279445757724399186120387548675148632176049190701680305210224388072261974806791922636412897526952793677946622674149577084803568051242934076450942927092705684547042915490323112457971853658760725588190377666477106903106693847278847646032201293023329503348730723947218797410452333910847913892827195814551858335519518939031446093385329182820714173657946661746005901866885589732922652604573972842197231187365263381958925227970038358064987248233271706462687651143350472018043321314534759819524203308490914358596886150053406629512434788155355109100540319857813535695923273426256911552977539394209918630668466632881929661971212772444625151371953428875491139683919687008724010475217255347915698820960215217257390308560235323463096946442080548018754166369706161589705215873687166365628787796501470056870127729464714362172216802441045276911597009443281135389729130222603185665646434661947627628077723219376892727386120519287577405410510114936151502752997122750262781911372625997223415283516995479265631485799456782561734766648462849641064097181818204279498552827825384186202065516999362573388136163077477126602169410435905014077049808497409025369325795765272066650278004200357878990911374982857977108488482528354406313893864211497105765030504600982253488805474531798742143374465080240030582370086699167937651038307909706139327119325418854546478285735654541635477790346964782617354265050767878335230272194896680141986745074630225893106573559558843545841186025169531604151588481389164948914823593944287133336263680358191369540321930649824471425485137777984823525402115151171093313613251350685343824859052220126891551966018355920872775724807128769003243129486808733796350497668255116485157191011858830643898323628223472099280243583164434348347014910398004439821970508280440872759395827943270985008769143562351938091476215083548164137333541883808870019116234099013452929807950151652297436436006149684939775781234660954156154478642694176038524277810483833149798681345708089152179193979463169402340611793486272301808073267534612685593859596787866884211031341417903391749825320454663508370385251831778477311017089729361152161928815389818579983544490982891734081131312309744330960666031291451740885503458543884956367654943799264600314531815427932691107874782328654759293575803481929361961781073958502075438499070633193799699311694287183299423475339817655608058724723221867087563064557636112380829514501382073257737022472866608244164310385205213523702910787182472517125030106491031844871593141759729773907719510044049352857426592936763727969496103940591601975078602859660478614119405428212830134490731706220583788265344728818766885126977588151111984290444321648931907188080336064713873288834096229203276676119810521851726133377700616341304257822975788967472152742255041912584197045423031298506219011800240120182445838590696647416285334515631019799007515682004250060857020904012215375170479800482680554499806010766109655061507421747722461180617361402575082294678925605271083587897845390768226405648508518103525778638618195775128516073959272990148239415346263486966573934577450787243667063244378381883115827207605856174876350045086885320626669331311880593775916269643646395423220549940790476989709243027420158390806135690975149384714684219964938182719962913931464979458639185519531490009437619838306362365453754807654884704163490469296444427144778593725687358437087390151990694667516279202024332494828210657618261952038597230263799412584275851667403910657370879707181053365818502680037431560091209982641738995652793235851569372314130107647166085235615697257094269133100914135783178856280392139325001352841718610484616627448189556913621837791650699820323059708766420810133584841826718631681683381743511974264126250984214812397119978273917903889865891718836792263377888052458189238746074986456016681098722869419588274020181430652732817858728473849369539367463917171317324882099804999043054467247785592038464723442276239896066431580123756428540074945472427752568981171400621705853374875885943072600692576914790467205905272372594740187988081900317493185005142913607163380720069786786782095331840893694073778325119471833528492917081008547303414509381563617864195257751546539575461435803625993888325647883541039192368366987400263049681218831477776345118518503709588840859023379762456561030683928115349942393963185677123055324771693784214924931737043793679546051454845624150270955450608318747395755728950832754611277041359602301205138509175543313522772786504141007552691902249572375175731740923618769197304652898352694386665448260033458575323252814233868098279476166764258284911434288072243178941698347365985427696983129579496059032032841281149923518087084876885114369033227736521245740554711771423492719899982357711910225545480424688322195336240492253136281857837808491795993788199125205555222116581071134476787468430539307909617442106685159519071053844987343666452494280317720153567054364117244775141336558406098548803924509496052261825198043140272655303625315605326569530252885854991822289219201218313590745412010446642247111703901991591338062693320157180618736569439969283245279430312651192668788340033626825194260296262959884258597703584888770801961209652822982322376122303586169861685106043820510444293432856251210395693261264867823980172683352796141772210301725997652373804152525037162852291403804455997331367378463632437773242905518075065414724295857460288225400061608664961649196400079359622673770607898395269075056596627116148289491042491764170924014885106158235482774778418134123293974436877051995673618683751115353808771434984204447736174758316063096245047311279841579995578186609402864244042751443128536278453430633423118662852688374229600894418958824842459450540826176452145829389286103522774101195556029650753254244433565937938526828990893149766298997738359913887178888607190765709867052470880785937935110091424743449966353497865681753841380246075612094033617488674676296822570077027076266879557913673839341012099558043806442348798053951239274913334631522409564461770434875790402230022872647568436177018658068697071731879399180374560963492726714528729224208938589940272515747888379118461617702271694075087419634147298076764775745707026934442908236664400557265527951453482191684597674273691978253678690951178777239573925410438679099374700609973920128201422381329108236575369403675960765238333778127017096574296148321075566959285042221837159799800133563239963969638610872680393210300180152020613051613414547163713772512617757277955979895866367571776456268564191092477027650135832200376440239783726540552694851717269598489288851529660975027775639565229734596726205832668434979354541943345062977891187146561050118118108223323735210843681128615413601091222007912350536959777114306541514511332368936078560929788143798814391221507522370648646767364209132147312407014953113532379838195728491128536978285918066991040993153064356179903885952027952713749653604502053512355449916680887234238773855581636172479594866871765094513940103284167914110196720261110812716776424260154507395050380575452850420730818412994731079307343538376880280124019321040198038723558784544408584344466090982802067326529000931562048932875469079874956595180595395347093285140279165467965596318365749701535812384333240968283640721344003442002691613772056762099098025739332715913970186225176459563484134139746647940170537900275350480490468851439300771949915194703080576611022590670399844931867609777417528903454731922206378932141464755402629420074293816349270038351339419146768473851353171629153912238797141905920143036064131705230421762305232861503856799511155936565169005916711845389135580928162511912438531204156138447775120789548666143600293412065767167106888509172568003530668539460588248316513392652567856224602697296203328920073354425994044956624831346979458846837597950064151867164583749203433942592178528868981311575331848941597492470436782387502687532649093096498315347403977436001399982102030846763698994785054617523241463186980898394504211430763617825306895065661536045431497903759118007934839122881885863091769469883539876840543521295706315919855784493235603866268925981702690270202829595794350800918257913991744455922683343374046671669930219650268554687499e-4951
+5.46779929782371190379260890042912972459857622354034501558147073054255753295009660521434106293874080779587102102080529665295047844893304825496026211338471350822573387176689751785383789570845033963493234384897511609341047969033029090288686119993125921652327780757456908215307313367394295878957740232139393310129853319126610211888963060953233950845785422003199631793594071800032514400843804841615045854626840829469327828294881838298175674523144370769439505327077912524046992686788101985028712502357968555779098305597496288175991948375220290368919956488030568463545206536359579198829053635210070171697414632960443922662694334080526864190176997186277619487638560405926908417212393004914459916660510317558023267203296664540665686303143487355117536394182579842533190638252470657276648523287454223056426260916178239688724389624700924406883725156778322327128669248001067971134780240835161999919912749368941130062333775184713893949842620045030584554856591000906652415254548036281829022414017017836373531792968500569736393059459388134289532878925936202911959860111289900618887987637185487890257175376747802810055833471650478460459250779148245153313351312860635744071818212363779076932092244234906632899168786207255077931639313903720118757997293301622787489850525574323330053349895193815663640653261384657614561732314168448072640907418419722475454249088439281362536533088134879943284462483896082614443915736191774429072907311631885819175882194201070472653674851414139198108859096891122440647971063242952915458929379913214790617434914900609409461282745336576821301251695869305718994035511225062977631807957323251343409893311558937242893589182127073929977680322999972072084511129714257799395078371652632557642689712118195363229932217741231347266655794602658713781865895628587618356133445842690980622757869697298305457864854014077743134149549581616770960047019414114115927554858644718705151733262444646312957015720874401831783399876629267632412206980788226617090546010735234775446535427950204682560784093064091008748868287818605298248793439879457512520813143459903135506837923488146278624413240301557305921665812510099227873245904315487345753286636286503807226030243834125646514462721175610422077384131141310997310167289350231522394313116195338483765836875091084530867301962551116953524641866782219275647577303198252230493416188536313334782412272272680845833966884362299362668540114271927670393635174916595231338524725341041244411123466156968910970701214636522586812703780765383816975942646584796378630871592938388807529281755454082628134037935686954169983885723045287488247562656656838905184226961694223388061375323047846826624482079286817404761883437391178335259163868151357930349068061174131050087191978828376147382620503202915394941049520564716066454820461766340754590215525559595903549562621278099530136795125074514242718392219467940568610559805583630337329057723569860511809664741164231921947415724386492152042297812796203704453738513487869185273997856308082426571227053818066616162711321820177977936612440784457475475356233845487698185296555392790365032340724558109915880751818176959751731101364826598545575062030580805510188732031382604511098551005267200735661262096661256044824137056119967967779273328271035688633522914992613122903551437420180422544707071078472935932052340497748391917547810304969780910060995596752409667301101676249036106564732671055561556337835940895462611076531105318082794457577243991861203875486751486321760491907016803052102243880722619748067919226364128975269527936779466226741495770848035680512429340764509429270927056845470429154903231124579718536587607255881903776664771069031066938472788476460322012930233295033487307239472187974104523339108479138928271958145518583355195189390314460933853291828207141736579466617460059018668855897329226526045739728421972311873652633819589252279700383580649872482332717064626876511433504720180433213145347598195242033084909143585968861500534066295124347881553551091005403198578135356959232734262569115529775393942099186306684666328819296619712127724446251513719534288754911396839196870087240104752172553479156988209602152172573903085602353234630969464420805480187541663697061615897052158736871663656287877965014700568701277294647143621722168024410452769115970094432811353897291302226031856656464346619476276280777232193768927273861205192875774054105101149361515027529971227502627819113726259972234152835169954792656314857994567825617347666484628496410640971818182042794985528278253841862020655169993625733881361630774771266021694104359050140770498084974090253693257957652720666502780042003578789909113749828579771084884825283544063138938642114971057650305046009822534888054745317987421433744650802400305823700866991679376510383079097061393271193254188545464782857356545416354777903469647826173542650507678783352302721948966801419867450746302258931065735595588435458411860251695316041515884813891649489148235939442871333362636803581913695403219306498244714254851377779848235254021151511710933136132513506853438248590522201268915519660183559208727757248071287690032431294868087337963504976682551164851571910118588306438983236282234720992802435831644343483470149103980044398219705082804408727593958279432709850087691435623519380914762150835481641373335418838088700191162340990134529298079501516522974364360061496849397757812346609541561544786426941760385242778104838331497986813457080891521791939794631694023406117934862723018080732675346126855938595967878668842110313414179033917498253204546635083703852518317784773110170897293611521619288153898185799835444909828917340811313123097443309606660312914517408855034585438849563676549437992646003145318154279326911078747823286547592935758034819293619617810739585020754384990706331937996993116942871832994234753398176556080587247232218670875630645576361123808295145013820732577370224728666082441643103852052135237029107871824725171250301064910318448715931417597297739077195100440493528574265929367637279694961039405916019750786028596604786141194054282128301344907317062205837882653447288187668851269775881511119842904443216489319071880803360647138732888340962292032766761198105218517261333777006163413042578229757889674721527422550419125841970454230312985062190118002401201824458385906966474162853345156310197990075156820042500608570209040122153751704798004826805544998060107661096550615074217477224611806173614025750822946789256052710835878978453907682264056485085181035257786386181957751285160739592729901482394153462634869665739345774507872436670632443783818831158272076058561748763500450868853206266693313118805937759162696436463954232205499407904769897092430274201583908061356909751493847146842199649381827199629139314649794586391855195314900094376198383063623654537548076548847041634904692964444271447785937256873584370873901519906946675162792020243324948282106576182619520385972302637994125842758516674039106573708797071810533658185026800374315600912099826417389956527932358515693723141301076471660852356156972570942691331009141357831788562803921393250013528417186104846166274481895569136218377916506998203230597087664208101335848418267186316816833817435119742641262509842148123971199782739179038898658917188367922633778880524581892387460749864560166810987228694195882740201814306527328178587284738493695393674639171713173248820998049990430544672477855920384647234422762398960664315801237564285400749454724277525689811714006217058533748758859430726006925769147904672059052723725947401879880819003174931850051429136071633807200697867867820953318408936940737783251194718335284929170810085473034145093815636178641952577515465395754614358036259938883256478835410391923683669874002630496812188314777763451185185037095888408590233797624565610306839281153499423939631856771230553247716937842149249317370437936795460514548456241502709554506083187473957557289508327546112770413596023012051385091755433135227727865041410075526919022495723751757317409236187691973046528983526943866654482600334585753232528142338680982794761667642582849114342880722431789416983473659854276969831295794960590320328412811499235180870848768851143690332277365212457405547117714234927198999823577119102255454804246883221953362404922531362818578378084917959937881991252055552221165810711344767874684305393079096174421066851595190710538449873436664524942803177201535670543641172447751413365584060985488039245094960522618251980431402726553036253156053265695302528858549918222892192012183135907454120104466422471117039019915913380626933201571806187365694399692832452794303126511926687883400336268251942602962629598842585977035848887708019612096528229823223761223035861698616851060438205104442934328562512103956932612648678239801726833527961417722103017259976523738041525250371628522914038044559973313673784636324377732429055180750654147242958574602882254000616086649616491964000793596226737706078983952690750565966271161482894910424917641709240148851061582354827747784181341232939744368770519956736186837511153538087714349842044477361747583160630962450473112798415799955781866094028642440427514431285362784534306334231186628526883742296008944189588248424594505408261764521458293892861035227741011955560296507532542444335659379385268289908931497662989977383599138871788886071907657098670524708807859379351100914247434499663534978656817538413802460756120940336174886746762968225700770270762668795579136738393410120995580438064423487980539512392749133346315224095644617704348757904022300228726475684361770186580686970717318793991803745609634927267145287292242089385899402725157478883791184616177022716940750874196341472980767647757457070269344429082366644005572655279514534821916845976742736919782536786909511787772395739254104386790993747006099739201282014223813291082365753694036759607652383337781270170965742961483210755669592850422218371597998001335632399639696386108726803932103001801520206130516134145471637137725126177572779559798958663675717764562685641910924770276501358322003764402397837265405526948517172695984892888515296609750277756395652297345967262058326684349793545419433450629778911871465610501181181082233237352108436811286154136010912220079123505369597771143065415145113323689360785609297881437988143912215075223706486467673642091321473124070149531135323798381957284911285369782859180669910409931530643561799038859520279527137496536045020535123554499166808872342387738555816361724795948668717650945139401032841679141101967202611108127167764242601545073950503805754528504207308184129947310793073435383768802801240193210401980387235587845444085843444660909828020673265290009315620489328754690798749565951805953953470932851402791654679655963183657497015358123843332409682836407213440034420026916137720567620990980257393327159139701862251764595634841341397466479401705379002753504804904688514393007719499151947030805766110225906703998449318676097774175289034547319222063789321414647554026294200742938163492700383513394191467684738513531716291539122387971419059201430360641317052304217623052328615038567995111559365651690059167118453891355809281625119124385312041561384477751207895486661436002934120657671671068885091725680035306685394605882483165133926525678562246026972962033289200733544259940449566248313469794588468375979500641518671645837492034339425921785288689813115753318489415974924704367823875026875326490930964983153474039774360013999821020308467636989947850546175232414631869808983945042114307636178253068950656615360454314979037591180079348391228818858630917694698835398768405435212957063159198557844932356038662689259817026902702028295957943508009182579139917444559226833433740466716699302196502685546875e-4951
+5.4677992978237119037926089004291297245985762235403450155814707305425575329500966052143410629387408077958710210208052966529504784489330482549602621133847135082257338717668975178538378957084503396349323438489751160934104796903302909028868611999312592165232778075745690821530731336739429587895774023213939331012985331912661021188896306095323395084578542200319963179359407180003251440084380484161504585462684082946932782829488183829817567452314437076943950532707791252404699268678810198502871250235796855577909830559749628817599194837522029036891995648803056846354520653635957919882905363521007017169741463296044392266269433408052686419017699718627761948763856040592690841721239300491445991666051031755802326720329666454066568630314348735511753639418257984253319063825247065727664852328745422305642626091617823968872438962470092440688372515677832232712866924800106797113478024083516199991991274936894113006233377518471389394984262004503058455485659100090665241525454803628182902241401701783637353179296850056973639305945938813428953287892593620291195986011128990061888798763718548789025717537674780281005583347165047846045925077914824515331335131286063574407181821236377907693209224423490663289916878620725507793163931390372011875799729330162278748985052557432333005334989519381566364065326138465761456173231416844807264090741841972247545424908843928136253653308813487994328446248389608261444391573619177442907290731163188581917588219420107047265367485141413919810885909689112244064797106324295291545892937991321479061743491490060940946128274533657682130125169586930571899403551122506297763180795732325134340989331155893724289358918212707392997768032299997207208451112971425779939507837165263255764268971211819536322993221774123134726665579460265871378186589562858761835613344584269098062275786969729830545786485401407774313414954958161677096004701941411411592755485864471870515173326244464631295701572087440183178339987662926763241220698078822661709054601073523477544653542795020468256078409306409100874886828781860529824879343987945751252081314345990313550683792348814627862441324030155730592166581251009922787324590431548734575328663628650380722603024383412564651446272117561042207738413114131099731016728935023152239431311619533848376583687509108453086730196255111695352464186678221927564757730319825223049341618853631333478241227227268084583396688436229936266854011427192767039363517491659523133852472534104124441112346615696891097070121463652258681270378076538381697594264658479637863087159293838880752928175545408262813403793568695416998388572304528748824756265665683890518422696169422338806137532304784682662448207928681740476188343739117833525916386815135793034906806117413105008719197882837614738262050320291539494104952056471606645482046176634075459021552555959590354956262127809953013679512507451424271839221946794056861055980558363033732905772356986051180966474116423192194741572438649215204229781279620370445373851348786918527399785630808242657122705381806661616271132182017797793661244078445747547535623384548769818529655539279036503234072455810991588075181817695975173110136482659854557506203058080551018873203138260451109855100526720073566126209666125604482413705611996796777927332827103568863352291499261312290355143742018042254470707107847293593205234049774839191754781030496978091006099559675240966730110167624903610656473267105556155633783594089546261107653110531808279445757724399186120387548675148632176049190701680305210224388072261974806791922636412897526952793677946622674149577084803568051242934076450942927092705684547042915490323112457971853658760725588190377666477106903106693847278847646032201293023329503348730723947218797410452333910847913892827195814551858335519518939031446093385329182820714173657946661746005901866885589732922652604573972842197231187365263381958925227970038358064987248233271706462687651143350472018043321314534759819524203308490914358596886150053406629512434788155355109100540319857813535695923273426256911552977539394209918630668466632881929661971212772444625151371953428875491139683919687008724010475217255347915698820960215217257390308560235323463096946442080548018754166369706161589705215873687166365628787796501470056870127729464714362172216802441045276911597009443281135389729130222603185665646434661947627628077723219376892727386120519287577405410510114936151502752997122750262781911372625997223415283516995479265631485799456782561734766648462849641064097181818204279498552827825384186202065516999362573388136163077477126602169410435905014077049808497409025369325795765272066650278004200357878990911374982857977108488482528354406313893864211497105765030504600982253488805474531798742143374465080240030582370086699167937651038307909706139327119325418854546478285735654541635477790346964782617354265050767878335230272194896680141986745074630225893106573559558843545841186025169531604151588481389164948914823593944287133336263680358191369540321930649824471425485137777984823525402115151171093313613251350685343824859052220126891551966018355920872775724807128769003243129486808733796350497668255116485157191011858830643898323628223472099280243583164434348347014910398004439821970508280440872759395827943270985008769143562351938091476215083548164137333541883808870019116234099013452929807950151652297436436006149684939775781234660954156154478642694176038524277810483833149798681345708089152179193979463169402340611793486272301808073267534612685593859596787866884211031341417903391749825320454663508370385251831778477311017089729361152161928815389818579983544490982891734081131312309744330960666031291451740885503458543884956367654943799264600314531815427932691107874782328654759293575803481929361961781073958502075438499070633193799699311694287183299423475339817655608058724723221867087563064557636112380829514501382073257737022472866608244164310385205213523702910787182472517125030106491031844871593141759729773907719510044049352857426592936763727969496103940591601975078602859660478614119405428212830134490731706220583788265344728818766885126977588151111984290444321648931907188080336064713873288834096229203276676119810521851726133377700616341304257822975788967472152742255041912584197045423031298506219011800240120182445838590696647416285334515631019799007515682004250060857020904012215375170479800482680554499806010766109655061507421747722461180617361402575082294678925605271083587897845390768226405648508518103525778638618195775128516073959272990148239415346263486966573934577450787243667063244378381883115827207605856174876350045086885320626669331311880593775916269643646395423220549940790476989709243027420158390806135690975149384714684219964938182719962913931464979458639185519531490009437619838306362365453754807654884704163490469296444427144778593725687358437087390151990694667516279202024332494828210657618261952038597230263799412584275851667403910657370879707181053365818502680037431560091209982641738995652793235851569372314130107647166085235615697257094269133100914135783178856280392139325001352841718610484616627448189556913621837791650699820323059708766420810133584841826718631681683381743511974264126250984214812397119978273917903889865891718836792263377888052458189238746074986456016681098722869419588274020181430652732817858728473849369539367463917171317324882099804999043054467247785592038464723442276239896066431580123756428540074945472427752568981171400621705853374875885943072600692576914790467205905272372594740187988081900317493185005142913607163380720069786786782095331840893694073778325119471833528492917081008547303414509381563617864195257751546539575461435803625993888325647883541039192368366987400263049681218831477776345118518503709588840859023379762456561030683928115349942393963185677123055324771693784214924931737043793679546051454845624150270955450608318747395755728950832754611277041359602301205138509175543313522772786504141007552691902249572375175731740923618769197304652898352694386665448260033458575323252814233868098279476166764258284911434288072243178941698347365985427696983129579496059032032841281149923518087084876885114369033227736521245740554711771423492719899982357711910225545480424688322195336240492253136281857837808491795993788199125205555222116581071134476787468430539307909617442106685159519071053844987343666452494280317720153567054364117244775141336558406098548803924509496052261825198043140272655303625315605326569530252885854991822289219201218313590745412010446642247111703901991591338062693320157180618736569439969283245279430312651192668788340033626825194260296262959884258597703584888770801961209652822982322376122303586169861685106043820510444293432856251210395693261264867823980172683352796141772210301725997652373804152525037162852291403804455997331367378463632437773242905518075065414724295857460288225400061608664961649196400079359622673770607898395269075056596627116148289491042491764170924014885106158235482774778418134123293974436877051995673618683751115353808771434984204447736174758316063096245047311279841579995578186609402864244042751443128536278453430633423118662852688374229600894418958824842459450540826176452145829389286103522774101195556029650753254244433565937938526828990893149766298997738359913887178888607190765709867052470880785937935110091424743449966353497865681753841380246075612094033617488674676296822570077027076266879557913673839341012099558043806442348798053951239274913334631522409564461770434875790402230022872647568436177018658068697071731879399180374560963492726714528729224208938589940272515747888379118461617702271694075087419634147298076764775745707026934442908236664400557265527951453482191684597674273691978253678690951178777239573925410438679099374700609973920128201422381329108236575369403675960765238333778127017096574296148321075566959285042221837159799800133563239963969638610872680393210300180152020613051613414547163713772512617757277955979895866367571776456268564191092477027650135832200376440239783726540552694851717269598489288851529660975027775639565229734596726205832668434979354541943345062977891187146561050118118108223323735210843681128615413601091222007912350536959777114306541514511332368936078560929788143798814391221507522370648646767364209132147312407014953113532379838195728491128536978285918066991040993153064356179903885952027952713749653604502053512355449916680887234238773855581636172479594866871765094513940103284167914110196720261110812716776424260154507395050380575452850420730818412994731079307343538376880280124019321040198038723558784544408584344466090982802067326529000931562048932875469079874956595180595395347093285140279165467965596318365749701535812384333240968283640721344003442002691613772056762099098025739332715913970186225176459563484134139746647940170537900275350480490468851439300771949915194703080576611022590670399844931867609777417528903454731922206378932141464755402629420074293816349270038351339419146768473851353171629153912238797141905920143036064131705230421762305232861503856799511155936565169005916711845389135580928162511912438531204156138447775120789548666143600293412065767167106888509172568003530668539460588248316513392652567856224602697296203328920073354425994044956624831346979458846837597950064151867164583749203433942592178528868981311575331848941597492470436782387502687532649093096498315347403977436001399982102030846763698994785054617523241463186980898394504211430763617825306895065661536045431497903759118007934839122881885863091769469883539876840543521295706315919855784493235603866268925981702690270202829595794350800918257913991744455922683343374046671669930219650268554687501e-4951
+-5.4677992978237119037926089004291297245985762235403450155814707305425575329500966052143410629387408077958710210208052966529504784489330482549602621133847135082257338717668975178538378957084503396349323438489751160934104796903302909028868611999312592165232778075745690821530731336739429587895774023213939331012985331912661021188896306095323395084578542200319963179359407180003251440084380484161504585462684082946932782829488183829817567452314437076943950532707791252404699268678810198502871250235796855577909830559749628817599194837522029036891995648803056846354520653635957919882905363521007017169741463296044392266269433408052686419017699718627761948763856040592690841721239300491445991666051031755802326720329666454066568630314348735511753639418257984253319063825247065727664852328745422305642626091617823968872438962470092440688372515677832232712866924800106797113478024083516199991991274936894113006233377518471389394984262004503058455485659100090665241525454803628182902241401701783637353179296850056973639305945938813428953287892593620291195986011128990061888798763718548789025717537674780281005583347165047846045925077914824515331335131286063574407181821236377907693209224423490663289916878620725507793163931390372011875799729330162278748985052557432333005334989519381566364065326138465761456173231416844807264090741841972247545424908843928136253653308813487994328446248389608261444391573619177442907290731163188581917588219420107047265367485141413919810885909689112244064797106324295291545892937991321479061743491490060940946128274533657682130125169586930571899403551122506297763180795732325134340989331155893724289358918212707392997768032299997207208451112971425779939507837165263255764268971211819536322993221774123134726665579460265871378186589562858761835613344584269098062275786969729830545786485401407774313414954958161677096004701941411411592755485864471870515173326244464631295701572087440183178339987662926763241220698078822661709054601073523477544653542795020468256078409306409100874886828781860529824879343987945751252081314345990313550683792348814627862441324030155730592166581251009922787324590431548734575328663628650380722603024383412564651446272117561042207738413114131099731016728935023152239431311619533848376583687509108453086730196255111695352464186678221927564757730319825223049341618853631333478241227227268084583396688436229936266854011427192767039363517491659523133852472534104124441112346615696891097070121463652258681270378076538381697594264658479637863087159293838880752928175545408262813403793568695416998388572304528748824756265665683890518422696169422338806137532304784682662448207928681740476188343739117833525916386815135793034906806117413105008719197882837614738262050320291539494104952056471606645482046176634075459021552555959590354956262127809953013679512507451424271839221946794056861055980558363033732905772356986051180966474116423192194741572438649215204229781279620370445373851348786918527399785630808242657122705381806661616271132182017797793661244078445747547535623384548769818529655539279036503234072455810991588075181817695975173110136482659854557506203058080551018873203138260451109855100526720073566126209666125604482413705611996796777927332827103568863352291499261312290355143742018042254470707107847293593205234049774839191754781030496978091006099559675240966730110167624903610656473267105556155633783594089546261107653110531808279445757724399186120387548675148632176049190701680305210224388072261974806791922636412897526952793677946622674149577084803568051242934076450942927092705684547042915490323112457971853658760725588190377666477106903106693847278847646032201293023329503348730723947218797410452333910847913892827195814551858335519518939031446093385329182820714173657946661746005901866885589732922652604573972842197231187365263381958925227970038358064987248233271706462687651143350472018043321314534759819524203308490914358596886150053406629512434788155355109100540319857813535695923273426256911552977539394209918630668466632881929661971212772444625151371953428875491139683919687008724010475217255347915698820960215217257390308560235323463096946442080548018754166369706161589705215873687166365628787796501470056870127729464714362172216802441045276911597009443281135389729130222603185665646434661947627628077723219376892727386120519287577405410510114936151502752997122750262781911372625997223415283516995479265631485799456782561734766648462849641064097181818204279498552827825384186202065516999362573388136163077477126602169410435905014077049808497409025369325795765272066650278004200357878990911374982857977108488482528354406313893864211497105765030504600982253488805474531798742143374465080240030582370086699167937651038307909706139327119325418854546478285735654541635477790346964782617354265050767878335230272194896680141986745074630225893106573559558843545841186025169531604151588481389164948914823593944287133336263680358191369540321930649824471425485137777984823525402115151171093313613251350685343824859052220126891551966018355920872775724807128769003243129486808733796350497668255116485157191011858830643898323628223472099280243583164434348347014910398004439821970508280440872759395827943270985008769143562351938091476215083548164137333541883808870019116234099013452929807950151652297436436006149684939775781234660954156154478642694176038524277810483833149798681345708089152179193979463169402340611793486272301808073267534612685593859596787866884211031341417903391749825320454663508370385251831778477311017089729361152161928815389818579983544490982891734081131312309744330960666031291451740885503458543884956367654943799264600314531815427932691107874782328654759293575803481929361961781073958502075438499070633193799699311694287183299423475339817655608058724723221867087563064557636112380829514501382073257737022472866608244164310385205213523702910787182472517125030106491031844871593141759729773907719510044049352857426592936763727969496103940591601975078602859660478614119405428212830134490731706220583788265344728818766885126977588151111984290444321648931907188080336064713873288834096229203276676119810521851726133377700616341304257822975788967472152742255041912584197045423031298506219011800240120182445838590696647416285334515631019799007515682004250060857020904012215375170479800482680554499806010766109655061507421747722461180617361402575082294678925605271083587897845390768226405648508518103525778638618195775128516073959272990148239415346263486966573934577450787243667063244378381883115827207605856174876350045086885320626669331311880593775916269643646395423220549940790476989709243027420158390806135690975149384714684219964938182719962913931464979458639185519531490009437619838306362365453754807654884704163490469296444427144778593725687358437087390151990694667516279202024332494828210657618261952038597230263799412584275851667403910657370879707181053365818502680037431560091209982641738995652793235851569372314130107647166085235615697257094269133100914135783178856280392139325001352841718610484616627448189556913621837791650699820323059708766420810133584841826718631681683381743511974264126250984214812397119978273917903889865891718836792263377888052458189238746074986456016681098722869419588274020181430652732817858728473849369539367463917171317324882099804999043054467247785592038464723442276239896066431580123756428540074945472427752568981171400621705853374875885943072600692576914790467205905272372594740187988081900317493185005142913607163380720069786786782095331840893694073778325119471833528492917081008547303414509381563617864195257751546539575461435803625993888325647883541039192368366987400263049681218831477776345118518503709588840859023379762456561030683928115349942393963185677123055324771693784214924931737043793679546051454845624150270955450608318747395755728950832754611277041359602301205138509175543313522772786504141007552691902249572375175731740923618769197304652898352694386665448260033458575323252814233868098279476166764258284911434288072243178941698347365985427696983129579496059032032841281149923518087084876885114369033227736521245740554711771423492719899982357711910225545480424688322195336240492253136281857837808491795993788199125205555222116581071134476787468430539307909617442106685159519071053844987343666452494280317720153567054364117244775141336558406098548803924509496052261825198043140272655303625315605326569530252885854991822289219201218313590745412010446642247111703901991591338062693320157180618736569439969283245279430312651192668788340033626825194260296262959884258597703584888770801961209652822982322376122303586169861685106043820510444293432856251210395693261264867823980172683352796141772210301725997652373804152525037162852291403804455997331367378463632437773242905518075065414724295857460288225400061608664961649196400079359622673770607898395269075056596627116148289491042491764170924014885106158235482774778418134123293974436877051995673618683751115353808771434984204447736174758316063096245047311279841579995578186609402864244042751443128536278453430633423118662852688374229600894418958824842459450540826176452145829389286103522774101195556029650753254244433565937938526828990893149766298997738359913887178888607190765709867052470880785937935110091424743449966353497865681753841380246075612094033617488674676296822570077027076266879557913673839341012099558043806442348798053951239274913334631522409564461770434875790402230022872647568436177018658068697071731879399180374560963492726714528729224208938589940272515747888379118461617702271694075087419634147298076764775745707026934442908236664400557265527951453482191684597674273691978253678690951178777239573925410438679099374700609973920128201422381329108236575369403675960765238333778127017096574296148321075566959285042221837159799800133563239963969638610872680393210300180152020613051613414547163713772512617757277955979895866367571776456268564191092477027650135832200376440239783726540552694851717269598489288851529660975027775639565229734596726205832668434979354541943345062977891187146561050118118108223323735210843681128615413601091222007912350536959777114306541514511332368936078560929788143798814391221507522370648646767364209132147312407014953113532379838195728491128536978285918066991040993153064356179903885952027952713749653604502053512355449916680887234238773855581636172479594866871765094513940103284167914110196720261110812716776424260154507395050380575452850420730818412994731079307343538376880280124019321040198038723558784544408584344466090982802067326529000931562048932875469079874956595180595395347093285140279165467965596318365749701535812384333240968283640721344003442002691613772056762099098025739332715913970186225176459563484134139746647940170537900275350480490468851439300771949915194703080576611022590670399844931867609777417528903454731922206378932141464755402629420074293816349270038351339419146768473851353171629153912238797141905920143036064131705230421762305232861503856799511155936565169005916711845389135580928162511912438531204156138447775120789548666143600293412065767167106888509172568003530668539460588248316513392652567856224602697296203328920073354425994044956624831346979458846837597950064151867164583749203433942592178528868981311575331848941597492470436782387502687532649093096498315347403977436001399982102030846763698994785054617523241463186980898394504211430763617825306895065661536045431497903759118007934839122881885863091769469883539876840543521295706315919855784493235603866268925981702690270202829595794350800918257913991744455922683343374046671669930219650268554687499e-4951
+-5.46779929782371190379260890042912972459857622354034501558147073054255753295009660521434106293874080779587102102080529665295047844893304825496026211338471350822573387176689751785383789570845033963493234384897511609341047969033029090288686119993125921652327780757456908215307313367394295878957740232139393310129853319126610211888963060953233950845785422003199631793594071800032514400843804841615045854626840829469327828294881838298175674523144370769439505327077912524046992686788101985028712502357968555779098305597496288175991948375220290368919956488030568463545206536359579198829053635210070171697414632960443922662694334080526864190176997186277619487638560405926908417212393004914459916660510317558023267203296664540665686303143487355117536394182579842533190638252470657276648523287454223056426260916178239688724389624700924406883725156778322327128669248001067971134780240835161999919912749368941130062333775184713893949842620045030584554856591000906652415254548036281829022414017017836373531792968500569736393059459388134289532878925936202911959860111289900618887987637185487890257175376747802810055833471650478460459250779148245153313351312860635744071818212363779076932092244234906632899168786207255077931639313903720118757997293301622787489850525574323330053349895193815663640653261384657614561732314168448072640907418419722475454249088439281362536533088134879943284462483896082614443915736191774429072907311631885819175882194201070472653674851414139198108859096891122440647971063242952915458929379913214790617434914900609409461282745336576821301251695869305718994035511225062977631807957323251343409893311558937242893589182127073929977680322999972072084511129714257799395078371652632557642689712118195363229932217741231347266655794602658713781865895628587618356133445842690980622757869697298305457864854014077743134149549581616770960047019414114115927554858644718705151733262444646312957015720874401831783399876629267632412206980788226617090546010735234775446535427950204682560784093064091008748868287818605298248793439879457512520813143459903135506837923488146278624413240301557305921665812510099227873245904315487345753286636286503807226030243834125646514462721175610422077384131141310997310167289350231522394313116195338483765836875091084530867301962551116953524641866782219275647577303198252230493416188536313334782412272272680845833966884362299362668540114271927670393635174916595231338524725341041244411123466156968910970701214636522586812703780765383816975942646584796378630871592938388807529281755454082628134037935686954169983885723045287488247562656656838905184226961694223388061375323047846826624482079286817404761883437391178335259163868151357930349068061174131050087191978828376147382620503202915394941049520564716066454820461766340754590215525559595903549562621278099530136795125074514242718392219467940568610559805583630337329057723569860511809664741164231921947415724386492152042297812796203704453738513487869185273997856308082426571227053818066616162711321820177977936612440784457475475356233845487698185296555392790365032340724558109915880751818176959751731101364826598545575062030580805510188732031382604511098551005267200735661262096661256044824137056119967967779273328271035688633522914992613122903551437420180422544707071078472935932052340497748391917547810304969780910060995596752409667301101676249036106564732671055561556337835940895462611076531105318082794457577243991861203875486751486321760491907016803052102243880722619748067919226364128975269527936779466226741495770848035680512429340764509429270927056845470429154903231124579718536587607255881903776664771069031066938472788476460322012930233295033487307239472187974104523339108479138928271958145518583355195189390314460933853291828207141736579466617460059018668855897329226526045739728421972311873652633819589252279700383580649872482332717064626876511433504720180433213145347598195242033084909143585968861500534066295124347881553551091005403198578135356959232734262569115529775393942099186306684666328819296619712127724446251513719534288754911396839196870087240104752172553479156988209602152172573903085602353234630969464420805480187541663697061615897052158736871663656287877965014700568701277294647143621722168024410452769115970094432811353897291302226031856656464346619476276280777232193768927273861205192875774054105101149361515027529971227502627819113726259972234152835169954792656314857994567825617347666484628496410640971818182042794985528278253841862020655169993625733881361630774771266021694104359050140770498084974090253693257957652720666502780042003578789909113749828579771084884825283544063138938642114971057650305046009822534888054745317987421433744650802400305823700866991679376510383079097061393271193254188545464782857356545416354777903469647826173542650507678783352302721948966801419867450746302258931065735595588435458411860251695316041515884813891649489148235939442871333362636803581913695403219306498244714254851377779848235254021151511710933136132513506853438248590522201268915519660183559208727757248071287690032431294868087337963504976682551164851571910118588306438983236282234720992802435831644343483470149103980044398219705082804408727593958279432709850087691435623519380914762150835481641373335418838088700191162340990134529298079501516522974364360061496849397757812346609541561544786426941760385242778104838331497986813457080891521791939794631694023406117934862723018080732675346126855938595967878668842110313414179033917498253204546635083703852518317784773110170897293611521619288153898185799835444909828917340811313123097443309606660312914517408855034585438849563676549437992646003145318154279326911078747823286547592935758034819293619617810739585020754384990706331937996993116942871832994234753398176556080587247232218670875630645576361123808295145013820732577370224728666082441643103852052135237029107871824725171250301064910318448715931417597297739077195100440493528574265929367637279694961039405916019750786028596604786141194054282128301344907317062205837882653447288187668851269775881511119842904443216489319071880803360647138732888340962292032766761198105218517261333777006163413042578229757889674721527422550419125841970454230312985062190118002401201824458385906966474162853345156310197990075156820042500608570209040122153751704798004826805544998060107661096550615074217477224611806173614025750822946789256052710835878978453907682264056485085181035257786386181957751285160739592729901482394153462634869665739345774507872436670632443783818831158272076058561748763500450868853206266693313118805937759162696436463954232205499407904769897092430274201583908061356909751493847146842199649381827199629139314649794586391855195314900094376198383063623654537548076548847041634904692964444271447785937256873584370873901519906946675162792020243324948282106576182619520385972302637994125842758516674039106573708797071810533658185026800374315600912099826417389956527932358515693723141301076471660852356156972570942691331009141357831788562803921393250013528417186104846166274481895569136218377916506998203230597087664208101335848418267186316816833817435119742641262509842148123971199782739179038898658917188367922633778880524581892387460749864560166810987228694195882740201814306527328178587284738493695393674639171713173248820998049990430544672477855920384647234422762398960664315801237564285400749454724277525689811714006217058533748758859430726006925769147904672059052723725947401879880819003174931850051429136071633807200697867867820953318408936940737783251194718335284929170810085473034145093815636178641952577515465395754614358036259938883256478835410391923683669874002630496812188314777763451185185037095888408590233797624565610306839281153499423939631856771230553247716937842149249317370437936795460514548456241502709554506083187473957557289508327546112770413596023012051385091755433135227727865041410075526919022495723751757317409236187691973046528983526943866654482600334585753232528142338680982794761667642582849114342880722431789416983473659854276969831295794960590320328412811499235180870848768851143690332277365212457405547117714234927198999823577119102255454804246883221953362404922531362818578378084917959937881991252055552221165810711344767874684305393079096174421066851595190710538449873436664524942803177201535670543641172447751413365584060985488039245094960522618251980431402726553036253156053265695302528858549918222892192012183135907454120104466422471117039019915913380626933201571806187365694399692832452794303126511926687883400336268251942602962629598842585977035848887708019612096528229823223761223035861698616851060438205104442934328562512103956932612648678239801726833527961417722103017259976523738041525250371628522914038044559973313673784636324377732429055180750654147242958574602882254000616086649616491964000793596226737706078983952690750565966271161482894910424917641709240148851061582354827747784181341232939744368770519956736186837511153538087714349842044477361747583160630962450473112798415799955781866094028642440427514431285362784534306334231186628526883742296008944189588248424594505408261764521458293892861035227741011955560296507532542444335659379385268289908931497662989977383599138871788886071907657098670524708807859379351100914247434499663534978656817538413802460756120940336174886746762968225700770270762668795579136738393410120995580438064423487980539512392749133346315224095644617704348757904022300228726475684361770186580686970717318793991803745609634927267145287292242089385899402725157478883791184616177022716940750874196341472980767647757457070269344429082366644005572655279514534821916845976742736919782536786909511787772395739254104386790993747006099739201282014223813291082365753694036759607652383337781270170965742961483210755669592850422218371597998001335632399639696386108726803932103001801520206130516134145471637137725126177572779559798958663675717764562685641910924770276501358322003764402397837265405526948517172695984892888515296609750277756395652297345967262058326684349793545419433450629778911871465610501181181082233237352108436811286154136010912220079123505369597771143065415145113323689360785609297881437988143912215075223706486467673642091321473124070149531135323798381957284911285369782859180669910409931530643561799038859520279527137496536045020535123554499166808872342387738555816361724795948668717650945139401032841679141101967202611108127167764242601545073950503805754528504207308184129947310793073435383768802801240193210401980387235587845444085843444660909828020673265290009315620489328754690798749565951805953953470932851402791654679655963183657497015358123843332409682836407213440034420026916137720567620990980257393327159139701862251764595634841341397466479401705379002753504804904688514393007719499151947030805766110225906703998449318676097774175289034547319222063789321414647554026294200742938163492700383513394191467684738513531716291539122387971419059201430360641317052304217623052328615038567995111559365651690059167118453891355809281625119124385312041561384477751207895486661436002934120657671671068885091725680035306685394605882483165133926525678562246026972962033289200733544259940449566248313469794588468375979500641518671645837492034339425921785288689813115753318489415974924704367823875026875326490930964983153474039774360013999821020308467636989947850546175232414631869808983945042114307636178253068950656615360454314979037591180079348391228818858630917694698835398768405435212957063159198557844932356038662689259817026902702028295957943508009182579139917444559226833433740466716699302196502685546875e-4951
+-5.4677992978237119037926089004291297245985762235403450155814707305425575329500966052143410629387408077958710210208052966529504784489330482549602621133847135082257338717668975178538378957084503396349323438489751160934104796903302909028868611999312592165232778075745690821530731336739429587895774023213939331012985331912661021188896306095323395084578542200319963179359407180003251440084380484161504585462684082946932782829488183829817567452314437076943950532707791252404699268678810198502871250235796855577909830559749628817599194837522029036891995648803056846354520653635957919882905363521007017169741463296044392266269433408052686419017699718627761948763856040592690841721239300491445991666051031755802326720329666454066568630314348735511753639418257984253319063825247065727664852328745422305642626091617823968872438962470092440688372515677832232712866924800106797113478024083516199991991274936894113006233377518471389394984262004503058455485659100090665241525454803628182902241401701783637353179296850056973639305945938813428953287892593620291195986011128990061888798763718548789025717537674780281005583347165047846045925077914824515331335131286063574407181821236377907693209224423490663289916878620725507793163931390372011875799729330162278748985052557432333005334989519381566364065326138465761456173231416844807264090741841972247545424908843928136253653308813487994328446248389608261444391573619177442907290731163188581917588219420107047265367485141413919810885909689112244064797106324295291545892937991321479061743491490060940946128274533657682130125169586930571899403551122506297763180795732325134340989331155893724289358918212707392997768032299997207208451112971425779939507837165263255764268971211819536322993221774123134726665579460265871378186589562858761835613344584269098062275786969729830545786485401407774313414954958161677096004701941411411592755485864471870515173326244464631295701572087440183178339987662926763241220698078822661709054601073523477544653542795020468256078409306409100874886828781860529824879343987945751252081314345990313550683792348814627862441324030155730592166581251009922787324590431548734575328663628650380722603024383412564651446272117561042207738413114131099731016728935023152239431311619533848376583687509108453086730196255111695352464186678221927564757730319825223049341618853631333478241227227268084583396688436229936266854011427192767039363517491659523133852472534104124441112346615696891097070121463652258681270378076538381697594264658479637863087159293838880752928175545408262813403793568695416998388572304528748824756265665683890518422696169422338806137532304784682662448207928681740476188343739117833525916386815135793034906806117413105008719197882837614738262050320291539494104952056471606645482046176634075459021552555959590354956262127809953013679512507451424271839221946794056861055980558363033732905772356986051180966474116423192194741572438649215204229781279620370445373851348786918527399785630808242657122705381806661616271132182017797793661244078445747547535623384548769818529655539279036503234072455810991588075181817695975173110136482659854557506203058080551018873203138260451109855100526720073566126209666125604482413705611996796777927332827103568863352291499261312290355143742018042254470707107847293593205234049774839191754781030496978091006099559675240966730110167624903610656473267105556155633783594089546261107653110531808279445757724399186120387548675148632176049190701680305210224388072261974806791922636412897526952793677946622674149577084803568051242934076450942927092705684547042915490323112457971853658760725588190377666477106903106693847278847646032201293023329503348730723947218797410452333910847913892827195814551858335519518939031446093385329182820714173657946661746005901866885589732922652604573972842197231187365263381958925227970038358064987248233271706462687651143350472018043321314534759819524203308490914358596886150053406629512434788155355109100540319857813535695923273426256911552977539394209918630668466632881929661971212772444625151371953428875491139683919687008724010475217255347915698820960215217257390308560235323463096946442080548018754166369706161589705215873687166365628787796501470056870127729464714362172216802441045276911597009443281135389729130222603185665646434661947627628077723219376892727386120519287577405410510114936151502752997122750262781911372625997223415283516995479265631485799456782561734766648462849641064097181818204279498552827825384186202065516999362573388136163077477126602169410435905014077049808497409025369325795765272066650278004200357878990911374982857977108488482528354406313893864211497105765030504600982253488805474531798742143374465080240030582370086699167937651038307909706139327119325418854546478285735654541635477790346964782617354265050767878335230272194896680141986745074630225893106573559558843545841186025169531604151588481389164948914823593944287133336263680358191369540321930649824471425485137777984823525402115151171093313613251350685343824859052220126891551966018355920872775724807128769003243129486808733796350497668255116485157191011858830643898323628223472099280243583164434348347014910398004439821970508280440872759395827943270985008769143562351938091476215083548164137333541883808870019116234099013452929807950151652297436436006149684939775781234660954156154478642694176038524277810483833149798681345708089152179193979463169402340611793486272301808073267534612685593859596787866884211031341417903391749825320454663508370385251831778477311017089729361152161928815389818579983544490982891734081131312309744330960666031291451740885503458543884956367654943799264600314531815427932691107874782328654759293575803481929361961781073958502075438499070633193799699311694287183299423475339817655608058724723221867087563064557636112380829514501382073257737022472866608244164310385205213523702910787182472517125030106491031844871593141759729773907719510044049352857426592936763727969496103940591601975078602859660478614119405428212830134490731706220583788265344728818766885126977588151111984290444321648931907188080336064713873288834096229203276676119810521851726133377700616341304257822975788967472152742255041912584197045423031298506219011800240120182445838590696647416285334515631019799007515682004250060857020904012215375170479800482680554499806010766109655061507421747722461180617361402575082294678925605271083587897845390768226405648508518103525778638618195775128516073959272990148239415346263486966573934577450787243667063244378381883115827207605856174876350045086885320626669331311880593775916269643646395423220549940790476989709243027420158390806135690975149384714684219964938182719962913931464979458639185519531490009437619838306362365453754807654884704163490469296444427144778593725687358437087390151990694667516279202024332494828210657618261952038597230263799412584275851667403910657370879707181053365818502680037431560091209982641738995652793235851569372314130107647166085235615697257094269133100914135783178856280392139325001352841718610484616627448189556913621837791650699820323059708766420810133584841826718631681683381743511974264126250984214812397119978273917903889865891718836792263377888052458189238746074986456016681098722869419588274020181430652732817858728473849369539367463917171317324882099804999043054467247785592038464723442276239896066431580123756428540074945472427752568981171400621705853374875885943072600692576914790467205905272372594740187988081900317493185005142913607163380720069786786782095331840893694073778325119471833528492917081008547303414509381563617864195257751546539575461435803625993888325647883541039192368366987400263049681218831477776345118518503709588840859023379762456561030683928115349942393963185677123055324771693784214924931737043793679546051454845624150270955450608318747395755728950832754611277041359602301205138509175543313522772786504141007552691902249572375175731740923618769197304652898352694386665448260033458575323252814233868098279476166764258284911434288072243178941698347365985427696983129579496059032032841281149923518087084876885114369033227736521245740554711771423492719899982357711910225545480424688322195336240492253136281857837808491795993788199125205555222116581071134476787468430539307909617442106685159519071053844987343666452494280317720153567054364117244775141336558406098548803924509496052261825198043140272655303625315605326569530252885854991822289219201218313590745412010446642247111703901991591338062693320157180618736569439969283245279430312651192668788340033626825194260296262959884258597703584888770801961209652822982322376122303586169861685106043820510444293432856251210395693261264867823980172683352796141772210301725997652373804152525037162852291403804455997331367378463632437773242905518075065414724295857460288225400061608664961649196400079359622673770607898395269075056596627116148289491042491764170924014885106158235482774778418134123293974436877051995673618683751115353808771434984204447736174758316063096245047311279841579995578186609402864244042751443128536278453430633423118662852688374229600894418958824842459450540826176452145829389286103522774101195556029650753254244433565937938526828990893149766298997738359913887178888607190765709867052470880785937935110091424743449966353497865681753841380246075612094033617488674676296822570077027076266879557913673839341012099558043806442348798053951239274913334631522409564461770434875790402230022872647568436177018658068697071731879399180374560963492726714528729224208938589940272515747888379118461617702271694075087419634147298076764775745707026934442908236664400557265527951453482191684597674273691978253678690951178777239573925410438679099374700609973920128201422381329108236575369403675960765238333778127017096574296148321075566959285042221837159799800133563239963969638610872680393210300180152020613051613414547163713772512617757277955979895866367571776456268564191092477027650135832200376440239783726540552694851717269598489288851529660975027775639565229734596726205832668434979354541943345062977891187146561050118118108223323735210843681128615413601091222007912350536959777114306541514511332368936078560929788143798814391221507522370648646767364209132147312407014953113532379838195728491128536978285918066991040993153064356179903885952027952713749653604502053512355449916680887234238773855581636172479594866871765094513940103284167914110196720261110812716776424260154507395050380575452850420730818412994731079307343538376880280124019321040198038723558784544408584344466090982802067326529000931562048932875469079874956595180595395347093285140279165467965596318365749701535812384333240968283640721344003442002691613772056762099098025739332715913970186225176459563484134139746647940170537900275350480490468851439300771949915194703080576611022590670399844931867609777417528903454731922206378932141464755402629420074293816349270038351339419146768473851353171629153912238797141905920143036064131705230421762305232861503856799511155936565169005916711845389135580928162511912438531204156138447775120789548666143600293412065767167106888509172568003530668539460588248316513392652567856224602697296203328920073354425994044956624831346979458846837597950064151867164583749203433942592178528868981311575331848941597492470436782387502687532649093096498315347403977436001399982102030846763698994785054617523241463186980898394504211430763617825306895065661536045431497903759118007934839122881885863091769469883539876840543521295706315919855784493235603866268925981702690270202829595794350800918257913991744455922683343374046671669930219650268554687501e-4951
+5.4677992978237119037926089004291297245985762235403450155814707305425575329500966052143410629387408077958710210208052966529504784489330482549602621133847135082257338717668975178538378957084503396349323438489751160934104796903302909028868611999312592165232778075745690821530731336739429587895774023213939331012985331912661021188896306095323395084578542200319963179359407180003251440084380484161504585462684082946932782829488183829817567452314437076943950532707791252404699268678810198502871250235796855577909830559749628817599194837522029036891995648803056846354520653635957919882905363521007017169741463296044392266269433408052686419017699718627761948763856040592690841721239300491445991666051031755802326720329666454066568630314348735511753639418257984253319063825247065727664852328745422305642626091617823968872438962470092440688372515677832232712866924800106797113478024083516199991991274936894113006233377518471389394984262004503058455485659100090665241525454803628182902241401701783637353179296850056973639305945938813428953287892593620291195986011128990061888798763718548789025717537674780281005583347165047846045925077914824515331335131286063574407181821236377907693209224423490663289916878620725507793163931390372011875799729330162278748985052557432333005334989519381566364065326138465761456173231416844807264090741841972247545424908843928136253653308813487994328446248389608261444391573619177442907290731163188581917588219420107047265367485141413919810885909689112244064797106324295291545892937991321479061743491490060940946128274533657682130125169586930571899403551122506297763180795732325134340989331155893724289358918212707392997768032299997207208451112971425779939507837165263255764268971211819536322993221774123134726665579460265871378186589562858761835613344584269098062275786969729830545786485401407774313414954958161677096004701941411411592755485864471870515173326244464631295701572087440183178339987662926763241220698078822661709054601073523477544653542795020468256078409306409100874886828781860529824879343987945751252081314345990313550683792348814627862441324030155730592166581251009922787324590431548734575328663628650380722603024383412564651446272117561042207738413114131099731016728935023152239431311619533848376583687509108453086730196255111695352464186678221927564757730319825223049341618853631333478241227227268084583396688436229936266854011427192767039363517491659523133852472534104124441112346615696891097070121463652258681270378076538381697594264658479637863087159293838880752928175545408262813403793568695416998388572304528748824756265665683890518422696169422338806137532304784682662448207928681740476188343739117833525916386815135793034906806117413105008719197882837614738262050320291539494104952056471606645482046176634075459021552555959590354956262127809953013679512507451424271839221946794056861055980558363033732905772356986051180966474116423192194741572438649215204229781279620370445373851348786918527399785630808242657122705381806661616271132182017797793661244078445747547535623384548769818529655539279036503234072455810991588075181817695975173110136482659854557506203058080551018873203138260451109855100526720073566126209666125604482413705611996796777927332827103568863352291499261312290355143742018042254470707107847293593205234049774839191754781030496978091006099559675240966730110167624903610656473267105556155633783594089546261107653110531808279445757724399186120387548675148632176049190701680305210224388072261974806791922636412897526952793677946622674149577084803568051242934076450942927092705684547042915490323112457971853658760725588190377666477106903106693847278847646032201293023329503348730723947218797410452333910847913892827195814551858335519518939031446093385329182820714173657946661746005901866885589732922652604573972842197231187365263381958925227970038358064987248233271706462687651143350472018043321314534759819524203308490914358596886150053406629512434788155355109100540319857813535695923273426256911552977539394209918630668466632881929661971212772444625151371953428875491139683919687008724010475217255347915698820960215217257390308560235323463096946442080548018754166369706161589705215873687166365628787796501470056870127729464714362172216802441045276911597009443281135389729130222603185665646434661947627628077723219376892727386120519287577405410510114936151502752997122750262781911372625997223415283516995479265631485799456782561734766648462849641064097181818204279498552827825384186202065516999362573388136163077477126602169410435905014077049808497409025369325795765272066650278004200357878990911374982857977108488482528354406313893864211497105765030504600982253488805474531798742143374465080240030582370086699167937651038307909706139327119325418854546478285735654541635477790346964782617354265050767878335230272194896680141986745074630225893106573559558843545841186025169531604151588481389164948914823593944287133336263680358191369540321930649824471425485137777984823525402115151171093313613251350685343824859052220126891551966018355920872775724807128769003243129486808733796350497668255116485157191011858830643898323628223472099280243583164434348347014910398004439821970508280440872759395827943270985008769143562351938091476215083548164137333541883808870019116234099013452929807950151652297436436006149684939775781234660954156154478642694176038524277810483833149798681345708089152179193979463169402340611793486272301808073267534612685593859596787866884211031341417903391749825320454663508370385251831778477311017089729361152161928815389818579983544490982891734081131312309744330960666031291451740885503458543884956367654943799264600314531815427932691107874782328654759293575803481929361961781073958502075438499070633193799699311694287183299423475339817655608058724723221867087563064557636112380829514501382073257737022472866608244164310385205213523702910787182472517125030106491031844871593141759729773907719510044049352857426592936763727969496103940591601975078602859660478614119405428212830134490731706220583788265344728818766885126977588151111984290444321648931907188080336064713873288834096229203276676119810521851726133377700616341304257822975788967472152742255041912584197045423031298506219011800240120182445838590696647416285334515631019799007515682004250060857020904012215375170479800482680554499806010766109655061507421747722461180617361402575082294678925605271083587897845390768226405648508518103525778638618195775128516073959272990148239415346263486966573934577450787243667063244378381883115827207605856174876350045086885320626669331311880593775916269643646395423220549940790476989709243027420158390806135690975149384714684219964938182719962913931464979458639185519531490009437619838306362365453754807654884704163490469296444427144778593725687358437087390151990694667516279202024332494828210657618261952038597230263799412584275851667403910657370879707181053365818502680037431560091209982641738995652793235851569372314130107647166085235615697257094269133100914135783178856280392139325001352841718610484616627448189556913621837791650699820323059708766420810133584841826718631681683381743511974264126250984214812397119978273917903889865891718836792263377888052458189238746074986456016681098722869419588274020181430652732817858728473849369539367463917171317324882099804999043054467247785592038464723442276239896066431580123756428540074945472427752568981171400621705853374875885943072600692576914790467205905272372594740187988081900317493185005142913607163380720069786786782095331840893694073778325119471833528492917081008547303414509381563617864195257751546539575461435803625993888325647883541039192368366987400263049681218831477776345118518503709588840859023379762456561030683928115349942393963185677123055324771693784214924931737043793679546051454845624150270955450608318747395755728950832754611277041359602301205138509175543313522772786504141007552691902249572375175731740923618769197304652898352694386665448260033458575323252814233868098279476166764258284911434288072243178941698347365985427696983129579496059032032841281149923518087084876885114369033227736521245740554711771423492719899982357711910225545480424688322195336240492253136281857837808491795993788199125205555222116581071134476787468430539307909617442106685159519071053844987343666452494280317720153567054364117244775141336558406098548803924509496052261825198043140272655303625315605326569530252885854991822289219201218313590745412010446642247111703901991591338062693320157180618736569439969283245279430312651192668788340033626825194260296262959884258597703584888770801961209652822982322376122303586169861685106043820510444293432856251210395693261264867823980172683352796141772210301725997652373804152525037162852291403804455997331367378463632437773242905518075065414724295857460288225400061608664961649196400079359622673770607898395269075056596627116148289491042491764170924014885106158235482774778418134123293974436877051995673618683751115353808771434984204447736174758316063096245047311279841579995578186609402864244042751443128536278453430633423118662852688374229600894418958824842459450540826176452145829389286103522774101195556029650753254244433565937938526828990893149766298997738359913887178888607190765709867052470880785937935110091424743449966353497865681753841380246075612094033617488674676296822570077027076266879557913673839341012099558043806442348798053951239274913334631522409564461770434875790402230022872647568436177018658068697071731879399180374560963492726714528729224208938589940272515747888379118461617702271694075087419634147298076764775745707026934442908236664400557265527951453482191684597674273691978253678690951178777239573925410438679099374700609973920128201422381329108236575369403675960765238333778127017096574296148321075566959285042221837159799800133563239963969638610872680393210300180152020613051613414547163713772512617757277955979895866367571776456268564191092477027650135832200376440239783726540552694851717269598489288851529660975027775639565229734596726205832668434979354541943345062977891187146561050118118108223323735210843681128615413601091222007912350536959777114306541514511332368936078560929788143798814391221507522370648646767364209132147312407014953113532379838195728491128536978285918066991040993153064356179903885952027952713749653604502053512355449916680887234238773855581636172479594866871765094513940103284167914110196720261110812716776424260154507395050380575452850420730818412994731079307343538376880280124019321040198038723558784544408584344466090982802067326529000931562048932875469079874956595180595395347093285140279165467965596318365749701535812384333240968283640721344003442002691613772056762099098025739332715913970186225176459563484134139746647940170537900275350480490468851439300771949915194703080576611022590670399844931867609777417528903454731922206378932141464755402629420074293816349270038351339419146768473851353171629153912238797141905920143036064131705230421762305232861503856799511155936565169005916711845389135580928162511912438531204156138447775120789548666143600293412065767167106888509172568003530668539460588248316513392652567856224602697296203328920073354425994044956624831346979458846837597950064151867164583749203433942592178528868981311575331848941597492470436782387502687532649093096498315347403977436001399982102030846763698994785054617523241463186980898394504211430763617825306895065661536045431497903759118007934839122881885863091769469883539876840543521295706315919855784493235603866268925981702690270202829595794350800918257913991744455922683343374046671669930219650268554687499e-4951
+5.46779929782371190379260890042912972459857622354034501558147073054255753295009660521434106293874080779587102102080529665295047844893304825496026211338471350822573387176689751785383789570845033963493234384897511609341047969033029090288686119993125921652327780757456908215307313367394295878957740232139393310129853319126610211888963060953233950845785422003199631793594071800032514400843804841615045854626840829469327828294881838298175674523144370769439505327077912524046992686788101985028712502357968555779098305597496288175991948375220290368919956488030568463545206536359579198829053635210070171697414632960443922662694334080526864190176997186277619487638560405926908417212393004914459916660510317558023267203296664540665686303143487355117536394182579842533190638252470657276648523287454223056426260916178239688724389624700924406883725156778322327128669248001067971134780240835161999919912749368941130062333775184713893949842620045030584554856591000906652415254548036281829022414017017836373531792968500569736393059459388134289532878925936202911959860111289900618887987637185487890257175376747802810055833471650478460459250779148245153313351312860635744071818212363779076932092244234906632899168786207255077931639313903720118757997293301622787489850525574323330053349895193815663640653261384657614561732314168448072640907418419722475454249088439281362536533088134879943284462483896082614443915736191774429072907311631885819175882194201070472653674851414139198108859096891122440647971063242952915458929379913214790617434914900609409461282745336576821301251695869305718994035511225062977631807957323251343409893311558937242893589182127073929977680322999972072084511129714257799395078371652632557642689712118195363229932217741231347266655794602658713781865895628587618356133445842690980622757869697298305457864854014077743134149549581616770960047019414114115927554858644718705151733262444646312957015720874401831783399876629267632412206980788226617090546010735234775446535427950204682560784093064091008748868287818605298248793439879457512520813143459903135506837923488146278624413240301557305921665812510099227873245904315487345753286636286503807226030243834125646514462721175610422077384131141310997310167289350231522394313116195338483765836875091084530867301962551116953524641866782219275647577303198252230493416188536313334782412272272680845833966884362299362668540114271927670393635174916595231338524725341041244411123466156968910970701214636522586812703780765383816975942646584796378630871592938388807529281755454082628134037935686954169983885723045287488247562656656838905184226961694223388061375323047846826624482079286817404761883437391178335259163868151357930349068061174131050087191978828376147382620503202915394941049520564716066454820461766340754590215525559595903549562621278099530136795125074514242718392219467940568610559805583630337329057723569860511809664741164231921947415724386492152042297812796203704453738513487869185273997856308082426571227053818066616162711321820177977936612440784457475475356233845487698185296555392790365032340724558109915880751818176959751731101364826598545575062030580805510188732031382604511098551005267200735661262096661256044824137056119967967779273328271035688633522914992613122903551437420180422544707071078472935932052340497748391917547810304969780910060995596752409667301101676249036106564732671055561556337835940895462611076531105318082794457577243991861203875486751486321760491907016803052102243880722619748067919226364128975269527936779466226741495770848035680512429340764509429270927056845470429154903231124579718536587607255881903776664771069031066938472788476460322012930233295033487307239472187974104523339108479138928271958145518583355195189390314460933853291828207141736579466617460059018668855897329226526045739728421972311873652633819589252279700383580649872482332717064626876511433504720180433213145347598195242033084909143585968861500534066295124347881553551091005403198578135356959232734262569115529775393942099186306684666328819296619712127724446251513719534288754911396839196870087240104752172553479156988209602152172573903085602353234630969464420805480187541663697061615897052158736871663656287877965014700568701277294647143621722168024410452769115970094432811353897291302226031856656464346619476276280777232193768927273861205192875774054105101149361515027529971227502627819113726259972234152835169954792656314857994567825617347666484628496410640971818182042794985528278253841862020655169993625733881361630774771266021694104359050140770498084974090253693257957652720666502780042003578789909113749828579771084884825283544063138938642114971057650305046009822534888054745317987421433744650802400305823700866991679376510383079097061393271193254188545464782857356545416354777903469647826173542650507678783352302721948966801419867450746302258931065735595588435458411860251695316041515884813891649489148235939442871333362636803581913695403219306498244714254851377779848235254021151511710933136132513506853438248590522201268915519660183559208727757248071287690032431294868087337963504976682551164851571910118588306438983236282234720992802435831644343483470149103980044398219705082804408727593958279432709850087691435623519380914762150835481641373335418838088700191162340990134529298079501516522974364360061496849397757812346609541561544786426941760385242778104838331497986813457080891521791939794631694023406117934862723018080732675346126855938595967878668842110313414179033917498253204546635083703852518317784773110170897293611521619288153898185799835444909828917340811313123097443309606660312914517408855034585438849563676549437992646003145318154279326911078747823286547592935758034819293619617810739585020754384990706331937996993116942871832994234753398176556080587247232218670875630645576361123808295145013820732577370224728666082441643103852052135237029107871824725171250301064910318448715931417597297739077195100440493528574265929367637279694961039405916019750786028596604786141194054282128301344907317062205837882653447288187668851269775881511119842904443216489319071880803360647138732888340962292032766761198105218517261333777006163413042578229757889674721527422550419125841970454230312985062190118002401201824458385906966474162853345156310197990075156820042500608570209040122153751704798004826805544998060107661096550615074217477224611806173614025750822946789256052710835878978453907682264056485085181035257786386181957751285160739592729901482394153462634869665739345774507872436670632443783818831158272076058561748763500450868853206266693313118805937759162696436463954232205499407904769897092430274201583908061356909751493847146842199649381827199629139314649794586391855195314900094376198383063623654537548076548847041634904692964444271447785937256873584370873901519906946675162792020243324948282106576182619520385972302637994125842758516674039106573708797071810533658185026800374315600912099826417389956527932358515693723141301076471660852356156972570942691331009141357831788562803921393250013528417186104846166274481895569136218377916506998203230597087664208101335848418267186316816833817435119742641262509842148123971199782739179038898658917188367922633778880524581892387460749864560166810987228694195882740201814306527328178587284738493695393674639171713173248820998049990430544672477855920384647234422762398960664315801237564285400749454724277525689811714006217058533748758859430726006925769147904672059052723725947401879880819003174931850051429136071633807200697867867820953318408936940737783251194718335284929170810085473034145093815636178641952577515465395754614358036259938883256478835410391923683669874002630496812188314777763451185185037095888408590233797624565610306839281153499423939631856771230553247716937842149249317370437936795460514548456241502709554506083187473957557289508327546112770413596023012051385091755433135227727865041410075526919022495723751757317409236187691973046528983526943866654482600334585753232528142338680982794761667642582849114342880722431789416983473659854276969831295794960590320328412811499235180870848768851143690332277365212457405547117714234927198999823577119102255454804246883221953362404922531362818578378084917959937881991252055552221165810711344767874684305393079096174421066851595190710538449873436664524942803177201535670543641172447751413365584060985488039245094960522618251980431402726553036253156053265695302528858549918222892192012183135907454120104466422471117039019915913380626933201571806187365694399692832452794303126511926687883400336268251942602962629598842585977035848887708019612096528229823223761223035861698616851060438205104442934328562512103956932612648678239801726833527961417722103017259976523738041525250371628522914038044559973313673784636324377732429055180750654147242958574602882254000616086649616491964000793596226737706078983952690750565966271161482894910424917641709240148851061582354827747784181341232939744368770519956736186837511153538087714349842044477361747583160630962450473112798415799955781866094028642440427514431285362784534306334231186628526883742296008944189588248424594505408261764521458293892861035227741011955560296507532542444335659379385268289908931497662989977383599138871788886071907657098670524708807859379351100914247434499663534978656817538413802460756120940336174886746762968225700770270762668795579136738393410120995580438064423487980539512392749133346315224095644617704348757904022300228726475684361770186580686970717318793991803745609634927267145287292242089385899402725157478883791184616177022716940750874196341472980767647757457070269344429082366644005572655279514534821916845976742736919782536786909511787772395739254104386790993747006099739201282014223813291082365753694036759607652383337781270170965742961483210755669592850422218371597998001335632399639696386108726803932103001801520206130516134145471637137725126177572779559798958663675717764562685641910924770276501358322003764402397837265405526948517172695984892888515296609750277756395652297345967262058326684349793545419433450629778911871465610501181181082233237352108436811286154136010912220079123505369597771143065415145113323689360785609297881437988143912215075223706486467673642091321473124070149531135323798381957284911285369782859180669910409931530643561799038859520279527137496536045020535123554499166808872342387738555816361724795948668717650945139401032841679141101967202611108127167764242601545073950503805754528504207308184129947310793073435383768802801240193210401980387235587845444085843444660909828020673265290009315620489328754690798749565951805953953470932851402791654679655963183657497015358123843332409682836407213440034420026916137720567620990980257393327159139701862251764595634841341397466479401705379002753504804904688514393007719499151947030805766110225906703998449318676097774175289034547319222063789321414647554026294200742938163492700383513394191467684738513531716291539122387971419059201430360641317052304217623052328615038567995111559365651690059167118453891355809281625119124385312041561384477751207895486661436002934120657671671068885091725680035306685394605882483165133926525678562246026972962033289200733544259940449566248313469794588468375979500641518671645837492034339425921785288689813115753318489415974924704367823875026875326490930964983153474039774360013999821020308467636989947850546175232414631869808983945042114307636178253068950656615360454314979037591180079348391228818858630917694698835398768405435212957063159198557844932356038662689259817026902702028295957943508009182579139917444559226833433740466716699302196502685546875e-4951
+5.4677992978237119037926089004291297245985762235403450155814707305425575329500966052143410629387408077958710210208052966529504784489330482549602621133847135082257338717668975178538378957084503396349323438489751160934104796903302909028868611999312592165232778075745690821530731336739429587895774023213939331012985331912661021188896306095323395084578542200319963179359407180003251440084380484161504585462684082946932782829488183829817567452314437076943950532707791252404699268678810198502871250235796855577909830559749628817599194837522029036891995648803056846354520653635957919882905363521007017169741463296044392266269433408052686419017699718627761948763856040592690841721239300491445991666051031755802326720329666454066568630314348735511753639418257984253319063825247065727664852328745422305642626091617823968872438962470092440688372515677832232712866924800106797113478024083516199991991274936894113006233377518471389394984262004503058455485659100090665241525454803628182902241401701783637353179296850056973639305945938813428953287892593620291195986011128990061888798763718548789025717537674780281005583347165047846045925077914824515331335131286063574407181821236377907693209224423490663289916878620725507793163931390372011875799729330162278748985052557432333005334989519381566364065326138465761456173231416844807264090741841972247545424908843928136253653308813487994328446248389608261444391573619177442907290731163188581917588219420107047265367485141413919810885909689112244064797106324295291545892937991321479061743491490060940946128274533657682130125169586930571899403551122506297763180795732325134340989331155893724289358918212707392997768032299997207208451112971425779939507837165263255764268971211819536322993221774123134726665579460265871378186589562858761835613344584269098062275786969729830545786485401407774313414954958161677096004701941411411592755485864471870515173326244464631295701572087440183178339987662926763241220698078822661709054601073523477544653542795020468256078409306409100874886828781860529824879343987945751252081314345990313550683792348814627862441324030155730592166581251009922787324590431548734575328663628650380722603024383412564651446272117561042207738413114131099731016728935023152239431311619533848376583687509108453086730196255111695352464186678221927564757730319825223049341618853631333478241227227268084583396688436229936266854011427192767039363517491659523133852472534104124441112346615696891097070121463652258681270378076538381697594264658479637863087159293838880752928175545408262813403793568695416998388572304528748824756265665683890518422696169422338806137532304784682662448207928681740476188343739117833525916386815135793034906806117413105008719197882837614738262050320291539494104952056471606645482046176634075459021552555959590354956262127809953013679512507451424271839221946794056861055980558363033732905772356986051180966474116423192194741572438649215204229781279620370445373851348786918527399785630808242657122705381806661616271132182017797793661244078445747547535623384548769818529655539279036503234072455810991588075181817695975173110136482659854557506203058080551018873203138260451109855100526720073566126209666125604482413705611996796777927332827103568863352291499261312290355143742018042254470707107847293593205234049774839191754781030496978091006099559675240966730110167624903610656473267105556155633783594089546261107653110531808279445757724399186120387548675148632176049190701680305210224388072261974806791922636412897526952793677946622674149577084803568051242934076450942927092705684547042915490323112457971853658760725588190377666477106903106693847278847646032201293023329503348730723947218797410452333910847913892827195814551858335519518939031446093385329182820714173657946661746005901866885589732922652604573972842197231187365263381958925227970038358064987248233271706462687651143350472018043321314534759819524203308490914358596886150053406629512434788155355109100540319857813535695923273426256911552977539394209918630668466632881929661971212772444625151371953428875491139683919687008724010475217255347915698820960215217257390308560235323463096946442080548018754166369706161589705215873687166365628787796501470056870127729464714362172216802441045276911597009443281135389729130222603185665646434661947627628077723219376892727386120519287577405410510114936151502752997122750262781911372625997223415283516995479265631485799456782561734766648462849641064097181818204279498552827825384186202065516999362573388136163077477126602169410435905014077049808497409025369325795765272066650278004200357878990911374982857977108488482528354406313893864211497105765030504600982253488805474531798742143374465080240030582370086699167937651038307909706139327119325418854546478285735654541635477790346964782617354265050767878335230272194896680141986745074630225893106573559558843545841186025169531604151588481389164948914823593944287133336263680358191369540321930649824471425485137777984823525402115151171093313613251350685343824859052220126891551966018355920872775724807128769003243129486808733796350497668255116485157191011858830643898323628223472099280243583164434348347014910398004439821970508280440872759395827943270985008769143562351938091476215083548164137333541883808870019116234099013452929807950151652297436436006149684939775781234660954156154478642694176038524277810483833149798681345708089152179193979463169402340611793486272301808073267534612685593859596787866884211031341417903391749825320454663508370385251831778477311017089729361152161928815389818579983544490982891734081131312309744330960666031291451740885503458543884956367654943799264600314531815427932691107874782328654759293575803481929361961781073958502075438499070633193799699311694287183299423475339817655608058724723221867087563064557636112380829514501382073257737022472866608244164310385205213523702910787182472517125030106491031844871593141759729773907719510044049352857426592936763727969496103940591601975078602859660478614119405428212830134490731706220583788265344728818766885126977588151111984290444321648931907188080336064713873288834096229203276676119810521851726133377700616341304257822975788967472152742255041912584197045423031298506219011800240120182445838590696647416285334515631019799007515682004250060857020904012215375170479800482680554499806010766109655061507421747722461180617361402575082294678925605271083587897845390768226405648508518103525778638618195775128516073959272990148239415346263486966573934577450787243667063244378381883115827207605856174876350045086885320626669331311880593775916269643646395423220549940790476989709243027420158390806135690975149384714684219964938182719962913931464979458639185519531490009437619838306362365453754807654884704163490469296444427144778593725687358437087390151990694667516279202024332494828210657618261952038597230263799412584275851667403910657370879707181053365818502680037431560091209982641738995652793235851569372314130107647166085235615697257094269133100914135783178856280392139325001352841718610484616627448189556913621837791650699820323059708766420810133584841826718631681683381743511974264126250984214812397119978273917903889865891718836792263377888052458189238746074986456016681098722869419588274020181430652732817858728473849369539367463917171317324882099804999043054467247785592038464723442276239896066431580123756428540074945472427752568981171400621705853374875885943072600692576914790467205905272372594740187988081900317493185005142913607163380720069786786782095331840893694073778325119471833528492917081008547303414509381563617864195257751546539575461435803625993888325647883541039192368366987400263049681218831477776345118518503709588840859023379762456561030683928115349942393963185677123055324771693784214924931737043793679546051454845624150270955450608318747395755728950832754611277041359602301205138509175543313522772786504141007552691902249572375175731740923618769197304652898352694386665448260033458575323252814233868098279476166764258284911434288072243178941698347365985427696983129579496059032032841281149923518087084876885114369033227736521245740554711771423492719899982357711910225545480424688322195336240492253136281857837808491795993788199125205555222116581071134476787468430539307909617442106685159519071053844987343666452494280317720153567054364117244775141336558406098548803924509496052261825198043140272655303625315605326569530252885854991822289219201218313590745412010446642247111703901991591338062693320157180618736569439969283245279430312651192668788340033626825194260296262959884258597703584888770801961209652822982322376122303586169861685106043820510444293432856251210395693261264867823980172683352796141772210301725997652373804152525037162852291403804455997331367378463632437773242905518075065414724295857460288225400061608664961649196400079359622673770607898395269075056596627116148289491042491764170924014885106158235482774778418134123293974436877051995673618683751115353808771434984204447736174758316063096245047311279841579995578186609402864244042751443128536278453430633423118662852688374229600894418958824842459450540826176452145829389286103522774101195556029650753254244433565937938526828990893149766298997738359913887178888607190765709867052470880785937935110091424743449966353497865681753841380246075612094033617488674676296822570077027076266879557913673839341012099558043806442348798053951239274913334631522409564461770434875790402230022872647568436177018658068697071731879399180374560963492726714528729224208938589940272515747888379118461617702271694075087419634147298076764775745707026934442908236664400557265527951453482191684597674273691978253678690951178777239573925410438679099374700609973920128201422381329108236575369403675960765238333778127017096574296148321075566959285042221837159799800133563239963969638610872680393210300180152020613051613414547163713772512617757277955979895866367571776456268564191092477027650135832200376440239783726540552694851717269598489288851529660975027775639565229734596726205832668434979354541943345062977891187146561050118118108223323735210843681128615413601091222007912350536959777114306541514511332368936078560929788143798814391221507522370648646767364209132147312407014953113532379838195728491128536978285918066991040993153064356179903885952027952713749653604502053512355449916680887234238773855581636172479594866871765094513940103284167914110196720261110812716776424260154507395050380575452850420730818412994731079307343538376880280124019321040198038723558784544408584344466090982802067326529000931562048932875469079874956595180595395347093285140279165467965596318365749701535812384333240968283640721344003442002691613772056762099098025739332715913970186225176459563484134139746647940170537900275350480490468851439300771949915194703080576611022590670399844931867609777417528903454731922206378932141464755402629420074293816349270038351339419146768473851353171629153912238797141905920143036064131705230421762305232861503856799511155936565169005916711845389135580928162511912438531204156138447775120789548666143600293412065767167106888509172568003530668539460588248316513392652567856224602697296203328920073354425994044956624831346979458846837597950064151867164583749203433942592178528868981311575331848941597492470436782387502687532649093096498315347403977436001399982102030846763698994785054617523241463186980898394504211430763617825306895065661536045431497903759118007934839122881885863091769469883539876840543521295706315919855784493235603866268925981702690270202829595794350800918257913991744455922683343374046671669930219650268554687501e-4951
+-5.4677992978237119037926089004291297245985762235403450155814707305425575329500966052143410629387408077958710210208052966529504784489330482549602621133847135082257338717668975178538378957084503396349323438489751160934104796903302909028868611999312592165232778075745690821530731336739429587895774023213939331012985331912661021188896306095323395084578542200319963179359407180003251440084380484161504585462684082946932782829488183829817567452314437076943950532707791252404699268678810198502871250235796855577909830559749628817599194837522029036891995648803056846354520653635957919882905363521007017169741463296044392266269433408052686419017699718627761948763856040592690841721239300491445991666051031755802326720329666454066568630314348735511753639418257984253319063825247065727664852328745422305642626091617823968872438962470092440688372515677832232712866924800106797113478024083516199991991274936894113006233377518471389394984262004503058455485659100090665241525454803628182902241401701783637353179296850056973639305945938813428953287892593620291195986011128990061888798763718548789025717537674780281005583347165047846045925077914824515331335131286063574407181821236377907693209224423490663289916878620725507793163931390372011875799729330162278748985052557432333005334989519381566364065326138465761456173231416844807264090741841972247545424908843928136253653308813487994328446248389608261444391573619177442907290731163188581917588219420107047265367485141413919810885909689112244064797106324295291545892937991321479061743491490060940946128274533657682130125169586930571899403551122506297763180795732325134340989331155893724289358918212707392997768032299997207208451112971425779939507837165263255764268971211819536322993221774123134726665579460265871378186589562858761835613344584269098062275786969729830545786485401407774313414954958161677096004701941411411592755485864471870515173326244464631295701572087440183178339987662926763241220698078822661709054601073523477544653542795020468256078409306409100874886828781860529824879343987945751252081314345990313550683792348814627862441324030155730592166581251009922787324590431548734575328663628650380722603024383412564651446272117561042207738413114131099731016728935023152239431311619533848376583687509108453086730196255111695352464186678221927564757730319825223049341618853631333478241227227268084583396688436229936266854011427192767039363517491659523133852472534104124441112346615696891097070121463652258681270378076538381697594264658479637863087159293838880752928175545408262813403793568695416998388572304528748824756265665683890518422696169422338806137532304784682662448207928681740476188343739117833525916386815135793034906806117413105008719197882837614738262050320291539494104952056471606645482046176634075459021552555959590354956262127809953013679512507451424271839221946794056861055980558363033732905772356986051180966474116423192194741572438649215204229781279620370445373851348786918527399785630808242657122705381806661616271132182017797793661244078445747547535623384548769818529655539279036503234072455810991588075181817695975173110136482659854557506203058080551018873203138260451109855100526720073566126209666125604482413705611996796777927332827103568863352291499261312290355143742018042254470707107847293593205234049774839191754781030496978091006099559675240966730110167624903610656473267105556155633783594089546261107653110531808279445757724399186120387548675148632176049190701680305210224388072261974806791922636412897526952793677946622674149577084803568051242934076450942927092705684547042915490323112457971853658760725588190377666477106903106693847278847646032201293023329503348730723947218797410452333910847913892827195814551858335519518939031446093385329182820714173657946661746005901866885589732922652604573972842197231187365263381958925227970038358064987248233271706462687651143350472018043321314534759819524203308490914358596886150053406629512434788155355109100540319857813535695923273426256911552977539394209918630668466632881929661971212772444625151371953428875491139683919687008724010475217255347915698820960215217257390308560235323463096946442080548018754166369706161589705215873687166365628787796501470056870127729464714362172216802441045276911597009443281135389729130222603185665646434661947627628077723219376892727386120519287577405410510114936151502752997122750262781911372625997223415283516995479265631485799456782561734766648462849641064097181818204279498552827825384186202065516999362573388136163077477126602169410435905014077049808497409025369325795765272066650278004200357878990911374982857977108488482528354406313893864211497105765030504600982253488805474531798742143374465080240030582370086699167937651038307909706139327119325418854546478285735654541635477790346964782617354265050767878335230272194896680141986745074630225893106573559558843545841186025169531604151588481389164948914823593944287133336263680358191369540321930649824471425485137777984823525402115151171093313613251350685343824859052220126891551966018355920872775724807128769003243129486808733796350497668255116485157191011858830643898323628223472099280243583164434348347014910398004439821970508280440872759395827943270985008769143562351938091476215083548164137333541883808870019116234099013452929807950151652297436436006149684939775781234660954156154478642694176038524277810483833149798681345708089152179193979463169402340611793486272301808073267534612685593859596787866884211031341417903391749825320454663508370385251831778477311017089729361152161928815389818579983544490982891734081131312309744330960666031291451740885503458543884956367654943799264600314531815427932691107874782328654759293575803481929361961781073958502075438499070633193799699311694287183299423475339817655608058724723221867087563064557636112380829514501382073257737022472866608244164310385205213523702910787182472517125030106491031844871593141759729773907719510044049352857426592936763727969496103940591601975078602859660478614119405428212830134490731706220583788265344728818766885126977588151111984290444321648931907188080336064713873288834096229203276676119810521851726133377700616341304257822975788967472152742255041912584197045423031298506219011800240120182445838590696647416285334515631019799007515682004250060857020904012215375170479800482680554499806010766109655061507421747722461180617361402575082294678925605271083587897845390768226405648508518103525778638618195775128516073959272990148239415346263486966573934577450787243667063244378381883115827207605856174876350045086885320626669331311880593775916269643646395423220549940790476989709243027420158390806135690975149384714684219964938182719962913931464979458639185519531490009437619838306362365453754807654884704163490469296444427144778593725687358437087390151990694667516279202024332494828210657618261952038597230263799412584275851667403910657370879707181053365818502680037431560091209982641738995652793235851569372314130107647166085235615697257094269133100914135783178856280392139325001352841718610484616627448189556913621837791650699820323059708766420810133584841826718631681683381743511974264126250984214812397119978273917903889865891718836792263377888052458189238746074986456016681098722869419588274020181430652732817858728473849369539367463917171317324882099804999043054467247785592038464723442276239896066431580123756428540074945472427752568981171400621705853374875885943072600692576914790467205905272372594740187988081900317493185005142913607163380720069786786782095331840893694073778325119471833528492917081008547303414509381563617864195257751546539575461435803625993888325647883541039192368366987400263049681218831477776345118518503709588840859023379762456561030683928115349942393963185677123055324771693784214924931737043793679546051454845624150270955450608318747395755728950832754611277041359602301205138509175543313522772786504141007552691902249572375175731740923618769197304652898352694386665448260033458575323252814233868098279476166764258284911434288072243178941698347365985427696983129579496059032032841281149923518087084876885114369033227736521245740554711771423492719899982357711910225545480424688322195336240492253136281857837808491795993788199125205555222116581071134476787468430539307909617442106685159519071053844987343666452494280317720153567054364117244775141336558406098548803924509496052261825198043140272655303625315605326569530252885854991822289219201218313590745412010446642247111703901991591338062693320157180618736569439969283245279430312651192668788340033626825194260296262959884258597703584888770801961209652822982322376122303586169861685106043820510444293432856251210395693261264867823980172683352796141772210301725997652373804152525037162852291403804455997331367378463632437773242905518075065414724295857460288225400061608664961649196400079359622673770607898395269075056596627116148289491042491764170924014885106158235482774778418134123293974436877051995673618683751115353808771434984204447736174758316063096245047311279841579995578186609402864244042751443128536278453430633423118662852688374229600894418958824842459450540826176452145829389286103522774101195556029650753254244433565937938526828990893149766298997738359913887178888607190765709867052470880785937935110091424743449966353497865681753841380246075612094033617488674676296822570077027076266879557913673839341012099558043806442348798053951239274913334631522409564461770434875790402230022872647568436177018658068697071731879399180374560963492726714528729224208938589940272515747888379118461617702271694075087419634147298076764775745707026934442908236664400557265527951453482191684597674273691978253678690951178777239573925410438679099374700609973920128201422381329108236575369403675960765238333778127017096574296148321075566959285042221837159799800133563239963969638610872680393210300180152020613051613414547163713772512617757277955979895866367571776456268564191092477027650135832200376440239783726540552694851717269598489288851529660975027775639565229734596726205832668434979354541943345062977891187146561050118118108223323735210843681128615413601091222007912350536959777114306541514511332368936078560929788143798814391221507522370648646767364209132147312407014953113532379838195728491128536978285918066991040993153064356179903885952027952713749653604502053512355449916680887234238773855581636172479594866871765094513940103284167914110196720261110812716776424260154507395050380575452850420730818412994731079307343538376880280124019321040198038723558784544408584344466090982802067326529000931562048932875469079874956595180595395347093285140279165467965596318365749701535812384333240968283640721344003442002691613772056762099098025739332715913970186225176459563484134139746647940170537900275350480490468851439300771949915194703080576611022590670399844931867609777417528903454731922206378932141464755402629420074293816349270038351339419146768473851353171629153912238797141905920143036064131705230421762305232861503856799511155936565169005916711845389135580928162511912438531204156138447775120789548666143600293412065767167106888509172568003530668539460588248316513392652567856224602697296203328920073354425994044956624831346979458846837597950064151867164583749203433942592178528868981311575331848941597492470436782387502687532649093096498315347403977436001399982102030846763698994785054617523241463186980898394504211430763617825306895065661536045431497903759118007934839122881885863091769469883539876840543521295706315919855784493235603866268925981702690270202829595794350800918257913991744455922683343374046671669930219650268554687499e-4951
+-5.46779929782371190379260890042912972459857622354034501558147073054255753295009660521434106293874080779587102102080529665295047844893304825496026211338471350822573387176689751785383789570845033963493234384897511609341047969033029090288686119993125921652327780757456908215307313367394295878957740232139393310129853319126610211888963060953233950845785422003199631793594071800032514400843804841615045854626840829469327828294881838298175674523144370769439505327077912524046992686788101985028712502357968555779098305597496288175991948375220290368919956488030568463545206536359579198829053635210070171697414632960443922662694334080526864190176997186277619487638560405926908417212393004914459916660510317558023267203296664540665686303143487355117536394182579842533190638252470657276648523287454223056426260916178239688724389624700924406883725156778322327128669248001067971134780240835161999919912749368941130062333775184713893949842620045030584554856591000906652415254548036281829022414017017836373531792968500569736393059459388134289532878925936202911959860111289900618887987637185487890257175376747802810055833471650478460459250779148245153313351312860635744071818212363779076932092244234906632899168786207255077931639313903720118757997293301622787489850525574323330053349895193815663640653261384657614561732314168448072640907418419722475454249088439281362536533088134879943284462483896082614443915736191774429072907311631885819175882194201070472653674851414139198108859096891122440647971063242952915458929379913214790617434914900609409461282745336576821301251695869305718994035511225062977631807957323251343409893311558937242893589182127073929977680322999972072084511129714257799395078371652632557642689712118195363229932217741231347266655794602658713781865895628587618356133445842690980622757869697298305457864854014077743134149549581616770960047019414114115927554858644718705151733262444646312957015720874401831783399876629267632412206980788226617090546010735234775446535427950204682560784093064091008748868287818605298248793439879457512520813143459903135506837923488146278624413240301557305921665812510099227873245904315487345753286636286503807226030243834125646514462721175610422077384131141310997310167289350231522394313116195338483765836875091084530867301962551116953524641866782219275647577303198252230493416188536313334782412272272680845833966884362299362668540114271927670393635174916595231338524725341041244411123466156968910970701214636522586812703780765383816975942646584796378630871592938388807529281755454082628134037935686954169983885723045287488247562656656838905184226961694223388061375323047846826624482079286817404761883437391178335259163868151357930349068061174131050087191978828376147382620503202915394941049520564716066454820461766340754590215525559595903549562621278099530136795125074514242718392219467940568610559805583630337329057723569860511809664741164231921947415724386492152042297812796203704453738513487869185273997856308082426571227053818066616162711321820177977936612440784457475475356233845487698185296555392790365032340724558109915880751818176959751731101364826598545575062030580805510188732031382604511098551005267200735661262096661256044824137056119967967779273328271035688633522914992613122903551437420180422544707071078472935932052340497748391917547810304969780910060995596752409667301101676249036106564732671055561556337835940895462611076531105318082794457577243991861203875486751486321760491907016803052102243880722619748067919226364128975269527936779466226741495770848035680512429340764509429270927056845470429154903231124579718536587607255881903776664771069031066938472788476460322012930233295033487307239472187974104523339108479138928271958145518583355195189390314460933853291828207141736579466617460059018668855897329226526045739728421972311873652633819589252279700383580649872482332717064626876511433504720180433213145347598195242033084909143585968861500534066295124347881553551091005403198578135356959232734262569115529775393942099186306684666328819296619712127724446251513719534288754911396839196870087240104752172553479156988209602152172573903085602353234630969464420805480187541663697061615897052158736871663656287877965014700568701277294647143621722168024410452769115970094432811353897291302226031856656464346619476276280777232193768927273861205192875774054105101149361515027529971227502627819113726259972234152835169954792656314857994567825617347666484628496410640971818182042794985528278253841862020655169993625733881361630774771266021694104359050140770498084974090253693257957652720666502780042003578789909113749828579771084884825283544063138938642114971057650305046009822534888054745317987421433744650802400305823700866991679376510383079097061393271193254188545464782857356545416354777903469647826173542650507678783352302721948966801419867450746302258931065735595588435458411860251695316041515884813891649489148235939442871333362636803581913695403219306498244714254851377779848235254021151511710933136132513506853438248590522201268915519660183559208727757248071287690032431294868087337963504976682551164851571910118588306438983236282234720992802435831644343483470149103980044398219705082804408727593958279432709850087691435623519380914762150835481641373335418838088700191162340990134529298079501516522974364360061496849397757812346609541561544786426941760385242778104838331497986813457080891521791939794631694023406117934862723018080732675346126855938595967878668842110313414179033917498253204546635083703852518317784773110170897293611521619288153898185799835444909828917340811313123097443309606660312914517408855034585438849563676549437992646003145318154279326911078747823286547592935758034819293619617810739585020754384990706331937996993116942871832994234753398176556080587247232218670875630645576361123808295145013820732577370224728666082441643103852052135237029107871824725171250301064910318448715931417597297739077195100440493528574265929367637279694961039405916019750786028596604786141194054282128301344907317062205837882653447288187668851269775881511119842904443216489319071880803360647138732888340962292032766761198105218517261333777006163413042578229757889674721527422550419125841970454230312985062190118002401201824458385906966474162853345156310197990075156820042500608570209040122153751704798004826805544998060107661096550615074217477224611806173614025750822946789256052710835878978453907682264056485085181035257786386181957751285160739592729901482394153462634869665739345774507872436670632443783818831158272076058561748763500450868853206266693313118805937759162696436463954232205499407904769897092430274201583908061356909751493847146842199649381827199629139314649794586391855195314900094376198383063623654537548076548847041634904692964444271447785937256873584370873901519906946675162792020243324948282106576182619520385972302637994125842758516674039106573708797071810533658185026800374315600912099826417389956527932358515693723141301076471660852356156972570942691331009141357831788562803921393250013528417186104846166274481895569136218377916506998203230597087664208101335848418267186316816833817435119742641262509842148123971199782739179038898658917188367922633778880524581892387460749864560166810987228694195882740201814306527328178587284738493695393674639171713173248820998049990430544672477855920384647234422762398960664315801237564285400749454724277525689811714006217058533748758859430726006925769147904672059052723725947401879880819003174931850051429136071633807200697867867820953318408936940737783251194718335284929170810085473034145093815636178641952577515465395754614358036259938883256478835410391923683669874002630496812188314777763451185185037095888408590233797624565610306839281153499423939631856771230553247716937842149249317370437936795460514548456241502709554506083187473957557289508327546112770413596023012051385091755433135227727865041410075526919022495723751757317409236187691973046528983526943866654482600334585753232528142338680982794761667642582849114342880722431789416983473659854276969831295794960590320328412811499235180870848768851143690332277365212457405547117714234927198999823577119102255454804246883221953362404922531362818578378084917959937881991252055552221165810711344767874684305393079096174421066851595190710538449873436664524942803177201535670543641172447751413365584060985488039245094960522618251980431402726553036253156053265695302528858549918222892192012183135907454120104466422471117039019915913380626933201571806187365694399692832452794303126511926687883400336268251942602962629598842585977035848887708019612096528229823223761223035861698616851060438205104442934328562512103956932612648678239801726833527961417722103017259976523738041525250371628522914038044559973313673784636324377732429055180750654147242958574602882254000616086649616491964000793596226737706078983952690750565966271161482894910424917641709240148851061582354827747784181341232939744368770519956736186837511153538087714349842044477361747583160630962450473112798415799955781866094028642440427514431285362784534306334231186628526883742296008944189588248424594505408261764521458293892861035227741011955560296507532542444335659379385268289908931497662989977383599138871788886071907657098670524708807859379351100914247434499663534978656817538413802460756120940336174886746762968225700770270762668795579136738393410120995580438064423487980539512392749133346315224095644617704348757904022300228726475684361770186580686970717318793991803745609634927267145287292242089385899402725157478883791184616177022716940750874196341472980767647757457070269344429082366644005572655279514534821916845976742736919782536786909511787772395739254104386790993747006099739201282014223813291082365753694036759607652383337781270170965742961483210755669592850422218371597998001335632399639696386108726803932103001801520206130516134145471637137725126177572779559798958663675717764562685641910924770276501358322003764402397837265405526948517172695984892888515296609750277756395652297345967262058326684349793545419433450629778911871465610501181181082233237352108436811286154136010912220079123505369597771143065415145113323689360785609297881437988143912215075223706486467673642091321473124070149531135323798381957284911285369782859180669910409931530643561799038859520279527137496536045020535123554499166808872342387738555816361724795948668717650945139401032841679141101967202611108127167764242601545073950503805754528504207308184129947310793073435383768802801240193210401980387235587845444085843444660909828020673265290009315620489328754690798749565951805953953470932851402791654679655963183657497015358123843332409682836407213440034420026916137720567620990980257393327159139701862251764595634841341397466479401705379002753504804904688514393007719499151947030805766110225906703998449318676097774175289034547319222063789321414647554026294200742938163492700383513394191467684738513531716291539122387971419059201430360641317052304217623052328615038567995111559365651690059167118453891355809281625119124385312041561384477751207895486661436002934120657671671068885091725680035306685394605882483165133926525678562246026972962033289200733544259940449566248313469794588468375979500641518671645837492034339425921785288689813115753318489415974924704367823875026875326490930964983153474039774360013999821020308467636989947850546175232414631869808983945042114307636178253068950656615360454314979037591180079348391228818858630917694698835398768405435212957063159198557844932356038662689259817026902702028295957943508009182579139917444559226833433740466716699302196502685546875e-4951
+-5.4677992978237119037926089004291297245985762235403450155814707305425575329500966052143410629387408077958710210208052966529504784489330482549602621133847135082257338717668975178538378957084503396349323438489751160934104796903302909028868611999312592165232778075745690821530731336739429587895774023213939331012985331912661021188896306095323395084578542200319963179359407180003251440084380484161504585462684082946932782829488183829817567452314437076943950532707791252404699268678810198502871250235796855577909830559749628817599194837522029036891995648803056846354520653635957919882905363521007017169741463296044392266269433408052686419017699718627761948763856040592690841721239300491445991666051031755802326720329666454066568630314348735511753639418257984253319063825247065727664852328745422305642626091617823968872438962470092440688372515677832232712866924800106797113478024083516199991991274936894113006233377518471389394984262004503058455485659100090665241525454803628182902241401701783637353179296850056973639305945938813428953287892593620291195986011128990061888798763718548789025717537674780281005583347165047846045925077914824515331335131286063574407181821236377907693209224423490663289916878620725507793163931390372011875799729330162278748985052557432333005334989519381566364065326138465761456173231416844807264090741841972247545424908843928136253653308813487994328446248389608261444391573619177442907290731163188581917588219420107047265367485141413919810885909689112244064797106324295291545892937991321479061743491490060940946128274533657682130125169586930571899403551122506297763180795732325134340989331155893724289358918212707392997768032299997207208451112971425779939507837165263255764268971211819536322993221774123134726665579460265871378186589562858761835613344584269098062275786969729830545786485401407774313414954958161677096004701941411411592755485864471870515173326244464631295701572087440183178339987662926763241220698078822661709054601073523477544653542795020468256078409306409100874886828781860529824879343987945751252081314345990313550683792348814627862441324030155730592166581251009922787324590431548734575328663628650380722603024383412564651446272117561042207738413114131099731016728935023152239431311619533848376583687509108453086730196255111695352464186678221927564757730319825223049341618853631333478241227227268084583396688436229936266854011427192767039363517491659523133852472534104124441112346615696891097070121463652258681270378076538381697594264658479637863087159293838880752928175545408262813403793568695416998388572304528748824756265665683890518422696169422338806137532304784682662448207928681740476188343739117833525916386815135793034906806117413105008719197882837614738262050320291539494104952056471606645482046176634075459021552555959590354956262127809953013679512507451424271839221946794056861055980558363033732905772356986051180966474116423192194741572438649215204229781279620370445373851348786918527399785630808242657122705381806661616271132182017797793661244078445747547535623384548769818529655539279036503234072455810991588075181817695975173110136482659854557506203058080551018873203138260451109855100526720073566126209666125604482413705611996796777927332827103568863352291499261312290355143742018042254470707107847293593205234049774839191754781030496978091006099559675240966730110167624903610656473267105556155633783594089546261107653110531808279445757724399186120387548675148632176049190701680305210224388072261974806791922636412897526952793677946622674149577084803568051242934076450942927092705684547042915490323112457971853658760725588190377666477106903106693847278847646032201293023329503348730723947218797410452333910847913892827195814551858335519518939031446093385329182820714173657946661746005901866885589732922652604573972842197231187365263381958925227970038358064987248233271706462687651143350472018043321314534759819524203308490914358596886150053406629512434788155355109100540319857813535695923273426256911552977539394209918630668466632881929661971212772444625151371953428875491139683919687008724010475217255347915698820960215217257390308560235323463096946442080548018754166369706161589705215873687166365628787796501470056870127729464714362172216802441045276911597009443281135389729130222603185665646434661947627628077723219376892727386120519287577405410510114936151502752997122750262781911372625997223415283516995479265631485799456782561734766648462849641064097181818204279498552827825384186202065516999362573388136163077477126602169410435905014077049808497409025369325795765272066650278004200357878990911374982857977108488482528354406313893864211497105765030504600982253488805474531798742143374465080240030582370086699167937651038307909706139327119325418854546478285735654541635477790346964782617354265050767878335230272194896680141986745074630225893106573559558843545841186025169531604151588481389164948914823593944287133336263680358191369540321930649824471425485137777984823525402115151171093313613251350685343824859052220126891551966018355920872775724807128769003243129486808733796350497668255116485157191011858830643898323628223472099280243583164434348347014910398004439821970508280440872759395827943270985008769143562351938091476215083548164137333541883808870019116234099013452929807950151652297436436006149684939775781234660954156154478642694176038524277810483833149798681345708089152179193979463169402340611793486272301808073267534612685593859596787866884211031341417903391749825320454663508370385251831778477311017089729361152161928815389818579983544490982891734081131312309744330960666031291451740885503458543884956367654943799264600314531815427932691107874782328654759293575803481929361961781073958502075438499070633193799699311694287183299423475339817655608058724723221867087563064557636112380829514501382073257737022472866608244164310385205213523702910787182472517125030106491031844871593141759729773907719510044049352857426592936763727969496103940591601975078602859660478614119405428212830134490731706220583788265344728818766885126977588151111984290444321648931907188080336064713873288834096229203276676119810521851726133377700616341304257822975788967472152742255041912584197045423031298506219011800240120182445838590696647416285334515631019799007515682004250060857020904012215375170479800482680554499806010766109655061507421747722461180617361402575082294678925605271083587897845390768226405648508518103525778638618195775128516073959272990148239415346263486966573934577450787243667063244378381883115827207605856174876350045086885320626669331311880593775916269643646395423220549940790476989709243027420158390806135690975149384714684219964938182719962913931464979458639185519531490009437619838306362365453754807654884704163490469296444427144778593725687358437087390151990694667516279202024332494828210657618261952038597230263799412584275851667403910657370879707181053365818502680037431560091209982641738995652793235851569372314130107647166085235615697257094269133100914135783178856280392139325001352841718610484616627448189556913621837791650699820323059708766420810133584841826718631681683381743511974264126250984214812397119978273917903889865891718836792263377888052458189238746074986456016681098722869419588274020181430652732817858728473849369539367463917171317324882099804999043054467247785592038464723442276239896066431580123756428540074945472427752568981171400621705853374875885943072600692576914790467205905272372594740187988081900317493185005142913607163380720069786786782095331840893694073778325119471833528492917081008547303414509381563617864195257751546539575461435803625993888325647883541039192368366987400263049681218831477776345118518503709588840859023379762456561030683928115349942393963185677123055324771693784214924931737043793679546051454845624150270955450608318747395755728950832754611277041359602301205138509175543313522772786504141007552691902249572375175731740923618769197304652898352694386665448260033458575323252814233868098279476166764258284911434288072243178941698347365985427696983129579496059032032841281149923518087084876885114369033227736521245740554711771423492719899982357711910225545480424688322195336240492253136281857837808491795993788199125205555222116581071134476787468430539307909617442106685159519071053844987343666452494280317720153567054364117244775141336558406098548803924509496052261825198043140272655303625315605326569530252885854991822289219201218313590745412010446642247111703901991591338062693320157180618736569439969283245279430312651192668788340033626825194260296262959884258597703584888770801961209652822982322376122303586169861685106043820510444293432856251210395693261264867823980172683352796141772210301725997652373804152525037162852291403804455997331367378463632437773242905518075065414724295857460288225400061608664961649196400079359622673770607898395269075056596627116148289491042491764170924014885106158235482774778418134123293974436877051995673618683751115353808771434984204447736174758316063096245047311279841579995578186609402864244042751443128536278453430633423118662852688374229600894418958824842459450540826176452145829389286103522774101195556029650753254244433565937938526828990893149766298997738359913887178888607190765709867052470880785937935110091424743449966353497865681753841380246075612094033617488674676296822570077027076266879557913673839341012099558043806442348798053951239274913334631522409564461770434875790402230022872647568436177018658068697071731879399180374560963492726714528729224208938589940272515747888379118461617702271694075087419634147298076764775745707026934442908236664400557265527951453482191684597674273691978253678690951178777239573925410438679099374700609973920128201422381329108236575369403675960765238333778127017096574296148321075566959285042221837159799800133563239963969638610872680393210300180152020613051613414547163713772512617757277955979895866367571776456268564191092477027650135832200376440239783726540552694851717269598489288851529660975027775639565229734596726205832668434979354541943345062977891187146561050118118108223323735210843681128615413601091222007912350536959777114306541514511332368936078560929788143798814391221507522370648646767364209132147312407014953113532379838195728491128536978285918066991040993153064356179903885952027952713749653604502053512355449916680887234238773855581636172479594866871765094513940103284167914110196720261110812716776424260154507395050380575452850420730818412994731079307343538376880280124019321040198038723558784544408584344466090982802067326529000931562048932875469079874956595180595395347093285140279165467965596318365749701535812384333240968283640721344003442002691613772056762099098025739332715913970186225176459563484134139746647940170537900275350480490468851439300771949915194703080576611022590670399844931867609777417528903454731922206378932141464755402629420074293816349270038351339419146768473851353171629153912238797141905920143036064131705230421762305232861503856799511155936565169005916711845389135580928162511912438531204156138447775120789548666143600293412065767167106888509172568003530668539460588248316513392652567856224602697296203328920073354425994044956624831346979458846837597950064151867164583749203433942592178528868981311575331848941597492470436782387502687532649093096498315347403977436001399982102030846763698994785054617523241463186980898394504211430763617825306895065661536045431497903759118007934839122881885863091769469883539876840543521295706315919855784493235603866268925981702690270202829595794350800918257913991744455922683343374046671669930219650268554687501e-4951
+-0x0.7p-149
+-0x0.7p-1074
+-0x0.7p-16445
+-0x0.7p-16494
+0x1p-150
+0x1p-1075
+0x1p-16446
+0x1p-16495
+-0x1p-150
+-0x1p-1075
+-0x1p-16446
+-0x1p-16495
+.70064923216240853546186479164495807e-45
+7.00649232162408535461864791644958065640130970938257885878534141944895541342930300743319094181060791015624e-46
+7.00649232162408535461864791644958065640130970938257885878534141944895541342930300743319094181060791015625e-46
+7.00649232162408535461864791644958065640130970938257885878534141944895541342930300743319094181060791015626e-46
+-7.00649232162408535461864791644958065640130970938257885878534141944895541342930300743319094181060791015624e-46
+-7.00649232162408535461864791644958065640130970938257885878534141944895541342930300743319094181060791015625e-46
+-7.00649232162408535461864791644958065640130970938257885878534141944895541342930300743319094181060791015626e-46
+2.4703282292062327208828439643411068618252990130716238221279284125033775363510437593264991818081799618989828234772285886546332835517796989819938739800539093906315035659515570226392290858392449105184435931802849936536152500319370457678249219365623669863658480757001585769269903706311928279558551332927834338409351978015531246597263579574622766465272827220056374006485499977096599470454020828166226237857393450736339007967761930577506740176324673600968951340535537458516661134223766678604162159680461914467291840300530057530849048765391711386591646239524912623653881879636239373280423891018672348497668235089863388587925628302755995657524455507255189313690836254779186948667994968324049705821028513185451396213837722826145437693412532098591327667236328124e-324
+2.4703282292062327208828439643411068618252990130716238221279284125033775363510437593264991818081799618989828234772285886546332835517796989819938739800539093906315035659515570226392290858392449105184435931802849936536152500319370457678249219365623669863658480757001585769269903706311928279558551332927834338409351978015531246597263579574622766465272827220056374006485499977096599470454020828166226237857393450736339007967761930577506740176324673600968951340535537458516661134223766678604162159680461914467291840300530057530849048765391711386591646239524912623653881879636239373280423891018672348497668235089863388587925628302755995657524455507255189313690836254779186948667994968324049705821028513185451396213837722826145437693412532098591327667236328125e-324
+2.4703282292062327208828439643411068618252990130716238221279284125033775363510437593264991818081799618989828234772285886546332835517796989819938739800539093906315035659515570226392290858392449105184435931802849936536152500319370457678249219365623669863658480757001585769269903706311928279558551332927834338409351978015531246597263579574622766465272827220056374006485499977096599470454020828166226237857393450736339007967761930577506740176324673600968951340535537458516661134223766678604162159680461914467291840300530057530849048765391711386591646239524912623653881879636239373280423891018672348497668235089863388587925628302755995657524455507255189313690836254779186948667994968324049705821028513185451396213837722826145437693412532098591327667236328126e-324
+-2.4703282292062327208828439643411068618252990130716238221279284125033775363510437593264991818081799618989828234772285886546332835517796989819938739800539093906315035659515570226392290858392449105184435931802849936536152500319370457678249219365623669863658480757001585769269903706311928279558551332927834338409351978015531246597263579574622766465272827220056374006485499977096599470454020828166226237857393450736339007967761930577506740176324673600968951340535537458516661134223766678604162159680461914467291840300530057530849048765391711386591646239524912623653881879636239373280423891018672348497668235089863388587925628302755995657524455507255189313690836254779186948667994968324049705821028513185451396213837722826145437693412532098591327667236328124e-324
+-2.4703282292062327208828439643411068618252990130716238221279284125033775363510437593264991818081799618989828234772285886546332835517796989819938739800539093906315035659515570226392290858392449105184435931802849936536152500319370457678249219365623669863658480757001585769269903706311928279558551332927834338409351978015531246597263579574622766465272827220056374006485499977096599470454020828166226237857393450736339007967761930577506740176324673600968951340535537458516661134223766678604162159680461914467291840300530057530849048765391711386591646239524912623653881879636239373280423891018672348497668235089863388587925628302755995657524455507255189313690836254779186948667994968324049705821028513185451396213837722826145437693412532098591327667236328125e-324
+-2.4703282292062327208828439643411068618252990130716238221279284125033775363510437593264991818081799618989828234772285886546332835517796989819938739800539093906315035659515570226392290858392449105184435931802849936536152500319370457678249219365623669863658480757001585769269903706311928279558551332927834338409351978015531246597263579574622766465272827220056374006485499977096599470454020828166226237857393450736339007967761930577506740176324673600968951340535537458516661134223766678604162159680461914467291840300530057530849048765391711386591646239524912623653881879636239373280423891018672348497668235089863388587925628302755995657524455507255189313690836254779186948667994968324049705821028513185451396213837722826145437693412532098591327667236328126e-324
+1.82259976594123730126420296680970990819952540784678167186049024351418584431669886840478035431291360259862367367360176555098349281631101608498675403779490450274191129058896583928461263190281677987831078128299170536447015989677676363429562039997708640550775926919152302738435771122464765292985913410713131103376617773042203403962987686984411316948595140667733210597864690600010838133614601613871681951542280276489775942764960612766058558174381456923146501775692637508015664228929367328342904167452656185259699435199165429391997316125073430122973318829343522821181735512119859732943017878403356723899138210986814640887564778026842288063392332395425873162546186801975636139070797668304819972220170105852674422401098888180221895434381162451705845464727526614177730212750823552425549507762484741018808753638726079896241463208233641468961241718926107442376223082667022657044926746945053999973304249789647043354111258394904631316614206681676861518285530333635550805084849345427276340804672339278791177264322833523245464353153129378096510959641978734303986620037096633539629329212395162630085725125582600936685277823883492820153083593049415051104450437620211914690606070787926358977364081411635544299722928735751692643879771301240039585999097767207595829950175191441110017783298397938554546884420461552538187244104722816024213635806139907491818083029479760454178844362711626647761487494632027538147971912063924809690969103877295273058627398067023490884558283804713066036286365630374146882657021080984305152976459971071596872478304966869803153760915112192273767083898623101906331345170408354325877269319107750447803297770519645747631196394042357976659226774333324024028170376571419266465026123884210852547563237372731787743310739247077115755551931534219571260621965209529206118711148614230326874252623232432768485954951338025914378049849860538923653349006471371371975851619548239568383911087481548770985671906958133943927799958876422544137402326929408872363515336911744925148845142650068227520261364354697002916289429272868432749597813293152504173604381153301045168945974496048759541471080100519101973888604170033075957748634771829115251095545428834602408676747944708548838154240391870140692461377047103665770055763116743840798104372065112827921945625030361510289100654183705651174880622260739758549192434399417410164472062845437778260804090757560281944655628120766454222846704757309223464545058305531743779508241780347081470374488718989636990233738212174195604234593588461272325314215528265459543623864312796269176427251818027542711345978562318056661295241015095829415854218885612968394742320564741129353791774349282275541494026428939134920627812463726111753054622717119310116356020391377016695730659609458715794206834400971798313683173521572022151606820588780251530071841853198634516520873759366510045598375024838080906130739822646856203519935194543445776352574523286837269888247054743973982471908128830717347432604265401234817912837829289728424665952102694142190409017939355538720903773940059325978870813594819158491785411281829232728432185130930121677446908186036638626917272725653250577033788275532848525020676860268503396244010460868170366183668422400245220420698887085348274712352039989322593091109423678562877840971664204374301183812473393474181569023692824311977350780165916130639182603434989926970020331865584136555767033892083012035521577557018520518779278646965154203692177035106027598152525747997287067958495583828773920163969005601017367414626907539916022639742121376325089842645593155408913831923616011893504143113588169809756975685615156809718301077041526572845529202418627301258888257023010355646157596158820107337643411098344495769079824062658034841113036159712976090652715172861118398396463438153644617763942735713912193155539153353006222951965776408842015246576140657437291217544606529750759900127860216624160777572354875625503811168240060144404381782532731747344361636381195322953833511355431708115960517850363668467732859378452319744244754189705176591797980699728768894888776273098873237375908148750504573178096251637132279732290029080034917390851159718996069867384057524634361867451078210323154806935160062513887899020538632350719578957221218762625988338233522900425764882381207240722674803484256371990031477603784632430434075343952218821448873158758760259077397922975757953735064291924684701700383120505009176657075834209273037908753324078050945056651597552104952664855941872449222161542832136880323939394014264995176092751280620673551723331208577960453876924923755340564701453016713590166028324696751231085985884240222167593347334526263303037916609526590361628275094514687712979547371657019216768348669940844962684915105995807144581550267466768607900288997226458836794359699020464423731084729515154927619118848472118259301156549275391180883502559594450767573982988933806622483582100752977021911865196145152803953417231772013838628271297216496382745313147623777787545601193971231801073102166081571418283792593282745084673717170570311045377504502284479416196840733756305173220061186402909252416023762563344143764956029112654501658894183721617190636706196102146327745427411573664267478610548114494490049701326681466073235027601469575864652759810903283362563811874506460304920716945160547124445139612696233397054113663378176432693167172174324788120020498949799252604115536513853848262142313920128414259368279443832662271152360297173930646598210564674468705978287574339360244225115375618646198655959556280703437804726344639166084401515545027901284172772594924370056965764537173873096051299395266611814969942972446937104374365814436535553437638172469618344861812949854558849812664215334381772718093108970359582607762182530978586011606431206539270246528340251461663568777312665664372314290610998078251132725518693529082410739556958543548525453707936098381671273577525790074909555360813881034617350711745676369290608241723750100354970106149571977139199099246359065033480164509524755309789212426564987013135305339916928676198868262047064684760709433781635772354068612627551149096062556283756591960503706614301481072163106357293601120215712910962780320764010922253732701739505753777925668721137680859409919296558240509140850139708613990151410104328354063372667467067274819461968988824720951115052103399330025052273347500202856736346707384583901599334942268514999353369220365516871691405825741537268724538008583607648929752017570278626326151302560754685495028393678419262128727319250428386913197576633827464717820878289888579781924835957478890210814594606277052757358686187249587833483622951068755564437706268645919720898812154651410735166469301589965697476758067194636020452303250497949048947399883127275733209713104883264862130618398438300031458732794354541218179182692182949013878301564321481423815928645752291194790291300506635648891720930673414441649427368858727539840128657434212664708614252838891346368857902932357270177886061675600124771866970699942139129985509310786171897907713767025490553617452052324190314230443669713785943929520934640464416671176139062034948722091493965189712072792638835666067743532362554736033778616139422395438938944605811706580880420836614049374657066594246393012966219639062789307544592960174860630795820249954853388936995742898065294246733938102175776059529094912831231797891546390571057749606999349996810181557492618640128215744807587466320221438600412521428466916484908092508563270571335405686177916252953143575335641923049301557353017574575315800626626939667724977283350476378690544602400232622622606984439469645646912594417064906111761643056936695157678048364605212059547317525838488465251538119345419979627752159611803463974561223291334210165604062771592587817061728345698629469530077932541521870102279760384499807979877285590410184415905645947383083105790145978931820171516152080500903184835361062491319185763169442515370923471198674337350461697251811045075909288347136691842306340831907917252439136412062563991015509661175647955551494200111528584410842714112893660931587222547527616371447626907477263138994491219951425656610431931653530106776137603833078393623616256283714563444092455070819135182372571411642399666607859039700751818268082294407317787468307510454272859459361639319979293997084018517407055270237114922624894768464359698724807022283865063570179483291145554841647601059067178556847880390815917137788528020328496013081698320174206083993477134242184345417718684421898434176286183306074297397337394378635818040034822140823705679673305304460208977733857268729121898133230944150931434375503975562627800112089417314200987543199614195325678616295902673204032176076607741253741011953899538950353479401701480978109520837367985644204216226079933908944509320472574034339086658841246013841750123876174304679348186657771224594878774792577476351726916884715747652858200960751333538695549872163988000264532075579235359661317563583521988757053827631636808305880569746716283687194118275915928060447077646581456256839985578728945837051179362571449947348159120582527720210320816824370932805266651927288698009547480142504810428454261511435444743728876175627914098669648063196082808198168469420588173819431297620345075913670651853432169177514148111886459795089429969643832554329992461199712957262962023969219032890174902935953126450366971415811499887844992885605846137934153585373646778724962248920989408566923423587556265193045579464470040331860146021474495993513170797583044448771741365214872568116252634674100076242158561453923395526895656905772931330601248536544975755715095764080696461966467575052492961263728205392340905646916958065447157660255882585819023423114809694122214668524218426504844940638948658914245639927512262303170595924131913084701462263664582335366579733760671407937763694121917898012253202550794445927090056988580987161070251889864283474072790532666000445210799879898795369575601310701000600506735376838711381823879045908375392524259853266319554558572588187561880636974923425500452774001254800799279088468508982839057565328297629505098869916759252131884099115322420686108894783264515139811150209926303957155203500393727027411079117369478937095384712003637406693041168456532590381021805048371107896453595203099293812662714637405025074568828822557880697107157708023383177045107932793985761637095123260953060223303469977176881187266346286506759842379165512015006845041184833055602957447462579518605453908265316222905883648379800344280559713700655734203702709055921414200515024650167935251509501402436061376649103597691145127922934267080064403467326795745195948481361947814886969942673557755096669771873496442918230266249855317268651317823644283800930551559885321061219165671786041281110803227612135737813344806675638712573522540330326752464442386379900620750588198544947113799155493133901793000917834934968229504797669239833050649010268588703408635567999483106225365924725096344849106407354596440471549184675431400247646054497566794504464730489228246171177238763846374129323806353067143453547105684101405874350776205012855998370519788550563353055706151297118603093875039708128437347187128159250402631828887145334311373552557223689628363908560011768895131535294161055044642175226187415342324320677763066911181419980149855416104489931529489458659833547172890548612497344779808640595096229937705251106163138658308234789274625008958442163643654994384491346591453337999940340102822545663315950182058410804877289936327981680704769212059417689650218871786818104993012530393359782797076272952876972564899611799589468478404319021053066185948310785346220896419939008967567342765319314502669727526379972481519742277811246822238899767398834228515624e-4951
+1.82259976594123730126420296680970990819952540784678167186049024351418584431669886840478035431291360259862367367360176555098349281631101608498675403779490450274191129058896583928461263190281677987831078128299170536447015989677676363429562039997708640550775926919152302738435771122464765292985913410713131103376617773042203403962987686984411316948595140667733210597864690600010838133614601613871681951542280276489775942764960612766058558174381456923146501775692637508015664228929367328342904167452656185259699435199165429391997316125073430122973318829343522821181735512119859732943017878403356723899138210986814640887564778026842288063392332395425873162546186801975636139070797668304819972220170105852674422401098888180221895434381162451705845464727526614177730212750823552425549507762484741018808753638726079896241463208233641468961241718926107442376223082667022657044926746945053999973304249789647043354111258394904631316614206681676861518285530333635550805084849345427276340804672339278791177264322833523245464353153129378096510959641978734303986620037096633539629329212395162630085725125582600936685277823883492820153083593049415051104450437620211914690606070787926358977364081411635544299722928735751692643879771301240039585999097767207595829950175191441110017783298397938554546884420461552538187244104722816024213635806139907491818083029479760454178844362711626647761487494632027538147971912063924809690969103877295273058627398067023490884558283804713066036286365630374146882657021080984305152976459971071596872478304966869803153760915112192273767083898623101906331345170408354325877269319107750447803297770519645747631196394042357976659226774333324024028170376571419266465026123884210852547563237372731787743310739247077115755551931534219571260621965209529206118711148614230326874252623232432768485954951338025914378049849860538923653349006471371371975851619548239568383911087481548770985671906958133943927799958876422544137402326929408872363515336911744925148845142650068227520261364354697002916289429272868432749597813293152504173604381153301045168945974496048759541471080100519101973888604170033075957748634771829115251095545428834602408676747944708548838154240391870140692461377047103665770055763116743840798104372065112827921945625030361510289100654183705651174880622260739758549192434399417410164472062845437778260804090757560281944655628120766454222846704757309223464545058305531743779508241780347081470374488718989636990233738212174195604234593588461272325314215528265459543623864312796269176427251818027542711345978562318056661295241015095829415854218885612968394742320564741129353791774349282275541494026428939134920627812463726111753054622717119310116356020391377016695730659609458715794206834400971798313683173521572022151606820588780251530071841853198634516520873759366510045598375024838080906130739822646856203519935194543445776352574523286837269888247054743973982471908128830717347432604265401234817912837829289728424665952102694142190409017939355538720903773940059325978870813594819158491785411281829232728432185130930121677446908186036638626917272725653250577033788275532848525020676860268503396244010460868170366183668422400245220420698887085348274712352039989322593091109423678562877840971664204374301183812473393474181569023692824311977350780165916130639182603434989926970020331865584136555767033892083012035521577557018520518779278646965154203692177035106027598152525747997287067958495583828773920163969005601017367414626907539916022639742121376325089842645593155408913831923616011893504143113588169809756975685615156809718301077041526572845529202418627301258888257023010355646157596158820107337643411098344495769079824062658034841113036159712976090652715172861118398396463438153644617763942735713912193155539153353006222951965776408842015246576140657437291217544606529750759900127860216624160777572354875625503811168240060144404381782532731747344361636381195322953833511355431708115960517850363668467732859378452319744244754189705176591797980699728768894888776273098873237375908148750504573178096251637132279732290029080034917390851159718996069867384057524634361867451078210323154806935160062513887899020538632350719578957221218762625988338233522900425764882381207240722674803484256371990031477603784632430434075343952218821448873158758760259077397922975757953735064291924684701700383120505009176657075834209273037908753324078050945056651597552104952664855941872449222161542832136880323939394014264995176092751280620673551723331208577960453876924923755340564701453016713590166028324696751231085985884240222167593347334526263303037916609526590361628275094514687712979547371657019216768348669940844962684915105995807144581550267466768607900288997226458836794359699020464423731084729515154927619118848472118259301156549275391180883502559594450767573982988933806622483582100752977021911865196145152803953417231772013838628271297216496382745313147623777787545601193971231801073102166081571418283792593282745084673717170570311045377504502284479416196840733756305173220061186402909252416023762563344143764956029112654501658894183721617190636706196102146327745427411573664267478610548114494490049701326681466073235027601469575864652759810903283362563811874506460304920716945160547124445139612696233397054113663378176432693167172174324788120020498949799252604115536513853848262142313920128414259368279443832662271152360297173930646598210564674468705978287574339360244225115375618646198655959556280703437804726344639166084401515545027901284172772594924370056965764537173873096051299395266611814969942972446937104374365814436535553437638172469618344861812949854558849812664215334381772718093108970359582607762182530978586011606431206539270246528340251461663568777312665664372314290610998078251132725518693529082410739556958543548525453707936098381671273577525790074909555360813881034617350711745676369290608241723750100354970106149571977139199099246359065033480164509524755309789212426564987013135305339916928676198868262047064684760709433781635772354068612627551149096062556283756591960503706614301481072163106357293601120215712910962780320764010922253732701739505753777925668721137680859409919296558240509140850139708613990151410104328354063372667467067274819461968988824720951115052103399330025052273347500202856736346707384583901599334942268514999353369220365516871691405825741537268724538008583607648929752017570278626326151302560754685495028393678419262128727319250428386913197576633827464717820878289888579781924835957478890210814594606277052757358686187249587833483622951068755564437706268645919720898812154651410735166469301589965697476758067194636020452303250497949048947399883127275733209713104883264862130618398438300031458732794354541218179182692182949013878301564321481423815928645752291194790291300506635648891720930673414441649427368858727539840128657434212664708614252838891346368857902932357270177886061675600124771866970699942139129985509310786171897907713767025490553617452052324190314230443669713785943929520934640464416671176139062034948722091493965189712072792638835666067743532362554736033778616139422395438938944605811706580880420836614049374657066594246393012966219639062789307544592960174860630795820249954853388936995742898065294246733938102175776059529094912831231797891546390571057749606999349996810181557492618640128215744807587466320221438600412521428466916484908092508563270571335405686177916252953143575335641923049301557353017574575315800626626939667724977283350476378690544602400232622622606984439469645646912594417064906111761643056936695157678048364605212059547317525838488465251538119345419979627752159611803463974561223291334210165604062771592587817061728345698629469530077932541521870102279760384499807979877285590410184415905645947383083105790145978931820171516152080500903184835361062491319185763169442515370923471198674337350461697251811045075909288347136691842306340831907917252439136412062563991015509661175647955551494200111528584410842714112893660931587222547527616371447626907477263138994491219951425656610431931653530106776137603833078393623616256283714563444092455070819135182372571411642399666607859039700751818268082294407317787468307510454272859459361639319979293997084018517407055270237114922624894768464359698724807022283865063570179483291145554841647601059067178556847880390815917137788528020328496013081698320174206083993477134242184345417718684421898434176286183306074297397337394378635818040034822140823705679673305304460208977733857268729121898133230944150931434375503975562627800112089417314200987543199614195325678616295902673204032176076607741253741011953899538950353479401701480978109520837367985644204216226079933908944509320472574034339086658841246013841750123876174304679348186657771224594878774792577476351726916884715747652858200960751333538695549872163988000264532075579235359661317563583521988757053827631636808305880569746716283687194118275915928060447077646581456256839985578728945837051179362571449947348159120582527720210320816824370932805266651927288698009547480142504810428454261511435444743728876175627914098669648063196082808198168469420588173819431297620345075913670651853432169177514148111886459795089429969643832554329992461199712957262962023969219032890174902935953126450366971415811499887844992885605846137934153585373646778724962248920989408566923423587556265193045579464470040331860146021474495993513170797583044448771741365214872568116252634674100076242158561453923395526895656905772931330601248536544975755715095764080696461966467575052492961263728205392340905646916958065447157660255882585819023423114809694122214668524218426504844940638948658914245639927512262303170595924131913084701462263664582335366579733760671407937763694121917898012253202550794445927090056988580987161070251889864283474072790532666000445210799879898795369575601310701000600506735376838711381823879045908375392524259853266319554558572588187561880636974923425500452774001254800799279088468508982839057565328297629505098869916759252131884099115322420686108894783264515139811150209926303957155203500393727027411079117369478937095384712003637406693041168456532590381021805048371107896453595203099293812662714637405025074568828822557880697107157708023383177045107932793985761637095123260953060223303469977176881187266346286506759842379165512015006845041184833055602957447462579518605453908265316222905883648379800344280559713700655734203702709055921414200515024650167935251509501402436061376649103597691145127922934267080064403467326795745195948481361947814886969942673557755096669771873496442918230266249855317268651317823644283800930551559885321061219165671786041281110803227612135737813344806675638712573522540330326752464442386379900620750588198544947113799155493133901793000917834934968229504797669239833050649010268588703408635567999483106225365924725096344849106407354596440471549184675431400247646054497566794504464730489228246171177238763846374129323806353067143453547105684101405874350776205012855998370519788550563353055706151297118603093875039708128437347187128159250402631828887145334311373552557223689628363908560011768895131535294161055044642175226187415342324320677763066911181419980149855416104489931529489458659833547172890548612497344779808640595096229937705251106163138658308234789274625008958442163643654994384491346591453337999940340102822545663315950182058410804877289936327981680704769212059417689650218871786818104993012530393359782797076272952876972564899611799589468478404319021053066185948310785346220896419939008967567342765319314502669727526379972481519742277811246822238899767398834228515625e-4951
+1.82259976594123730126420296680970990819952540784678167186049024351418584431669886840478035431291360259862367367360176555098349281631101608498675403779490450274191129058896583928461263190281677987831078128299170536447015989677676363429562039997708640550775926919152302738435771122464765292985913410713131103376617773042203403962987686984411316948595140667733210597864690600010838133614601613871681951542280276489775942764960612766058558174381456923146501775692637508015664228929367328342904167452656185259699435199165429391997316125073430122973318829343522821181735512119859732943017878403356723899138210986814640887564778026842288063392332395425873162546186801975636139070797668304819972220170105852674422401098888180221895434381162451705845464727526614177730212750823552425549507762484741018808753638726079896241463208233641468961241718926107442376223082667022657044926746945053999973304249789647043354111258394904631316614206681676861518285530333635550805084849345427276340804672339278791177264322833523245464353153129378096510959641978734303986620037096633539629329212395162630085725125582600936685277823883492820153083593049415051104450437620211914690606070787926358977364081411635544299722928735751692643879771301240039585999097767207595829950175191441110017783298397938554546884420461552538187244104722816024213635806139907491818083029479760454178844362711626647761487494632027538147971912063924809690969103877295273058627398067023490884558283804713066036286365630374146882657021080984305152976459971071596872478304966869803153760915112192273767083898623101906331345170408354325877269319107750447803297770519645747631196394042357976659226774333324024028170376571419266465026123884210852547563237372731787743310739247077115755551931534219571260621965209529206118711148614230326874252623232432768485954951338025914378049849860538923653349006471371371975851619548239568383911087481548770985671906958133943927799958876422544137402326929408872363515336911744925148845142650068227520261364354697002916289429272868432749597813293152504173604381153301045168945974496048759541471080100519101973888604170033075957748634771829115251095545428834602408676747944708548838154240391870140692461377047103665770055763116743840798104372065112827921945625030361510289100654183705651174880622260739758549192434399417410164472062845437778260804090757560281944655628120766454222846704757309223464545058305531743779508241780347081470374488718989636990233738212174195604234593588461272325314215528265459543623864312796269176427251818027542711345978562318056661295241015095829415854218885612968394742320564741129353791774349282275541494026428939134920627812463726111753054622717119310116356020391377016695730659609458715794206834400971798313683173521572022151606820588780251530071841853198634516520873759366510045598375024838080906130739822646856203519935194543445776352574523286837269888247054743973982471908128830717347432604265401234817912837829289728424665952102694142190409017939355538720903773940059325978870813594819158491785411281829232728432185130930121677446908186036638626917272725653250577033788275532848525020676860268503396244010460868170366183668422400245220420698887085348274712352039989322593091109423678562877840971664204374301183812473393474181569023692824311977350780165916130639182603434989926970020331865584136555767033892083012035521577557018520518779278646965154203692177035106027598152525747997287067958495583828773920163969005601017367414626907539916022639742121376325089842645593155408913831923616011893504143113588169809756975685615156809718301077041526572845529202418627301258888257023010355646157596158820107337643411098344495769079824062658034841113036159712976090652715172861118398396463438153644617763942735713912193155539153353006222951965776408842015246576140657437291217544606529750759900127860216624160777572354875625503811168240060144404381782532731747344361636381195322953833511355431708115960517850363668467732859378452319744244754189705176591797980699728768894888776273098873237375908148750504573178096251637132279732290029080034917390851159718996069867384057524634361867451078210323154806935160062513887899020538632350719578957221218762625988338233522900425764882381207240722674803484256371990031477603784632430434075343952218821448873158758760259077397922975757953735064291924684701700383120505009176657075834209273037908753324078050945056651597552104952664855941872449222161542832136880323939394014264995176092751280620673551723331208577960453876924923755340564701453016713590166028324696751231085985884240222167593347334526263303037916609526590361628275094514687712979547371657019216768348669940844962684915105995807144581550267466768607900288997226458836794359699020464423731084729515154927619118848472118259301156549275391180883502559594450767573982988933806622483582100752977021911865196145152803953417231772013838628271297216496382745313147623777787545601193971231801073102166081571418283792593282745084673717170570311045377504502284479416196840733756305173220061186402909252416023762563344143764956029112654501658894183721617190636706196102146327745427411573664267478610548114494490049701326681466073235027601469575864652759810903283362563811874506460304920716945160547124445139612696233397054113663378176432693167172174324788120020498949799252604115536513853848262142313920128414259368279443832662271152360297173930646598210564674468705978287574339360244225115375618646198655959556280703437804726344639166084401515545027901284172772594924370056965764537173873096051299395266611814969942972446937104374365814436535553437638172469618344861812949854558849812664215334381772718093108970359582607762182530978586011606431206539270246528340251461663568777312665664372314290610998078251132725518693529082410739556958543548525453707936098381671273577525790074909555360813881034617350711745676369290608241723750100354970106149571977139199099246359065033480164509524755309789212426564987013135305339916928676198868262047064684760709433781635772354068612627551149096062556283756591960503706614301481072163106357293601120215712910962780320764010922253732701739505753777925668721137680859409919296558240509140850139708613990151410104328354063372667467067274819461968988824720951115052103399330025052273347500202856736346707384583901599334942268514999353369220365516871691405825741537268724538008583607648929752017570278626326151302560754685495028393678419262128727319250428386913197576633827464717820878289888579781924835957478890210814594606277052757358686187249587833483622951068755564437706268645919720898812154651410735166469301589965697476758067194636020452303250497949048947399883127275733209713104883264862130618398438300031458732794354541218179182692182949013878301564321481423815928645752291194790291300506635648891720930673414441649427368858727539840128657434212664708614252838891346368857902932357270177886061675600124771866970699942139129985509310786171897907713767025490553617452052324190314230443669713785943929520934640464416671176139062034948722091493965189712072792638835666067743532362554736033778616139422395438938944605811706580880420836614049374657066594246393012966219639062789307544592960174860630795820249954853388936995742898065294246733938102175776059529094912831231797891546390571057749606999349996810181557492618640128215744807587466320221438600412521428466916484908092508563270571335405686177916252953143575335641923049301557353017574575315800626626939667724977283350476378690544602400232622622606984439469645646912594417064906111761643056936695157678048364605212059547317525838488465251538119345419979627752159611803463974561223291334210165604062771592587817061728345698629469530077932541521870102279760384499807979877285590410184415905645947383083105790145978931820171516152080500903184835361062491319185763169442515370923471198674337350461697251811045075909288347136691842306340831907917252439136412062563991015509661175647955551494200111528584410842714112893660931587222547527616371447626907477263138994491219951425656610431931653530106776137603833078393623616256283714563444092455070819135182372571411642399666607859039700751818268082294407317787468307510454272859459361639319979293997084018517407055270237114922624894768464359698724807022283865063570179483291145554841647601059067178556847880390815917137788528020328496013081698320174206083993477134242184345417718684421898434176286183306074297397337394378635818040034822140823705679673305304460208977733857268729121898133230944150931434375503975562627800112089417314200987543199614195325678616295902673204032176076607741253741011953899538950353479401701480978109520837367985644204216226079933908944509320472574034339086658841246013841750123876174304679348186657771224594878774792577476351726916884715747652858200960751333538695549872163988000264532075579235359661317563583521988757053827631636808305880569746716283687194118275915928060447077646581456256839985578728945837051179362571449947348159120582527720210320816824370932805266651927288698009547480142504810428454261511435444743728876175627914098669648063196082808198168469420588173819431297620345075913670651853432169177514148111886459795089429969643832554329992461199712957262962023969219032890174902935953126450366971415811499887844992885605846137934153585373646778724962248920989408566923423587556265193045579464470040331860146021474495993513170797583044448771741365214872568116252634674100076242158561453923395526895656905772931330601248536544975755715095764080696461966467575052492961263728205392340905646916958065447157660255882585819023423114809694122214668524218426504844940638948658914245639927512262303170595924131913084701462263664582335366579733760671407937763694121917898012253202550794445927090056988580987161070251889864283474072790532666000445210799879898795369575601310701000600506735376838711381823879045908375392524259853266319554558572588187561880636974923425500452774001254800799279088468508982839057565328297629505098869916759252131884099115322420686108894783264515139811150209926303957155203500393727027411079117369478937095384712003637406693041168456532590381021805048371107896453595203099293812662714637405025074568828822557880697107157708023383177045107932793985761637095123260953060223303469977176881187266346286506759842379165512015006845041184833055602957447462579518605453908265316222905883648379800344280559713700655734203702709055921414200515024650167935251509501402436061376649103597691145127922934267080064403467326795745195948481361947814886969942673557755096669771873496442918230266249855317268651317823644283800930551559885321061219165671786041281110803227612135737813344806675638712573522540330326752464442386379900620750588198544947113799155493133901793000917834934968229504797669239833050649010268588703408635567999483106225365924725096344849106407354596440471549184675431400247646054497566794504464730489228246171177238763846374129323806353067143453547105684101405874350776205012855998370519788550563353055706151297118603093875039708128437347187128159250402631828887145334311373552557223689628363908560011768895131535294161055044642175226187415342324320677763066911181419980149855416104489931529489458659833547172890548612497344779808640595096229937705251106163138658308234789274625008958442163643654994384491346591453337999940340102822545663315950182058410804877289936327981680704769212059417689650218871786818104993012530393359782797076272952876972564899611799589468478404319021053066185948310785346220896419939008967567342765319314502669727526379972481519742277811246822238899767398834228515626e-4951
+-1.82259976594123730126420296680970990819952540784678167186049024351418584431669886840478035431291360259862367367360176555098349281631101608498675403779490450274191129058896583928461263190281677987831078128299170536447015989677676363429562039997708640550775926919152302738435771122464765292985913410713131103376617773042203403962987686984411316948595140667733210597864690600010838133614601613871681951542280276489775942764960612766058558174381456923146501775692637508015664228929367328342904167452656185259699435199165429391997316125073430122973318829343522821181735512119859732943017878403356723899138210986814640887564778026842288063392332395425873162546186801975636139070797668304819972220170105852674422401098888180221895434381162451705845464727526614177730212750823552425549507762484741018808753638726079896241463208233641468961241718926107442376223082667022657044926746945053999973304249789647043354111258394904631316614206681676861518285530333635550805084849345427276340804672339278791177264322833523245464353153129378096510959641978734303986620037096633539629329212395162630085725125582600936685277823883492820153083593049415051104450437620211914690606070787926358977364081411635544299722928735751692643879771301240039585999097767207595829950175191441110017783298397938554546884420461552538187244104722816024213635806139907491818083029479760454178844362711626647761487494632027538147971912063924809690969103877295273058627398067023490884558283804713066036286365630374146882657021080984305152976459971071596872478304966869803153760915112192273767083898623101906331345170408354325877269319107750447803297770519645747631196394042357976659226774333324024028170376571419266465026123884210852547563237372731787743310739247077115755551931534219571260621965209529206118711148614230326874252623232432768485954951338025914378049849860538923653349006471371371975851619548239568383911087481548770985671906958133943927799958876422544137402326929408872363515336911744925148845142650068227520261364354697002916289429272868432749597813293152504173604381153301045168945974496048759541471080100519101973888604170033075957748634771829115251095545428834602408676747944708548838154240391870140692461377047103665770055763116743840798104372065112827921945625030361510289100654183705651174880622260739758549192434399417410164472062845437778260804090757560281944655628120766454222846704757309223464545058305531743779508241780347081470374488718989636990233738212174195604234593588461272325314215528265459543623864312796269176427251818027542711345978562318056661295241015095829415854218885612968394742320564741129353791774349282275541494026428939134920627812463726111753054622717119310116356020391377016695730659609458715794206834400971798313683173521572022151606820588780251530071841853198634516520873759366510045598375024838080906130739822646856203519935194543445776352574523286837269888247054743973982471908128830717347432604265401234817912837829289728424665952102694142190409017939355538720903773940059325978870813594819158491785411281829232728432185130930121677446908186036638626917272725653250577033788275532848525020676860268503396244010460868170366183668422400245220420698887085348274712352039989322593091109423678562877840971664204374301183812473393474181569023692824311977350780165916130639182603434989926970020331865584136555767033892083012035521577557018520518779278646965154203692177035106027598152525747997287067958495583828773920163969005601017367414626907539916022639742121376325089842645593155408913831923616011893504143113588169809756975685615156809718301077041526572845529202418627301258888257023010355646157596158820107337643411098344495769079824062658034841113036159712976090652715172861118398396463438153644617763942735713912193155539153353006222951965776408842015246576140657437291217544606529750759900127860216624160777572354875625503811168240060144404381782532731747344361636381195322953833511355431708115960517850363668467732859378452319744244754189705176591797980699728768894888776273098873237375908148750504573178096251637132279732290029080034917390851159718996069867384057524634361867451078210323154806935160062513887899020538632350719578957221218762625988338233522900425764882381207240722674803484256371990031477603784632430434075343952218821448873158758760259077397922975757953735064291924684701700383120505009176657075834209273037908753324078050945056651597552104952664855941872449222161542832136880323939394014264995176092751280620673551723331208577960453876924923755340564701453016713590166028324696751231085985884240222167593347334526263303037916609526590361628275094514687712979547371657019216768348669940844962684915105995807144581550267466768607900288997226458836794359699020464423731084729515154927619118848472118259301156549275391180883502559594450767573982988933806622483582100752977021911865196145152803953417231772013838628271297216496382745313147623777787545601193971231801073102166081571418283792593282745084673717170570311045377504502284479416196840733756305173220061186402909252416023762563344143764956029112654501658894183721617190636706196102146327745427411573664267478610548114494490049701326681466073235027601469575864652759810903283362563811874506460304920716945160547124445139612696233397054113663378176432693167172174324788120020498949799252604115536513853848262142313920128414259368279443832662271152360297173930646598210564674468705978287574339360244225115375618646198655959556280703437804726344639166084401515545027901284172772594924370056965764537173873096051299395266611814969942972446937104374365814436535553437638172469618344861812949854558849812664215334381772718093108970359582607762182530978586011606431206539270246528340251461663568777312665664372314290610998078251132725518693529082410739556958543548525453707936098381671273577525790074909555360813881034617350711745676369290608241723750100354970106149571977139199099246359065033480164509524755309789212426564987013135305339916928676198868262047064684760709433781635772354068612627551149096062556283756591960503706614301481072163106357293601120215712910962780320764010922253732701739505753777925668721137680859409919296558240509140850139708613990151410104328354063372667467067274819461968988824720951115052103399330025052273347500202856736346707384583901599334942268514999353369220365516871691405825741537268724538008583607648929752017570278626326151302560754685495028393678419262128727319250428386913197576633827464717820878289888579781924835957478890210814594606277052757358686187249587833483622951068755564437706268645919720898812154651410735166469301589965697476758067194636020452303250497949048947399883127275733209713104883264862130618398438300031458732794354541218179182692182949013878301564321481423815928645752291194790291300506635648891720930673414441649427368858727539840128657434212664708614252838891346368857902932357270177886061675600124771866970699942139129985509310786171897907713767025490553617452052324190314230443669713785943929520934640464416671176139062034948722091493965189712072792638835666067743532362554736033778616139422395438938944605811706580880420836614049374657066594246393012966219639062789307544592960174860630795820249954853388936995742898065294246733938102175776059529094912831231797891546390571057749606999349996810181557492618640128215744807587466320221438600412521428466916484908092508563270571335405686177916252953143575335641923049301557353017574575315800626626939667724977283350476378690544602400232622622606984439469645646912594417064906111761643056936695157678048364605212059547317525838488465251538119345419979627752159611803463974561223291334210165604062771592587817061728345698629469530077932541521870102279760384499807979877285590410184415905645947383083105790145978931820171516152080500903184835361062491319185763169442515370923471198674337350461697251811045075909288347136691842306340831907917252439136412062563991015509661175647955551494200111528584410842714112893660931587222547527616371447626907477263138994491219951425656610431931653530106776137603833078393623616256283714563444092455070819135182372571411642399666607859039700751818268082294407317787468307510454272859459361639319979293997084018517407055270237114922624894768464359698724807022283865063570179483291145554841647601059067178556847880390815917137788528020328496013081698320174206083993477134242184345417718684421898434176286183306074297397337394378635818040034822140823705679673305304460208977733857268729121898133230944150931434375503975562627800112089417314200987543199614195325678616295902673204032176076607741253741011953899538950353479401701480978109520837367985644204216226079933908944509320472574034339086658841246013841750123876174304679348186657771224594878774792577476351726916884715747652858200960751333538695549872163988000264532075579235359661317563583521988757053827631636808305880569746716283687194118275915928060447077646581456256839985578728945837051179362571449947348159120582527720210320816824370932805266651927288698009547480142504810428454261511435444743728876175627914098669648063196082808198168469420588173819431297620345075913670651853432169177514148111886459795089429969643832554329992461199712957262962023969219032890174902935953126450366971415811499887844992885605846137934153585373646778724962248920989408566923423587556265193045579464470040331860146021474495993513170797583044448771741365214872568116252634674100076242158561453923395526895656905772931330601248536544975755715095764080696461966467575052492961263728205392340905646916958065447157660255882585819023423114809694122214668524218426504844940638948658914245639927512262303170595924131913084701462263664582335366579733760671407937763694121917898012253202550794445927090056988580987161070251889864283474072790532666000445210799879898795369575601310701000600506735376838711381823879045908375392524259853266319554558572588187561880636974923425500452774001254800799279088468508982839057565328297629505098869916759252131884099115322420686108894783264515139811150209926303957155203500393727027411079117369478937095384712003637406693041168456532590381021805048371107896453595203099293812662714637405025074568828822557880697107157708023383177045107932793985761637095123260953060223303469977176881187266346286506759842379165512015006845041184833055602957447462579518605453908265316222905883648379800344280559713700655734203702709055921414200515024650167935251509501402436061376649103597691145127922934267080064403467326795745195948481361947814886969942673557755096669771873496442918230266249855317268651317823644283800930551559885321061219165671786041281110803227612135737813344806675638712573522540330326752464442386379900620750588198544947113799155493133901793000917834934968229504797669239833050649010268588703408635567999483106225365924725096344849106407354596440471549184675431400247646054497566794504464730489228246171177238763846374129323806353067143453547105684101405874350776205012855998370519788550563353055706151297118603093875039708128437347187128159250402631828887145334311373552557223689628363908560011768895131535294161055044642175226187415342324320677763066911181419980149855416104489931529489458659833547172890548612497344779808640595096229937705251106163138658308234789274625008958442163643654994384491346591453337999940340102822545663315950182058410804877289936327981680704769212059417689650218871786818104993012530393359782797076272952876972564899611799589468478404319021053066185948310785346220896419939008967567342765319314502669727526379972481519742277811246822238899767398834228515624e-4951
+-1.82259976594123730126420296680970990819952540784678167186049024351418584431669886840478035431291360259862367367360176555098349281631101608498675403779490450274191129058896583928461263190281677987831078128299170536447015989677676363429562039997708640550775926919152302738435771122464765292985913410713131103376617773042203403962987686984411316948595140667733210597864690600010838133614601613871681951542280276489775942764960612766058558174381456923146501775692637508015664228929367328342904167452656185259699435199165429391997316125073430122973318829343522821181735512119859732943017878403356723899138210986814640887564778026842288063392332395425873162546186801975636139070797668304819972220170105852674422401098888180221895434381162451705845464727526614177730212750823552425549507762484741018808753638726079896241463208233641468961241718926107442376223082667022657044926746945053999973304249789647043354111258394904631316614206681676861518285530333635550805084849345427276340804672339278791177264322833523245464353153129378096510959641978734303986620037096633539629329212395162630085725125582600936685277823883492820153083593049415051104450437620211914690606070787926358977364081411635544299722928735751692643879771301240039585999097767207595829950175191441110017783298397938554546884420461552538187244104722816024213635806139907491818083029479760454178844362711626647761487494632027538147971912063924809690969103877295273058627398067023490884558283804713066036286365630374146882657021080984305152976459971071596872478304966869803153760915112192273767083898623101906331345170408354325877269319107750447803297770519645747631196394042357976659226774333324024028170376571419266465026123884210852547563237372731787743310739247077115755551931534219571260621965209529206118711148614230326874252623232432768485954951338025914378049849860538923653349006471371371975851619548239568383911087481548770985671906958133943927799958876422544137402326929408872363515336911744925148845142650068227520261364354697002916289429272868432749597813293152504173604381153301045168945974496048759541471080100519101973888604170033075957748634771829115251095545428834602408676747944708548838154240391870140692461377047103665770055763116743840798104372065112827921945625030361510289100654183705651174880622260739758549192434399417410164472062845437778260804090757560281944655628120766454222846704757309223464545058305531743779508241780347081470374488718989636990233738212174195604234593588461272325314215528265459543623864312796269176427251818027542711345978562318056661295241015095829415854218885612968394742320564741129353791774349282275541494026428939134920627812463726111753054622717119310116356020391377016695730659609458715794206834400971798313683173521572022151606820588780251530071841853198634516520873759366510045598375024838080906130739822646856203519935194543445776352574523286837269888247054743973982471908128830717347432604265401234817912837829289728424665952102694142190409017939355538720903773940059325978870813594819158491785411281829232728432185130930121677446908186036638626917272725653250577033788275532848525020676860268503396244010460868170366183668422400245220420698887085348274712352039989322593091109423678562877840971664204374301183812473393474181569023692824311977350780165916130639182603434989926970020331865584136555767033892083012035521577557018520518779278646965154203692177035106027598152525747997287067958495583828773920163969005601017367414626907539916022639742121376325089842645593155408913831923616011893504143113588169809756975685615156809718301077041526572845529202418627301258888257023010355646157596158820107337643411098344495769079824062658034841113036159712976090652715172861118398396463438153644617763942735713912193155539153353006222951965776408842015246576140657437291217544606529750759900127860216624160777572354875625503811168240060144404381782532731747344361636381195322953833511355431708115960517850363668467732859378452319744244754189705176591797980699728768894888776273098873237375908148750504573178096251637132279732290029080034917390851159718996069867384057524634361867451078210323154806935160062513887899020538632350719578957221218762625988338233522900425764882381207240722674803484256371990031477603784632430434075343952218821448873158758760259077397922975757953735064291924684701700383120505009176657075834209273037908753324078050945056651597552104952664855941872449222161542832136880323939394014264995176092751280620673551723331208577960453876924923755340564701453016713590166028324696751231085985884240222167593347334526263303037916609526590361628275094514687712979547371657019216768348669940844962684915105995807144581550267466768607900288997226458836794359699020464423731084729515154927619118848472118259301156549275391180883502559594450767573982988933806622483582100752977021911865196145152803953417231772013838628271297216496382745313147623777787545601193971231801073102166081571418283792593282745084673717170570311045377504502284479416196840733756305173220061186402909252416023762563344143764956029112654501658894183721617190636706196102146327745427411573664267478610548114494490049701326681466073235027601469575864652759810903283362563811874506460304920716945160547124445139612696233397054113663378176432693167172174324788120020498949799252604115536513853848262142313920128414259368279443832662271152360297173930646598210564674468705978287574339360244225115375618646198655959556280703437804726344639166084401515545027901284172772594924370056965764537173873096051299395266611814969942972446937104374365814436535553437638172469618344861812949854558849812664215334381772718093108970359582607762182530978586011606431206539270246528340251461663568777312665664372314290610998078251132725518693529082410739556958543548525453707936098381671273577525790074909555360813881034617350711745676369290608241723750100354970106149571977139199099246359065033480164509524755309789212426564987013135305339916928676198868262047064684760709433781635772354068612627551149096062556283756591960503706614301481072163106357293601120215712910962780320764010922253732701739505753777925668721137680859409919296558240509140850139708613990151410104328354063372667467067274819461968988824720951115052103399330025052273347500202856736346707384583901599334942268514999353369220365516871691405825741537268724538008583607648929752017570278626326151302560754685495028393678419262128727319250428386913197576633827464717820878289888579781924835957478890210814594606277052757358686187249587833483622951068755564437706268645919720898812154651410735166469301589965697476758067194636020452303250497949048947399883127275733209713104883264862130618398438300031458732794354541218179182692182949013878301564321481423815928645752291194790291300506635648891720930673414441649427368858727539840128657434212664708614252838891346368857902932357270177886061675600124771866970699942139129985509310786171897907713767025490553617452052324190314230443669713785943929520934640464416671176139062034948722091493965189712072792638835666067743532362554736033778616139422395438938944605811706580880420836614049374657066594246393012966219639062789307544592960174860630795820249954853388936995742898065294246733938102175776059529094912831231797891546390571057749606999349996810181557492618640128215744807587466320221438600412521428466916484908092508563270571335405686177916252953143575335641923049301557353017574575315800626626939667724977283350476378690544602400232622622606984439469645646912594417064906111761643056936695157678048364605212059547317525838488465251538119345419979627752159611803463974561223291334210165604062771592587817061728345698629469530077932541521870102279760384499807979877285590410184415905645947383083105790145978931820171516152080500903184835361062491319185763169442515370923471198674337350461697251811045075909288347136691842306340831907917252439136412062563991015509661175647955551494200111528584410842714112893660931587222547527616371447626907477263138994491219951425656610431931653530106776137603833078393623616256283714563444092455070819135182372571411642399666607859039700751818268082294407317787468307510454272859459361639319979293997084018517407055270237114922624894768464359698724807022283865063570179483291145554841647601059067178556847880390815917137788528020328496013081698320174206083993477134242184345417718684421898434176286183306074297397337394378635818040034822140823705679673305304460208977733857268729121898133230944150931434375503975562627800112089417314200987543199614195325678616295902673204032176076607741253741011953899538950353479401701480978109520837367985644204216226079933908944509320472574034339086658841246013841750123876174304679348186657771224594878774792577476351726916884715747652858200960751333538695549872163988000264532075579235359661317563583521988757053827631636808305880569746716283687194118275915928060447077646581456256839985578728945837051179362571449947348159120582527720210320816824370932805266651927288698009547480142504810428454261511435444743728876175627914098669648063196082808198168469420588173819431297620345075913670651853432169177514148111886459795089429969643832554329992461199712957262962023969219032890174902935953126450366971415811499887844992885605846137934153585373646778724962248920989408566923423587556265193045579464470040331860146021474495993513170797583044448771741365214872568116252634674100076242158561453923395526895656905772931330601248536544975755715095764080696461966467575052492961263728205392340905646916958065447157660255882585819023423114809694122214668524218426504844940638948658914245639927512262303170595924131913084701462263664582335366579733760671407937763694121917898012253202550794445927090056988580987161070251889864283474072790532666000445210799879898795369575601310701000600506735376838711381823879045908375392524259853266319554558572588187561880636974923425500452774001254800799279088468508982839057565328297629505098869916759252131884099115322420686108894783264515139811150209926303957155203500393727027411079117369478937095384712003637406693041168456532590381021805048371107896453595203099293812662714637405025074568828822557880697107157708023383177045107932793985761637095123260953060223303469977176881187266346286506759842379165512015006845041184833055602957447462579518605453908265316222905883648379800344280559713700655734203702709055921414200515024650167935251509501402436061376649103597691145127922934267080064403467326795745195948481361947814886969942673557755096669771873496442918230266249855317268651317823644283800930551559885321061219165671786041281110803227612135737813344806675638712573522540330326752464442386379900620750588198544947113799155493133901793000917834934968229504797669239833050649010268588703408635567999483106225365924725096344849106407354596440471549184675431400247646054497566794504464730489228246171177238763846374129323806353067143453547105684101405874350776205012855998370519788550563353055706151297118603093875039708128437347187128159250402631828887145334311373552557223689628363908560011768895131535294161055044642175226187415342324320677763066911181419980149855416104489931529489458659833547172890548612497344779808640595096229937705251106163138658308234789274625008958442163643654994384491346591453337999940340102822545663315950182058410804877289936327981680704769212059417689650218871786818104993012530393359782797076272952876972564899611799589468478404319021053066185948310785346220896419939008967567342765319314502669727526379972481519742277811246822238899767398834228515625e-4951
+-1.82259976594123730126420296680970990819952540784678167186049024351418584431669886840478035431291360259862367367360176555098349281631101608498675403779490450274191129058896583928461263190281677987831078128299170536447015989677676363429562039997708640550775926919152302738435771122464765292985913410713131103376617773042203403962987686984411316948595140667733210597864690600010838133614601613871681951542280276489775942764960612766058558174381456923146501775692637508015664228929367328342904167452656185259699435199165429391997316125073430122973318829343522821181735512119859732943017878403356723899138210986814640887564778026842288063392332395425873162546186801975636139070797668304819972220170105852674422401098888180221895434381162451705845464727526614177730212750823552425549507762484741018808753638726079896241463208233641468961241718926107442376223082667022657044926746945053999973304249789647043354111258394904631316614206681676861518285530333635550805084849345427276340804672339278791177264322833523245464353153129378096510959641978734303986620037096633539629329212395162630085725125582600936685277823883492820153083593049415051104450437620211914690606070787926358977364081411635544299722928735751692643879771301240039585999097767207595829950175191441110017783298397938554546884420461552538187244104722816024213635806139907491818083029479760454178844362711626647761487494632027538147971912063924809690969103877295273058627398067023490884558283804713066036286365630374146882657021080984305152976459971071596872478304966869803153760915112192273767083898623101906331345170408354325877269319107750447803297770519645747631196394042357976659226774333324024028170376571419266465026123884210852547563237372731787743310739247077115755551931534219571260621965209529206118711148614230326874252623232432768485954951338025914378049849860538923653349006471371371975851619548239568383911087481548770985671906958133943927799958876422544137402326929408872363515336911744925148845142650068227520261364354697002916289429272868432749597813293152504173604381153301045168945974496048759541471080100519101973888604170033075957748634771829115251095545428834602408676747944708548838154240391870140692461377047103665770055763116743840798104372065112827921945625030361510289100654183705651174880622260739758549192434399417410164472062845437778260804090757560281944655628120766454222846704757309223464545058305531743779508241780347081470374488718989636990233738212174195604234593588461272325314215528265459543623864312796269176427251818027542711345978562318056661295241015095829415854218885612968394742320564741129353791774349282275541494026428939134920627812463726111753054622717119310116356020391377016695730659609458715794206834400971798313683173521572022151606820588780251530071841853198634516520873759366510045598375024838080906130739822646856203519935194543445776352574523286837269888247054743973982471908128830717347432604265401234817912837829289728424665952102694142190409017939355538720903773940059325978870813594819158491785411281829232728432185130930121677446908186036638626917272725653250577033788275532848525020676860268503396244010460868170366183668422400245220420698887085348274712352039989322593091109423678562877840971664204374301183812473393474181569023692824311977350780165916130639182603434989926970020331865584136555767033892083012035521577557018520518779278646965154203692177035106027598152525747997287067958495583828773920163969005601017367414626907539916022639742121376325089842645593155408913831923616011893504143113588169809756975685615156809718301077041526572845529202418627301258888257023010355646157596158820107337643411098344495769079824062658034841113036159712976090652715172861118398396463438153644617763942735713912193155539153353006222951965776408842015246576140657437291217544606529750759900127860216624160777572354875625503811168240060144404381782532731747344361636381195322953833511355431708115960517850363668467732859378452319744244754189705176591797980699728768894888776273098873237375908148750504573178096251637132279732290029080034917390851159718996069867384057524634361867451078210323154806935160062513887899020538632350719578957221218762625988338233522900425764882381207240722674803484256371990031477603784632430434075343952218821448873158758760259077397922975757953735064291924684701700383120505009176657075834209273037908753324078050945056651597552104952664855941872449222161542832136880323939394014264995176092751280620673551723331208577960453876924923755340564701453016713590166028324696751231085985884240222167593347334526263303037916609526590361628275094514687712979547371657019216768348669940844962684915105995807144581550267466768607900288997226458836794359699020464423731084729515154927619118848472118259301156549275391180883502559594450767573982988933806622483582100752977021911865196145152803953417231772013838628271297216496382745313147623777787545601193971231801073102166081571418283792593282745084673717170570311045377504502284479416196840733756305173220061186402909252416023762563344143764956029112654501658894183721617190636706196102146327745427411573664267478610548114494490049701326681466073235027601469575864652759810903283362563811874506460304920716945160547124445139612696233397054113663378176432693167172174324788120020498949799252604115536513853848262142313920128414259368279443832662271152360297173930646598210564674468705978287574339360244225115375618646198655959556280703437804726344639166084401515545027901284172772594924370056965764537173873096051299395266611814969942972446937104374365814436535553437638172469618344861812949854558849812664215334381772718093108970359582607762182530978586011606431206539270246528340251461663568777312665664372314290610998078251132725518693529082410739556958543548525453707936098381671273577525790074909555360813881034617350711745676369290608241723750100354970106149571977139199099246359065033480164509524755309789212426564987013135305339916928676198868262047064684760709433781635772354068612627551149096062556283756591960503706614301481072163106357293601120215712910962780320764010922253732701739505753777925668721137680859409919296558240509140850139708613990151410104328354063372667467067274819461968988824720951115052103399330025052273347500202856736346707384583901599334942268514999353369220365516871691405825741537268724538008583607648929752017570278626326151302560754685495028393678419262128727319250428386913197576633827464717820878289888579781924835957478890210814594606277052757358686187249587833483622951068755564437706268645919720898812154651410735166469301589965697476758067194636020452303250497949048947399883127275733209713104883264862130618398438300031458732794354541218179182692182949013878301564321481423815928645752291194790291300506635648891720930673414441649427368858727539840128657434212664708614252838891346368857902932357270177886061675600124771866970699942139129985509310786171897907713767025490553617452052324190314230443669713785943929520934640464416671176139062034948722091493965189712072792638835666067743532362554736033778616139422395438938944605811706580880420836614049374657066594246393012966219639062789307544592960174860630795820249954853388936995742898065294246733938102175776059529094912831231797891546390571057749606999349996810181557492618640128215744807587466320221438600412521428466916484908092508563270571335405686177916252953143575335641923049301557353017574575315800626626939667724977283350476378690544602400232622622606984439469645646912594417064906111761643056936695157678048364605212059547317525838488465251538119345419979627752159611803463974561223291334210165604062771592587817061728345698629469530077932541521870102279760384499807979877285590410184415905645947383083105790145978931820171516152080500903184835361062491319185763169442515370923471198674337350461697251811045075909288347136691842306340831907917252439136412062563991015509661175647955551494200111528584410842714112893660931587222547527616371447626907477263138994491219951425656610431931653530106776137603833078393623616256283714563444092455070819135182372571411642399666607859039700751818268082294407317787468307510454272859459361639319979293997084018517407055270237114922624894768464359698724807022283865063570179483291145554841647601059067178556847880390815917137788528020328496013081698320174206083993477134242184345417718684421898434176286183306074297397337394378635818040034822140823705679673305304460208977733857268729121898133230944150931434375503975562627800112089417314200987543199614195325678616295902673204032176076607741253741011953899538950353479401701480978109520837367985644204216226079933908944509320472574034339086658841246013841750123876174304679348186657771224594878774792577476351726916884715747652858200960751333538695549872163988000264532075579235359661317563583521988757053827631636808305880569746716283687194118275915928060447077646581456256839985578728945837051179362571449947348159120582527720210320816824370932805266651927288698009547480142504810428454261511435444743728876175627914098669648063196082808198168469420588173819431297620345075913670651853432169177514148111886459795089429969643832554329992461199712957262962023969219032890174902935953126450366971415811499887844992885605846137934153585373646778724962248920989408566923423587556265193045579464470040331860146021474495993513170797583044448771741365214872568116252634674100076242158561453923395526895656905772931330601248536544975755715095764080696461966467575052492961263728205392340905646916958065447157660255882585819023423114809694122214668524218426504844940638948658914245639927512262303170595924131913084701462263664582335366579733760671407937763694121917898012253202550794445927090056988580987161070251889864283474072790532666000445210799879898795369575601310701000600506735376838711381823879045908375392524259853266319554558572588187561880636974923425500452774001254800799279088468508982839057565328297629505098869916759252131884099115322420686108894783264515139811150209926303957155203500393727027411079117369478937095384712003637406693041168456532590381021805048371107896453595203099293812662714637405025074568828822557880697107157708023383177045107932793985761637095123260953060223303469977176881187266346286506759842379165512015006845041184833055602957447462579518605453908265316222905883648379800344280559713700655734203702709055921414200515024650167935251509501402436061376649103597691145127922934267080064403467326795745195948481361947814886969942673557755096669771873496442918230266249855317268651317823644283800930551559885321061219165671786041281110803227612135737813344806675638712573522540330326752464442386379900620750588198544947113799155493133901793000917834934968229504797669239833050649010268588703408635567999483106225365924725096344849106407354596440471549184675431400247646054497566794504464730489228246171177238763846374129323806353067143453547105684101405874350776205012855998370519788550563353055706151297118603093875039708128437347187128159250402631828887145334311373552557223689628363908560011768895131535294161055044642175226187415342324320677763066911181419980149855416104489931529489458659833547172890548612497344779808640595096229937705251106163138658308234789274625008958442163643654994384491346591453337999940340102822545663315950182058410804877289936327981680704769212059417689650218871786818104993012530393359782797076272952876972564899611799589468478404319021053066185948310785346220896419939008967567342765319314502669727526379972481519742277811246822238899767398834228515626e-4951
+9.11299882970618650632101483404854954099762703923390835930245121757092922158349434202390177156456801299311836836800882775491746408155508042493377018897452251370955645294482919642306315951408389939155390641495852682235079948388381817147810199988543202753879634595761513692178855612323826464929567053565655516883088865211017019814938434922056584742975703338666052989323453000054190668073008069358409757711401382448879713824803063830292790871907284615732508878463187540078321144646836641714520837263280926298497175995827146959986580625367150614866594146717614105908677560599298664715089392016783619495691054934073204437823890134211440316961661977129365812730934009878180695353988341524099861100850529263372112005494440901109477171905812258529227323637633070888651063754117762127747538812423705094043768193630399481207316041168207344806208594630537211881115413335113285224633734725269999866521248948235216770556291974523156583071033408384307591427651668177754025424246727136381704023361696393955886321614167616227321765765646890482554798209893671519933100185483167698146646061975813150428625627913004683426389119417464100765417965247075255522252188101059573453030353939631794886820407058177721498614643678758463219398856506200197929995488836037979149750875957205550088916491989692772734422102307762690936220523614080121068179030699537459090415147398802270894221813558133238807437473160137690739859560319624048454845519386476365293136990335117454422791419023565330181431828151870734413285105404921525764882299855357984362391524834349015768804575560961368835419493115509531656725852041771629386346595538752239016488852598228738155981970211789883296133871666620120140851882857096332325130619421054262737816186863658938716553696235385578777759657671097856303109826047646030593555743071151634371263116162163842429774756690129571890249249302694618266745032356856859879258097741197841919555437407743854928359534790669719638999794382112720687011634647044361817576684558724625744225713250341137601306821773485014581447146364342163747989066465762520868021905766505225844729872480243797707355400502595509869443020850165379788743173859145576255477727144173012043383739723542744190771201959350703462306885235518328850278815583719203990521860325564139609728125151807551445503270918528255874403111303698792745962171997087050822360314227188891304020453787801409723278140603832271114233523786546117322725291527658718897541208901735407351872443594948184951168691060870978021172967942306361626571077641327297718119321563981345882136259090137713556729892811590283306476205075479147079271094428064841973711602823705646768958871746411377707470132144695674603139062318630558765273113585596550581780101956885083478653298047293578971034172004858991568415867607860110758034102943901257650359209265993172582604368796832550227991875124190404530653699113234281017599675972717228881762872616434186349441235273719869912359540644153586737163021327006174089564189146448642123329760513470710952045089696777693604518869700296629894354067974095792458927056409146163642160925654650608387234540930183193134586363628266252885168941377664242625103384301342516981220052304340851830918342112001226102103494435426741373561760199946612965455547118392814389204858321021871505919062366967370907845118464121559886753900829580653195913017174949634850101659327920682778835169460415060177607887785092602593896393234825771018460885175530137990762628739986435339792477919143869600819845028005086837073134537699580113198710606881625449213227965777044569159618080059467520715567940849048784878428075784048591505385207632864227646012093136506294441285115051778230787980794100536688217055491722478845399120313290174205565180798564880453263575864305591991982317190768223088819713678569560965777695766765031114759828882044210076232880703287186456087723032648753799500639301083120803887861774378127519055841200300722021908912663658736721808181905976614769167556777158540579802589251818342338664296892261598721223770948525882958989903498643844474443881365494366186879540743752522865890481258185661398661450145400174586954255798594980349336920287623171809337255391051615774034675800312569439495102693161753597894786106093813129941691167614502128824411906036203613374017421281859950157388018923162152170376719761094107244365793793801295386989614878789768675321459623423508501915602525045883285379171046365189543766620390254725283257987760524763324279709362246110807714160684401619696970071324975880463756403103367758616656042889802269384624618776702823507265083567950830141623483756155429929421201110837966736672631316515189583047632951808141375472573438564897736858285096083841743349704224813424575529979035722907751337333843039501444986132294183971798495102322118655423647575774638095594242360591296505782746376955904417512797972253837869914944669033112417910503764885109559325980725764019767086158860069193141356486082481913726565738118888937728005969856159005365510830407857091418962966413725423368585852851555226887522511422397080984203668781525866100305932014546262080118812816720718824780145563272508294470918608085953183530980510731638727137057868321337393052740572472450248506633407330366175138007347879323263799054516416812819059372532301524603584725802735622225698063481166985270568316890882163465835860871623940600102494748996263020577682569269241310711569600642071296841397219163311355761801485869653232991052823372343529891437871696801221125576878093230993279797781403517189023631723195830422007577725139506420863862974621850284828822685869365480256496976333059074849714862234685521871829072182677767188190862348091724309064749272794249063321076671908863590465544851797913038810912654892930058032156032696351232641701257308317843886563328321861571453054990391255663627593467645412053697784792717742627268539680491908356367887628950374547776804069405173086753558728381846453041208618750501774850530747859885695995496231795325167400822547623776548946062132824935065676526699584643380994341310235323423803547168908178861770343063137755745480312781418782959802518533071507405360815531786468005601078564554813901603820054611268663508697528768889628343605688404297049596482791202545704250698543069950757050521641770316863337335336374097309844944123604755575260516996650125261366737501014283681733536922919507996674711342574996766846101827584358457029128707686343622690042918038244648760087851393131630756512803773427475141968392096310643636596252141934565987883169137323589104391449442898909624179787394451054072973031385263786793430936247939167418114755343777822188531343229598604494060773257053675832346507949828487383790335973180102261516252489745244736999415636378666048565524416324310653091992191500157293663971772706090895913460914745069391507821607407119079643228761455973951456502533178244458604653367072208247136844293637699200643287171063323543071264194456731844289514661786350889430308378000623859334853499710695649927546553930859489538568835127452768087260261620951571152218348568929719647604673202322083355880695310174743610457469825948560363963194178330338717661812773680168893080697111977194694723029058532904402104183070246873285332971231965064831098195313946537722964800874303153979101249774266944684978714490326471233669690510878880297645474564156158989457731952855288748034996749984050907787463093200641078724037937331601107193002062607142334582424540462542816352856677028430889581264765717876678209615246507786765087872876579003133134698338624886416752381893452723012001163113113034922197348228234562972085324530558808215284683475788390241823026060297736587629192442326257690596727099898138760798059017319872806116456671050828020313857962939085308641728493147347650389662707609350511398801922499039899386427952050922079528229736915415528950729894659100857580760402504515924176805312456595928815847212576854617355993371686752308486259055225379546441735683459211531704159539586262195682060312819955077548305878239777757471000557642922054213570564468304657936112737638081857238134537386315694972456099757128283052159658267650533880688019165391968118081281418572817220462275354095675911862857058211998333039295198503759091340411472036588937341537552271364297296808196599896469985420092587035276351185574613124473842321798493624035111419325317850897416455727774208238005295335892784239401954079585688942640101642480065408491600871030419967385671210921727088593422109492170881430916530371486986686971893179090200174110704118528398366526522301044888669286343645609490666154720754657171877519877813139000560447086571004937715998070976628393081479513366020160880383038706268705059769497694751767397008507404890547604186839928221021081130399669544722546602362870171695433294206230069208750619380871523396740933288856122974393873962887381758634584423578738264291004803756667693477749360819940001322660377896176798306587817917609943785269138158184041529402848733581418435970591379579640302235388232907281284199927893644729185255896812857249736740795602912638601051604084121854664026333259636443490047737400712524052142271307557177223718644380878139570493348240315980414040990842347102940869097156488101725379568353259267160845887570740559432298975447149848219162771649962305998564786314810119846095164450874514679765632251834857079057499439224964428029230689670767926868233893624811244604947042834617117937781325965227897322350201659300730107372479967565853987915222243858706826074362840581263173370500381210792807269616977634478284528864656653006242682724878778575478820403482309832337875262464806318641026961704528234584790327235788301279412929095117115574048470611073342621092132524224703194743294571228199637561311515852979620659565423507311318322911676832898668803357039688818470609589490061266012753972229635450284942904935805351259449321417370363952663330002226053999399493976847878006553505003002533676884193556909119395229541876962621299266331597772792862940937809403184874617127502263870006274003996395442342544914195287826641488147525494349583796260659420495576612103430544473916322575699055751049631519785776017501968635137055395586847394685476923560018187033465205842282662951905109025241855539482267976015496469063313573187025125372844144112789403485535788540116915885225539663969928808185475616304765301116517349885884405936331731432533799211895827560075034225205924165278014787237312897593027269541326581114529418241899001721402798568503278671018513545279607071002575123250839676257547507012180306883245517988455725639614671335400322017336633978725979742406809739074434849713367788775483348859367482214591151331249276586343256589118221419004652757799426605306095828358930206405554016138060678689066724033378193562867612701651633762322211931899503103752940992724735568995777465669508965004589174674841147523988346199165253245051342943517043177839997415531126829623625481724245532036772982202357745923377157001238230272487833972522323652446141230855886193819231870646619031765335717267735528420507029371753881025064279991852598942752816765278530756485593015469375198540642186735935640796252013159144435726671556867762786118448141819542800058844475657676470805275223210876130937076711621603388815334555907099900749277080522449657647447293299167735864452743062486723899043202975481149688526255530815693291541173946373125044792210818218274971922456732957266689999701700514112728316579750910292054024386449681639908403523846060297088448251094358934090524965062651966798913985381364764384862824498058997947342392021595105265330929741553926731104482099695044837836713826596572513348637631899862407598711389056234111194498836994171142578124e-4952
+9.11299882970618650632101483404854954099762703923390835930245121757092922158349434202390177156456801299311836836800882775491746408155508042493377018897452251370955645294482919642306315951408389939155390641495852682235079948388381817147810199988543202753879634595761513692178855612323826464929567053565655516883088865211017019814938434922056584742975703338666052989323453000054190668073008069358409757711401382448879713824803063830292790871907284615732508878463187540078321144646836641714520837263280926298497175995827146959986580625367150614866594146717614105908677560599298664715089392016783619495691054934073204437823890134211440316961661977129365812730934009878180695353988341524099861100850529263372112005494440901109477171905812258529227323637633070888651063754117762127747538812423705094043768193630399481207316041168207344806208594630537211881115413335113285224633734725269999866521248948235216770556291974523156583071033408384307591427651668177754025424246727136381704023361696393955886321614167616227321765765646890482554798209893671519933100185483167698146646061975813150428625627913004683426389119417464100765417965247075255522252188101059573453030353939631794886820407058177721498614643678758463219398856506200197929995488836037979149750875957205550088916491989692772734422102307762690936220523614080121068179030699537459090415147398802270894221813558133238807437473160137690739859560319624048454845519386476365293136990335117454422791419023565330181431828151870734413285105404921525764882299855357984362391524834349015768804575560961368835419493115509531656725852041771629386346595538752239016488852598228738155981970211789883296133871666620120140851882857096332325130619421054262737816186863658938716553696235385578777759657671097856303109826047646030593555743071151634371263116162163842429774756690129571890249249302694618266745032356856859879258097741197841919555437407743854928359534790669719638999794382112720687011634647044361817576684558724625744225713250341137601306821773485014581447146364342163747989066465762520868021905766505225844729872480243797707355400502595509869443020850165379788743173859145576255477727144173012043383739723542744190771201959350703462306885235518328850278815583719203990521860325564139609728125151807551445503270918528255874403111303698792745962171997087050822360314227188891304020453787801409723278140603832271114233523786546117322725291527658718897541208901735407351872443594948184951168691060870978021172967942306361626571077641327297718119321563981345882136259090137713556729892811590283306476205075479147079271094428064841973711602823705646768958871746411377707470132144695674603139062318630558765273113585596550581780101956885083478653298047293578971034172004858991568415867607860110758034102943901257650359209265993172582604368796832550227991875124190404530653699113234281017599675972717228881762872616434186349441235273719869912359540644153586737163021327006174089564189146448642123329760513470710952045089696777693604518869700296629894354067974095792458927056409146163642160925654650608387234540930183193134586363628266252885168941377664242625103384301342516981220052304340851830918342112001226102103494435426741373561760199946612965455547118392814389204858321021871505919062366967370907845118464121559886753900829580653195913017174949634850101659327920682778835169460415060177607887785092602593896393234825771018460885175530137990762628739986435339792477919143869600819845028005086837073134537699580113198710606881625449213227965777044569159618080059467520715567940849048784878428075784048591505385207632864227646012093136506294441285115051778230787980794100536688217055491722478845399120313290174205565180798564880453263575864305591991982317190768223088819713678569560965777695766765031114759828882044210076232880703287186456087723032648753799500639301083120803887861774378127519055841200300722021908912663658736721808181905976614769167556777158540579802589251818342338664296892261598721223770948525882958989903498643844474443881365494366186879540743752522865890481258185661398661450145400174586954255798594980349336920287623171809337255391051615774034675800312569439495102693161753597894786106093813129941691167614502128824411906036203613374017421281859950157388018923162152170376719761094107244365793793801295386989614878789768675321459623423508501915602525045883285379171046365189543766620390254725283257987760524763324279709362246110807714160684401619696970071324975880463756403103367758616656042889802269384624618776702823507265083567950830141623483756155429929421201110837966736672631316515189583047632951808141375472573438564897736858285096083841743349704224813424575529979035722907751337333843039501444986132294183971798495102322118655423647575774638095594242360591296505782746376955904417512797972253837869914944669033112417910503764885109559325980725764019767086158860069193141356486082481913726565738118888937728005969856159005365510830407857091418962966413725423368585852851555226887522511422397080984203668781525866100305932014546262080118812816720718824780145563272508294470918608085953183530980510731638727137057868321337393052740572472450248506633407330366175138007347879323263799054516416812819059372532301524603584725802735622225698063481166985270568316890882163465835860871623940600102494748996263020577682569269241310711569600642071296841397219163311355761801485869653232991052823372343529891437871696801221125576878093230993279797781403517189023631723195830422007577725139506420863862974621850284828822685869365480256496976333059074849714862234685521871829072182677767188190862348091724309064749272794249063321076671908863590465544851797913038810912654892930058032156032696351232641701257308317843886563328321861571453054990391255663627593467645412053697784792717742627268539680491908356367887628950374547776804069405173086753558728381846453041208618750501774850530747859885695995496231795325167400822547623776548946062132824935065676526699584643380994341310235323423803547168908178861770343063137755745480312781418782959802518533071507405360815531786468005601078564554813901603820054611268663508697528768889628343605688404297049596482791202545704250698543069950757050521641770316863337335336374097309844944123604755575260516996650125261366737501014283681733536922919507996674711342574996766846101827584358457029128707686343622690042918038244648760087851393131630756512803773427475141968392096310643636596252141934565987883169137323589104391449442898909624179787394451054072973031385263786793430936247939167418114755343777822188531343229598604494060773257053675832346507949828487383790335973180102261516252489745244736999415636378666048565524416324310653091992191500157293663971772706090895913460914745069391507821607407119079643228761455973951456502533178244458604653367072208247136844293637699200643287171063323543071264194456731844289514661786350889430308378000623859334853499710695649927546553930859489538568835127452768087260261620951571152218348568929719647604673202322083355880695310174743610457469825948560363963194178330338717661812773680168893080697111977194694723029058532904402104183070246873285332971231965064831098195313946537722964800874303153979101249774266944684978714490326471233669690510878880297645474564156158989457731952855288748034996749984050907787463093200641078724037937331601107193002062607142334582424540462542816352856677028430889581264765717876678209615246507786765087872876579003133134698338624886416752381893452723012001163113113034922197348228234562972085324530558808215284683475788390241823026060297736587629192442326257690596727099898138760798059017319872806116456671050828020313857962939085308641728493147347650389662707609350511398801922499039899386427952050922079528229736915415528950729894659100857580760402504515924176805312456595928815847212576854617355993371686752308486259055225379546441735683459211531704159539586262195682060312819955077548305878239777757471000557642922054213570564468304657936112737638081857238134537386315694972456099757128283052159658267650533880688019165391968118081281418572817220462275354095675911862857058211998333039295198503759091340411472036588937341537552271364297296808196599896469985420092587035276351185574613124473842321798493624035111419325317850897416455727774208238005295335892784239401954079585688942640101642480065408491600871030419967385671210921727088593422109492170881430916530371486986686971893179090200174110704118528398366526522301044888669286343645609490666154720754657171877519877813139000560447086571004937715998070976628393081479513366020160880383038706268705059769497694751767397008507404890547604186839928221021081130399669544722546602362870171695433294206230069208750619380871523396740933288856122974393873962887381758634584423578738264291004803756667693477749360819940001322660377896176798306587817917609943785269138158184041529402848733581418435970591379579640302235388232907281284199927893644729185255896812857249736740795602912638601051604084121854664026333259636443490047737400712524052142271307557177223718644380878139570493348240315980414040990842347102940869097156488101725379568353259267160845887570740559432298975447149848219162771649962305998564786314810119846095164450874514679765632251834857079057499439224964428029230689670767926868233893624811244604947042834617117937781325965227897322350201659300730107372479967565853987915222243858706826074362840581263173370500381210792807269616977634478284528864656653006242682724878778575478820403482309832337875262464806318641026961704528234584790327235788301279412929095117115574048470611073342621092132524224703194743294571228199637561311515852979620659565423507311318322911676832898668803357039688818470609589490061266012753972229635450284942904935805351259449321417370363952663330002226053999399493976847878006553505003002533676884193556909119395229541876962621299266331597772792862940937809403184874617127502263870006274003996395442342544914195287826641488147525494349583796260659420495576612103430544473916322575699055751049631519785776017501968635137055395586847394685476923560018187033465205842282662951905109025241855539482267976015496469063313573187025125372844144112789403485535788540116915885225539663969928808185475616304765301116517349885884405936331731432533799211895827560075034225205924165278014787237312897593027269541326581114529418241899001721402798568503278671018513545279607071002575123250839676257547507012180306883245517988455725639614671335400322017336633978725979742406809739074434849713367788775483348859367482214591151331249276586343256589118221419004652757799426605306095828358930206405554016138060678689066724033378193562867612701651633762322211931899503103752940992724735568995777465669508965004589174674841147523988346199165253245051342943517043177839997415531126829623625481724245532036772982202357745923377157001238230272487833972522323652446141230855886193819231870646619031765335717267735528420507029371753881025064279991852598942752816765278530756485593015469375198540642186735935640796252013159144435726671556867762786118448141819542800058844475657676470805275223210876130937076711621603388815334555907099900749277080522449657647447293299167735864452743062486723899043202975481149688526255530815693291541173946373125044792210818218274971922456732957266689999701700514112728316579750910292054024386449681639908403523846060297088448251094358934090524965062651966798913985381364764384862824498058997947342392021595105265330929741553926731104482099695044837836713826596572513348637631899862407598711389056234111194498836994171142578125e-4952
+9.11299882970618650632101483404854954099762703923390835930245121757092922158349434202390177156456801299311836836800882775491746408155508042493377018897452251370955645294482919642306315951408389939155390641495852682235079948388381817147810199988543202753879634595761513692178855612323826464929567053565655516883088865211017019814938434922056584742975703338666052989323453000054190668073008069358409757711401382448879713824803063830292790871907284615732508878463187540078321144646836641714520837263280926298497175995827146959986580625367150614866594146717614105908677560599298664715089392016783619495691054934073204437823890134211440316961661977129365812730934009878180695353988341524099861100850529263372112005494440901109477171905812258529227323637633070888651063754117762127747538812423705094043768193630399481207316041168207344806208594630537211881115413335113285224633734725269999866521248948235216770556291974523156583071033408384307591427651668177754025424246727136381704023361696393955886321614167616227321765765646890482554798209893671519933100185483167698146646061975813150428625627913004683426389119417464100765417965247075255522252188101059573453030353939631794886820407058177721498614643678758463219398856506200197929995488836037979149750875957205550088916491989692772734422102307762690936220523614080121068179030699537459090415147398802270894221813558133238807437473160137690739859560319624048454845519386476365293136990335117454422791419023565330181431828151870734413285105404921525764882299855357984362391524834349015768804575560961368835419493115509531656725852041771629386346595538752239016488852598228738155981970211789883296133871666620120140851882857096332325130619421054262737816186863658938716553696235385578777759657671097856303109826047646030593555743071151634371263116162163842429774756690129571890249249302694618266745032356856859879258097741197841919555437407743854928359534790669719638999794382112720687011634647044361817576684558724625744225713250341137601306821773485014581447146364342163747989066465762520868021905766505225844729872480243797707355400502595509869443020850165379788743173859145576255477727144173012043383739723542744190771201959350703462306885235518328850278815583719203990521860325564139609728125151807551445503270918528255874403111303698792745962171997087050822360314227188891304020453787801409723278140603832271114233523786546117322725291527658718897541208901735407351872443594948184951168691060870978021172967942306361626571077641327297718119321563981345882136259090137713556729892811590283306476205075479147079271094428064841973711602823705646768958871746411377707470132144695674603139062318630558765273113585596550581780101956885083478653298047293578971034172004858991568415867607860110758034102943901257650359209265993172582604368796832550227991875124190404530653699113234281017599675972717228881762872616434186349441235273719869912359540644153586737163021327006174089564189146448642123329760513470710952045089696777693604518869700296629894354067974095792458927056409146163642160925654650608387234540930183193134586363628266252885168941377664242625103384301342516981220052304340851830918342112001226102103494435426741373561760199946612965455547118392814389204858321021871505919062366967370907845118464121559886753900829580653195913017174949634850101659327920682778835169460415060177607887785092602593896393234825771018460885175530137990762628739986435339792477919143869600819845028005086837073134537699580113198710606881625449213227965777044569159618080059467520715567940849048784878428075784048591505385207632864227646012093136506294441285115051778230787980794100536688217055491722478845399120313290174205565180798564880453263575864305591991982317190768223088819713678569560965777695766765031114759828882044210076232880703287186456087723032648753799500639301083120803887861774378127519055841200300722021908912663658736721808181905976614769167556777158540579802589251818342338664296892261598721223770948525882958989903498643844474443881365494366186879540743752522865890481258185661398661450145400174586954255798594980349336920287623171809337255391051615774034675800312569439495102693161753597894786106093813129941691167614502128824411906036203613374017421281859950157388018923162152170376719761094107244365793793801295386989614878789768675321459623423508501915602525045883285379171046365189543766620390254725283257987760524763324279709362246110807714160684401619696970071324975880463756403103367758616656042889802269384624618776702823507265083567950830141623483756155429929421201110837966736672631316515189583047632951808141375472573438564897736858285096083841743349704224813424575529979035722907751337333843039501444986132294183971798495102322118655423647575774638095594242360591296505782746376955904417512797972253837869914944669033112417910503764885109559325980725764019767086158860069193141356486082481913726565738118888937728005969856159005365510830407857091418962966413725423368585852851555226887522511422397080984203668781525866100305932014546262080118812816720718824780145563272508294470918608085953183530980510731638727137057868321337393052740572472450248506633407330366175138007347879323263799054516416812819059372532301524603584725802735622225698063481166985270568316890882163465835860871623940600102494748996263020577682569269241310711569600642071296841397219163311355761801485869653232991052823372343529891437871696801221125576878093230993279797781403517189023631723195830422007577725139506420863862974621850284828822685869365480256496976333059074849714862234685521871829072182677767188190862348091724309064749272794249063321076671908863590465544851797913038810912654892930058032156032696351232641701257308317843886563328321861571453054990391255663627593467645412053697784792717742627268539680491908356367887628950374547776804069405173086753558728381846453041208618750501774850530747859885695995496231795325167400822547623776548946062132824935065676526699584643380994341310235323423803547168908178861770343063137755745480312781418782959802518533071507405360815531786468005601078564554813901603820054611268663508697528768889628343605688404297049596482791202545704250698543069950757050521641770316863337335336374097309844944123604755575260516996650125261366737501014283681733536922919507996674711342574996766846101827584358457029128707686343622690042918038244648760087851393131630756512803773427475141968392096310643636596252141934565987883169137323589104391449442898909624179787394451054072973031385263786793430936247939167418114755343777822188531343229598604494060773257053675832346507949828487383790335973180102261516252489745244736999415636378666048565524416324310653091992191500157293663971772706090895913460914745069391507821607407119079643228761455973951456502533178244458604653367072208247136844293637699200643287171063323543071264194456731844289514661786350889430308378000623859334853499710695649927546553930859489538568835127452768087260261620951571152218348568929719647604673202322083355880695310174743610457469825948560363963194178330338717661812773680168893080697111977194694723029058532904402104183070246873285332971231965064831098195313946537722964800874303153979101249774266944684978714490326471233669690510878880297645474564156158989457731952855288748034996749984050907787463093200641078724037937331601107193002062607142334582424540462542816352856677028430889581264765717876678209615246507786765087872876579003133134698338624886416752381893452723012001163113113034922197348228234562972085324530558808215284683475788390241823026060297736587629192442326257690596727099898138760798059017319872806116456671050828020313857962939085308641728493147347650389662707609350511398801922499039899386427952050922079528229736915415528950729894659100857580760402504515924176805312456595928815847212576854617355993371686752308486259055225379546441735683459211531704159539586262195682060312819955077548305878239777757471000557642922054213570564468304657936112737638081857238134537386315694972456099757128283052159658267650533880688019165391968118081281418572817220462275354095675911862857058211998333039295198503759091340411472036588937341537552271364297296808196599896469985420092587035276351185574613124473842321798493624035111419325317850897416455727774208238005295335892784239401954079585688942640101642480065408491600871030419967385671210921727088593422109492170881430916530371486986686971893179090200174110704118528398366526522301044888669286343645609490666154720754657171877519877813139000560447086571004937715998070976628393081479513366020160880383038706268705059769497694751767397008507404890547604186839928221021081130399669544722546602362870171695433294206230069208750619380871523396740933288856122974393873962887381758634584423578738264291004803756667693477749360819940001322660377896176798306587817917609943785269138158184041529402848733581418435970591379579640302235388232907281284199927893644729185255896812857249736740795602912638601051604084121854664026333259636443490047737400712524052142271307557177223718644380878139570493348240315980414040990842347102940869097156488101725379568353259267160845887570740559432298975447149848219162771649962305998564786314810119846095164450874514679765632251834857079057499439224964428029230689670767926868233893624811244604947042834617117937781325965227897322350201659300730107372479967565853987915222243858706826074362840581263173370500381210792807269616977634478284528864656653006242682724878778575478820403482309832337875262464806318641026961704528234584790327235788301279412929095117115574048470611073342621092132524224703194743294571228199637561311515852979620659565423507311318322911676832898668803357039688818470609589490061266012753972229635450284942904935805351259449321417370363952663330002226053999399493976847878006553505003002533676884193556909119395229541876962621299266331597772792862940937809403184874617127502263870006274003996395442342544914195287826641488147525494349583796260659420495576612103430544473916322575699055751049631519785776017501968635137055395586847394685476923560018187033465205842282662951905109025241855539482267976015496469063313573187025125372844144112789403485535788540116915885225539663969928808185475616304765301116517349885884405936331731432533799211895827560075034225205924165278014787237312897593027269541326581114529418241899001721402798568503278671018513545279607071002575123250839676257547507012180306883245517988455725639614671335400322017336633978725979742406809739074434849713367788775483348859367482214591151331249276586343256589118221419004652757799426605306095828358930206405554016138060678689066724033378193562867612701651633762322211931899503103752940992724735568995777465669508965004589174674841147523988346199165253245051342943517043177839997415531126829623625481724245532036772982202357745923377157001238230272487833972522323652446141230855886193819231870646619031765335717267735528420507029371753881025064279991852598942752816765278530756485593015469375198540642186735935640796252013159144435726671556867762786118448141819542800058844475657676470805275223210876130937076711621603388815334555907099900749277080522449657647447293299167735864452743062486723899043202975481149688526255530815693291541173946373125044792210818218274971922456732957266689999701700514112728316579750910292054024386449681639908403523846060297088448251094358934090524965062651966798913985381364764384862824498058997947342392021595105265330929741553926731104482099695044837836713826596572513348637631899862407598711389056234111194498836994171142578126e-4952
+-9.11299882970618650632101483404854954099762703923390835930245121757092922158349434202390177156456801299311836836800882775491746408155508042493377018897452251370955645294482919642306315951408389939155390641495852682235079948388381817147810199988543202753879634595761513692178855612323826464929567053565655516883088865211017019814938434922056584742975703338666052989323453000054190668073008069358409757711401382448879713824803063830292790871907284615732508878463187540078321144646836641714520837263280926298497175995827146959986580625367150614866594146717614105908677560599298664715089392016783619495691054934073204437823890134211440316961661977129365812730934009878180695353988341524099861100850529263372112005494440901109477171905812258529227323637633070888651063754117762127747538812423705094043768193630399481207316041168207344806208594630537211881115413335113285224633734725269999866521248948235216770556291974523156583071033408384307591427651668177754025424246727136381704023361696393955886321614167616227321765765646890482554798209893671519933100185483167698146646061975813150428625627913004683426389119417464100765417965247075255522252188101059573453030353939631794886820407058177721498614643678758463219398856506200197929995488836037979149750875957205550088916491989692772734422102307762690936220523614080121068179030699537459090415147398802270894221813558133238807437473160137690739859560319624048454845519386476365293136990335117454422791419023565330181431828151870734413285105404921525764882299855357984362391524834349015768804575560961368835419493115509531656725852041771629386346595538752239016488852598228738155981970211789883296133871666620120140851882857096332325130619421054262737816186863658938716553696235385578777759657671097856303109826047646030593555743071151634371263116162163842429774756690129571890249249302694618266745032356856859879258097741197841919555437407743854928359534790669719638999794382112720687011634647044361817576684558724625744225713250341137601306821773485014581447146364342163747989066465762520868021905766505225844729872480243797707355400502595509869443020850165379788743173859145576255477727144173012043383739723542744190771201959350703462306885235518328850278815583719203990521860325564139609728125151807551445503270918528255874403111303698792745962171997087050822360314227188891304020453787801409723278140603832271114233523786546117322725291527658718897541208901735407351872443594948184951168691060870978021172967942306361626571077641327297718119321563981345882136259090137713556729892811590283306476205075479147079271094428064841973711602823705646768958871746411377707470132144695674603139062318630558765273113585596550581780101956885083478653298047293578971034172004858991568415867607860110758034102943901257650359209265993172582604368796832550227991875124190404530653699113234281017599675972717228881762872616434186349441235273719869912359540644153586737163021327006174089564189146448642123329760513470710952045089696777693604518869700296629894354067974095792458927056409146163642160925654650608387234540930183193134586363628266252885168941377664242625103384301342516981220052304340851830918342112001226102103494435426741373561760199946612965455547118392814389204858321021871505919062366967370907845118464121559886753900829580653195913017174949634850101659327920682778835169460415060177607887785092602593896393234825771018460885175530137990762628739986435339792477919143869600819845028005086837073134537699580113198710606881625449213227965777044569159618080059467520715567940849048784878428075784048591505385207632864227646012093136506294441285115051778230787980794100536688217055491722478845399120313290174205565180798564880453263575864305591991982317190768223088819713678569560965777695766765031114759828882044210076232880703287186456087723032648753799500639301083120803887861774378127519055841200300722021908912663658736721808181905976614769167556777158540579802589251818342338664296892261598721223770948525882958989903498643844474443881365494366186879540743752522865890481258185661398661450145400174586954255798594980349336920287623171809337255391051615774034675800312569439495102693161753597894786106093813129941691167614502128824411906036203613374017421281859950157388018923162152170376719761094107244365793793801295386989614878789768675321459623423508501915602525045883285379171046365189543766620390254725283257987760524763324279709362246110807714160684401619696970071324975880463756403103367758616656042889802269384624618776702823507265083567950830141623483756155429929421201110837966736672631316515189583047632951808141375472573438564897736858285096083841743349704224813424575529979035722907751337333843039501444986132294183971798495102322118655423647575774638095594242360591296505782746376955904417512797972253837869914944669033112417910503764885109559325980725764019767086158860069193141356486082481913726565738118888937728005969856159005365510830407857091418962966413725423368585852851555226887522511422397080984203668781525866100305932014546262080118812816720718824780145563272508294470918608085953183530980510731638727137057868321337393052740572472450248506633407330366175138007347879323263799054516416812819059372532301524603584725802735622225698063481166985270568316890882163465835860871623940600102494748996263020577682569269241310711569600642071296841397219163311355761801485869653232991052823372343529891437871696801221125576878093230993279797781403517189023631723195830422007577725139506420863862974621850284828822685869365480256496976333059074849714862234685521871829072182677767188190862348091724309064749272794249063321076671908863590465544851797913038810912654892930058032156032696351232641701257308317843886563328321861571453054990391255663627593467645412053697784792717742627268539680491908356367887628950374547776804069405173086753558728381846453041208618750501774850530747859885695995496231795325167400822547623776548946062132824935065676526699584643380994341310235323423803547168908178861770343063137755745480312781418782959802518533071507405360815531786468005601078564554813901603820054611268663508697528768889628343605688404297049596482791202545704250698543069950757050521641770316863337335336374097309844944123604755575260516996650125261366737501014283681733536922919507996674711342574996766846101827584358457029128707686343622690042918038244648760087851393131630756512803773427475141968392096310643636596252141934565987883169137323589104391449442898909624179787394451054072973031385263786793430936247939167418114755343777822188531343229598604494060773257053675832346507949828487383790335973180102261516252489745244736999415636378666048565524416324310653091992191500157293663971772706090895913460914745069391507821607407119079643228761455973951456502533178244458604653367072208247136844293637699200643287171063323543071264194456731844289514661786350889430308378000623859334853499710695649927546553930859489538568835127452768087260261620951571152218348568929719647604673202322083355880695310174743610457469825948560363963194178330338717661812773680168893080697111977194694723029058532904402104183070246873285332971231965064831098195313946537722964800874303153979101249774266944684978714490326471233669690510878880297645474564156158989457731952855288748034996749984050907787463093200641078724037937331601107193002062607142334582424540462542816352856677028430889581264765717876678209615246507786765087872876579003133134698338624886416752381893452723012001163113113034922197348228234562972085324530558808215284683475788390241823026060297736587629192442326257690596727099898138760798059017319872806116456671050828020313857962939085308641728493147347650389662707609350511398801922499039899386427952050922079528229736915415528950729894659100857580760402504515924176805312456595928815847212576854617355993371686752308486259055225379546441735683459211531704159539586262195682060312819955077548305878239777757471000557642922054213570564468304657936112737638081857238134537386315694972456099757128283052159658267650533880688019165391968118081281418572817220462275354095675911862857058211998333039295198503759091340411472036588937341537552271364297296808196599896469985420092587035276351185574613124473842321798493624035111419325317850897416455727774208238005295335892784239401954079585688942640101642480065408491600871030419967385671210921727088593422109492170881430916530371486986686971893179090200174110704118528398366526522301044888669286343645609490666154720754657171877519877813139000560447086571004937715998070976628393081479513366020160880383038706268705059769497694751767397008507404890547604186839928221021081130399669544722546602362870171695433294206230069208750619380871523396740933288856122974393873962887381758634584423578738264291004803756667693477749360819940001322660377896176798306587817917609943785269138158184041529402848733581418435970591379579640302235388232907281284199927893644729185255896812857249736740795602912638601051604084121854664026333259636443490047737400712524052142271307557177223718644380878139570493348240315980414040990842347102940869097156488101725379568353259267160845887570740559432298975447149848219162771649962305998564786314810119846095164450874514679765632251834857079057499439224964428029230689670767926868233893624811244604947042834617117937781325965227897322350201659300730107372479967565853987915222243858706826074362840581263173370500381210792807269616977634478284528864656653006242682724878778575478820403482309832337875262464806318641026961704528234584790327235788301279412929095117115574048470611073342621092132524224703194743294571228199637561311515852979620659565423507311318322911676832898668803357039688818470609589490061266012753972229635450284942904935805351259449321417370363952663330002226053999399493976847878006553505003002533676884193556909119395229541876962621299266331597772792862940937809403184874617127502263870006274003996395442342544914195287826641488147525494349583796260659420495576612103430544473916322575699055751049631519785776017501968635137055395586847394685476923560018187033465205842282662951905109025241855539482267976015496469063313573187025125372844144112789403485535788540116915885225539663969928808185475616304765301116517349885884405936331731432533799211895827560075034225205924165278014787237312897593027269541326581114529418241899001721402798568503278671018513545279607071002575123250839676257547507012180306883245517988455725639614671335400322017336633978725979742406809739074434849713367788775483348859367482214591151331249276586343256589118221419004652757799426605306095828358930206405554016138060678689066724033378193562867612701651633762322211931899503103752940992724735568995777465669508965004589174674841147523988346199165253245051342943517043177839997415531126829623625481724245532036772982202357745923377157001238230272487833972522323652446141230855886193819231870646619031765335717267735528420507029371753881025064279991852598942752816765278530756485593015469375198540642186735935640796252013159144435726671556867762786118448141819542800058844475657676470805275223210876130937076711621603388815334555907099900749277080522449657647447293299167735864452743062486723899043202975481149688526255530815693291541173946373125044792210818218274971922456732957266689999701700514112728316579750910292054024386449681639908403523846060297088448251094358934090524965062651966798913985381364764384862824498058997947342392021595105265330929741553926731104482099695044837836713826596572513348637631899862407598711389056234111194498836994171142578124e-4952
+-9.11299882970618650632101483404854954099762703923390835930245121757092922158349434202390177156456801299311836836800882775491746408155508042493377018897452251370955645294482919642306315951408389939155390641495852682235079948388381817147810199988543202753879634595761513692178855612323826464929567053565655516883088865211017019814938434922056584742975703338666052989323453000054190668073008069358409757711401382448879713824803063830292790871907284615732508878463187540078321144646836641714520837263280926298497175995827146959986580625367150614866594146717614105908677560599298664715089392016783619495691054934073204437823890134211440316961661977129365812730934009878180695353988341524099861100850529263372112005494440901109477171905812258529227323637633070888651063754117762127747538812423705094043768193630399481207316041168207344806208594630537211881115413335113285224633734725269999866521248948235216770556291974523156583071033408384307591427651668177754025424246727136381704023361696393955886321614167616227321765765646890482554798209893671519933100185483167698146646061975813150428625627913004683426389119417464100765417965247075255522252188101059573453030353939631794886820407058177721498614643678758463219398856506200197929995488836037979149750875957205550088916491989692772734422102307762690936220523614080121068179030699537459090415147398802270894221813558133238807437473160137690739859560319624048454845519386476365293136990335117454422791419023565330181431828151870734413285105404921525764882299855357984362391524834349015768804575560961368835419493115509531656725852041771629386346595538752239016488852598228738155981970211789883296133871666620120140851882857096332325130619421054262737816186863658938716553696235385578777759657671097856303109826047646030593555743071151634371263116162163842429774756690129571890249249302694618266745032356856859879258097741197841919555437407743854928359534790669719638999794382112720687011634647044361817576684558724625744225713250341137601306821773485014581447146364342163747989066465762520868021905766505225844729872480243797707355400502595509869443020850165379788743173859145576255477727144173012043383739723542744190771201959350703462306885235518328850278815583719203990521860325564139609728125151807551445503270918528255874403111303698792745962171997087050822360314227188891304020453787801409723278140603832271114233523786546117322725291527658718897541208901735407351872443594948184951168691060870978021172967942306361626571077641327297718119321563981345882136259090137713556729892811590283306476205075479147079271094428064841973711602823705646768958871746411377707470132144695674603139062318630558765273113585596550581780101956885083478653298047293578971034172004858991568415867607860110758034102943901257650359209265993172582604368796832550227991875124190404530653699113234281017599675972717228881762872616434186349441235273719869912359540644153586737163021327006174089564189146448642123329760513470710952045089696777693604518869700296629894354067974095792458927056409146163642160925654650608387234540930183193134586363628266252885168941377664242625103384301342516981220052304340851830918342112001226102103494435426741373561760199946612965455547118392814389204858321021871505919062366967370907845118464121559886753900829580653195913017174949634850101659327920682778835169460415060177607887785092602593896393234825771018460885175530137990762628739986435339792477919143869600819845028005086837073134537699580113198710606881625449213227965777044569159618080059467520715567940849048784878428075784048591505385207632864227646012093136506294441285115051778230787980794100536688217055491722478845399120313290174205565180798564880453263575864305591991982317190768223088819713678569560965777695766765031114759828882044210076232880703287186456087723032648753799500639301083120803887861774378127519055841200300722021908912663658736721808181905976614769167556777158540579802589251818342338664296892261598721223770948525882958989903498643844474443881365494366186879540743752522865890481258185661398661450145400174586954255798594980349336920287623171809337255391051615774034675800312569439495102693161753597894786106093813129941691167614502128824411906036203613374017421281859950157388018923162152170376719761094107244365793793801295386989614878789768675321459623423508501915602525045883285379171046365189543766620390254725283257987760524763324279709362246110807714160684401619696970071324975880463756403103367758616656042889802269384624618776702823507265083567950830141623483756155429929421201110837966736672631316515189583047632951808141375472573438564897736858285096083841743349704224813424575529979035722907751337333843039501444986132294183971798495102322118655423647575774638095594242360591296505782746376955904417512797972253837869914944669033112417910503764885109559325980725764019767086158860069193141356486082481913726565738118888937728005969856159005365510830407857091418962966413725423368585852851555226887522511422397080984203668781525866100305932014546262080118812816720718824780145563272508294470918608085953183530980510731638727137057868321337393052740572472450248506633407330366175138007347879323263799054516416812819059372532301524603584725802735622225698063481166985270568316890882163465835860871623940600102494748996263020577682569269241310711569600642071296841397219163311355761801485869653232991052823372343529891437871696801221125576878093230993279797781403517189023631723195830422007577725139506420863862974621850284828822685869365480256496976333059074849714862234685521871829072182677767188190862348091724309064749272794249063321076671908863590465544851797913038810912654892930058032156032696351232641701257308317843886563328321861571453054990391255663627593467645412053697784792717742627268539680491908356367887628950374547776804069405173086753558728381846453041208618750501774850530747859885695995496231795325167400822547623776548946062132824935065676526699584643380994341310235323423803547168908178861770343063137755745480312781418782959802518533071507405360815531786468005601078564554813901603820054611268663508697528768889628343605688404297049596482791202545704250698543069950757050521641770316863337335336374097309844944123604755575260516996650125261366737501014283681733536922919507996674711342574996766846101827584358457029128707686343622690042918038244648760087851393131630756512803773427475141968392096310643636596252141934565987883169137323589104391449442898909624179787394451054072973031385263786793430936247939167418114755343777822188531343229598604494060773257053675832346507949828487383790335973180102261516252489745244736999415636378666048565524416324310653091992191500157293663971772706090895913460914745069391507821607407119079643228761455973951456502533178244458604653367072208247136844293637699200643287171063323543071264194456731844289514661786350889430308378000623859334853499710695649927546553930859489538568835127452768087260261620951571152218348568929719647604673202322083355880695310174743610457469825948560363963194178330338717661812773680168893080697111977194694723029058532904402104183070246873285332971231965064831098195313946537722964800874303153979101249774266944684978714490326471233669690510878880297645474564156158989457731952855288748034996749984050907787463093200641078724037937331601107193002062607142334582424540462542816352856677028430889581264765717876678209615246507786765087872876579003133134698338624886416752381893452723012001163113113034922197348228234562972085324530558808215284683475788390241823026060297736587629192442326257690596727099898138760798059017319872806116456671050828020313857962939085308641728493147347650389662707609350511398801922499039899386427952050922079528229736915415528950729894659100857580760402504515924176805312456595928815847212576854617355993371686752308486259055225379546441735683459211531704159539586262195682060312819955077548305878239777757471000557642922054213570564468304657936112737638081857238134537386315694972456099757128283052159658267650533880688019165391968118081281418572817220462275354095675911862857058211998333039295198503759091340411472036588937341537552271364297296808196599896469985420092587035276351185574613124473842321798493624035111419325317850897416455727774208238005295335892784239401954079585688942640101642480065408491600871030419967385671210921727088593422109492170881430916530371486986686971893179090200174110704118528398366526522301044888669286343645609490666154720754657171877519877813139000560447086571004937715998070976628393081479513366020160880383038706268705059769497694751767397008507404890547604186839928221021081130399669544722546602362870171695433294206230069208750619380871523396740933288856122974393873962887381758634584423578738264291004803756667693477749360819940001322660377896176798306587817917609943785269138158184041529402848733581418435970591379579640302235388232907281284199927893644729185255896812857249736740795602912638601051604084121854664026333259636443490047737400712524052142271307557177223718644380878139570493348240315980414040990842347102940869097156488101725379568353259267160845887570740559432298975447149848219162771649962305998564786314810119846095164450874514679765632251834857079057499439224964428029230689670767926868233893624811244604947042834617117937781325965227897322350201659300730107372479967565853987915222243858706826074362840581263173370500381210792807269616977634478284528864656653006242682724878778575478820403482309832337875262464806318641026961704528234584790327235788301279412929095117115574048470611073342621092132524224703194743294571228199637561311515852979620659565423507311318322911676832898668803357039688818470609589490061266012753972229635450284942904935805351259449321417370363952663330002226053999399493976847878006553505003002533676884193556909119395229541876962621299266331597772792862940937809403184874617127502263870006274003996395442342544914195287826641488147525494349583796260659420495576612103430544473916322575699055751049631519785776017501968635137055395586847394685476923560018187033465205842282662951905109025241855539482267976015496469063313573187025125372844144112789403485535788540116915885225539663969928808185475616304765301116517349885884405936331731432533799211895827560075034225205924165278014787237312897593027269541326581114529418241899001721402798568503278671018513545279607071002575123250839676257547507012180306883245517988455725639614671335400322017336633978725979742406809739074434849713367788775483348859367482214591151331249276586343256589118221419004652757799426605306095828358930206405554016138060678689066724033378193562867612701651633762322211931899503103752940992724735568995777465669508965004589174674841147523988346199165253245051342943517043177839997415531126829623625481724245532036772982202357745923377157001238230272487833972522323652446141230855886193819231870646619031765335717267735528420507029371753881025064279991852598942752816765278530756485593015469375198540642186735935640796252013159144435726671556867762786118448141819542800058844475657676470805275223210876130937076711621603388815334555907099900749277080522449657647447293299167735864452743062486723899043202975481149688526255530815693291541173946373125044792210818218274971922456732957266689999701700514112728316579750910292054024386449681639908403523846060297088448251094358934090524965062651966798913985381364764384862824498058997947342392021595105265330929741553926731104482099695044837836713826596572513348637631899862407598711389056234111194498836994171142578125e-4952
+-9.11299882970618650632101483404854954099762703923390835930245121757092922158349434202390177156456801299311836836800882775491746408155508042493377018897452251370955645294482919642306315951408389939155390641495852682235079948388381817147810199988543202753879634595761513692178855612323826464929567053565655516883088865211017019814938434922056584742975703338666052989323453000054190668073008069358409757711401382448879713824803063830292790871907284615732508878463187540078321144646836641714520837263280926298497175995827146959986580625367150614866594146717614105908677560599298664715089392016783619495691054934073204437823890134211440316961661977129365812730934009878180695353988341524099861100850529263372112005494440901109477171905812258529227323637633070888651063754117762127747538812423705094043768193630399481207316041168207344806208594630537211881115413335113285224633734725269999866521248948235216770556291974523156583071033408384307591427651668177754025424246727136381704023361696393955886321614167616227321765765646890482554798209893671519933100185483167698146646061975813150428625627913004683426389119417464100765417965247075255522252188101059573453030353939631794886820407058177721498614643678758463219398856506200197929995488836037979149750875957205550088916491989692772734422102307762690936220523614080121068179030699537459090415147398802270894221813558133238807437473160137690739859560319624048454845519386476365293136990335117454422791419023565330181431828151870734413285105404921525764882299855357984362391524834349015768804575560961368835419493115509531656725852041771629386346595538752239016488852598228738155981970211789883296133871666620120140851882857096332325130619421054262737816186863658938716553696235385578777759657671097856303109826047646030593555743071151634371263116162163842429774756690129571890249249302694618266745032356856859879258097741197841919555437407743854928359534790669719638999794382112720687011634647044361817576684558724625744225713250341137601306821773485014581447146364342163747989066465762520868021905766505225844729872480243797707355400502595509869443020850165379788743173859145576255477727144173012043383739723542744190771201959350703462306885235518328850278815583719203990521860325564139609728125151807551445503270918528255874403111303698792745962171997087050822360314227188891304020453787801409723278140603832271114233523786546117322725291527658718897541208901735407351872443594948184951168691060870978021172967942306361626571077641327297718119321563981345882136259090137713556729892811590283306476205075479147079271094428064841973711602823705646768958871746411377707470132144695674603139062318630558765273113585596550581780101956885083478653298047293578971034172004858991568415867607860110758034102943901257650359209265993172582604368796832550227991875124190404530653699113234281017599675972717228881762872616434186349441235273719869912359540644153586737163021327006174089564189146448642123329760513470710952045089696777693604518869700296629894354067974095792458927056409146163642160925654650608387234540930183193134586363628266252885168941377664242625103384301342516981220052304340851830918342112001226102103494435426741373561760199946612965455547118392814389204858321021871505919062366967370907845118464121559886753900829580653195913017174949634850101659327920682778835169460415060177607887785092602593896393234825771018460885175530137990762628739986435339792477919143869600819845028005086837073134537699580113198710606881625449213227965777044569159618080059467520715567940849048784878428075784048591505385207632864227646012093136506294441285115051778230787980794100536688217055491722478845399120313290174205565180798564880453263575864305591991982317190768223088819713678569560965777695766765031114759828882044210076232880703287186456087723032648753799500639301083120803887861774378127519055841200300722021908912663658736721808181905976614769167556777158540579802589251818342338664296892261598721223770948525882958989903498643844474443881365494366186879540743752522865890481258185661398661450145400174586954255798594980349336920287623171809337255391051615774034675800312569439495102693161753597894786106093813129941691167614502128824411906036203613374017421281859950157388018923162152170376719761094107244365793793801295386989614878789768675321459623423508501915602525045883285379171046365189543766620390254725283257987760524763324279709362246110807714160684401619696970071324975880463756403103367758616656042889802269384624618776702823507265083567950830141623483756155429929421201110837966736672631316515189583047632951808141375472573438564897736858285096083841743349704224813424575529979035722907751337333843039501444986132294183971798495102322118655423647575774638095594242360591296505782746376955904417512797972253837869914944669033112417910503764885109559325980725764019767086158860069193141356486082481913726565738118888937728005969856159005365510830407857091418962966413725423368585852851555226887522511422397080984203668781525866100305932014546262080118812816720718824780145563272508294470918608085953183530980510731638727137057868321337393052740572472450248506633407330366175138007347879323263799054516416812819059372532301524603584725802735622225698063481166985270568316890882163465835860871623940600102494748996263020577682569269241310711569600642071296841397219163311355761801485869653232991052823372343529891437871696801221125576878093230993279797781403517189023631723195830422007577725139506420863862974621850284828822685869365480256496976333059074849714862234685521871829072182677767188190862348091724309064749272794249063321076671908863590465544851797913038810912654892930058032156032696351232641701257308317843886563328321861571453054990391255663627593467645412053697784792717742627268539680491908356367887628950374547776804069405173086753558728381846453041208618750501774850530747859885695995496231795325167400822547623776548946062132824935065676526699584643380994341310235323423803547168908178861770343063137755745480312781418782959802518533071507405360815531786468005601078564554813901603820054611268663508697528768889628343605688404297049596482791202545704250698543069950757050521641770316863337335336374097309844944123604755575260516996650125261366737501014283681733536922919507996674711342574996766846101827584358457029128707686343622690042918038244648760087851393131630756512803773427475141968392096310643636596252141934565987883169137323589104391449442898909624179787394451054072973031385263786793430936247939167418114755343777822188531343229598604494060773257053675832346507949828487383790335973180102261516252489745244736999415636378666048565524416324310653091992191500157293663971772706090895913460914745069391507821607407119079643228761455973951456502533178244458604653367072208247136844293637699200643287171063323543071264194456731844289514661786350889430308378000623859334853499710695649927546553930859489538568835127452768087260261620951571152218348568929719647604673202322083355880695310174743610457469825948560363963194178330338717661812773680168893080697111977194694723029058532904402104183070246873285332971231965064831098195313946537722964800874303153979101249774266944684978714490326471233669690510878880297645474564156158989457731952855288748034996749984050907787463093200641078724037937331601107193002062607142334582424540462542816352856677028430889581264765717876678209615246507786765087872876579003133134698338624886416752381893452723012001163113113034922197348228234562972085324530558808215284683475788390241823026060297736587629192442326257690596727099898138760798059017319872806116456671050828020313857962939085308641728493147347650389662707609350511398801922499039899386427952050922079528229736915415528950729894659100857580760402504515924176805312456595928815847212576854617355993371686752308486259055225379546441735683459211531704159539586262195682060312819955077548305878239777757471000557642922054213570564468304657936112737638081857238134537386315694972456099757128283052159658267650533880688019165391968118081281418572817220462275354095675911862857058211998333039295198503759091340411472036588937341537552271364297296808196599896469985420092587035276351185574613124473842321798493624035111419325317850897416455727774208238005295335892784239401954079585688942640101642480065408491600871030419967385671210921727088593422109492170881430916530371486986686971893179090200174110704118528398366526522301044888669286343645609490666154720754657171877519877813139000560447086571004937715998070976628393081479513366020160880383038706268705059769497694751767397008507404890547604186839928221021081130399669544722546602362870171695433294206230069208750619380871523396740933288856122974393873962887381758634584423578738264291004803756667693477749360819940001322660377896176798306587817917609943785269138158184041529402848733581418435970591379579640302235388232907281284199927893644729185255896812857249736740795602912638601051604084121854664026333259636443490047737400712524052142271307557177223718644380878139570493348240315980414040990842347102940869097156488101725379568353259267160845887570740559432298975447149848219162771649962305998564786314810119846095164450874514679765632251834857079057499439224964428029230689670767926868233893624811244604947042834617117937781325965227897322350201659300730107372479967565853987915222243858706826074362840581263173370500381210792807269616977634478284528864656653006242682724878778575478820403482309832337875262464806318641026961704528234584790327235788301279412929095117115574048470611073342621092132524224703194743294571228199637561311515852979620659565423507311318322911676832898668803357039688818470609589490061266012753972229635450284942904935805351259449321417370363952663330002226053999399493976847878006553505003002533676884193556909119395229541876962621299266331597772792862940937809403184874617127502263870006274003996395442342544914195287826641488147525494349583796260659420495576612103430544473916322575699055751049631519785776017501968635137055395586847394685476923560018187033465205842282662951905109025241855539482267976015496469063313573187025125372844144112789403485535788540116915885225539663969928808185475616304765301116517349885884405936331731432533799211895827560075034225205924165278014787237312897593027269541326581114529418241899001721402798568503278671018513545279607071002575123250839676257547507012180306883245517988455725639614671335400322017336633978725979742406809739074434849713367788775483348859367482214591151331249276586343256589118221419004652757799426605306095828358930206405554016138060678689066724033378193562867612701651633762322211931899503103752940992724735568995777465669508965004589174674841147523988346199165253245051342943517043177839997415531126829623625481724245532036772982202357745923377157001238230272487833972522323652446141230855886193819231870646619031765335717267735528420507029371753881025064279991852598942752816765278530756485593015469375198540642186735935640796252013159144435726671556867762786118448141819542800058844475657676470805275223210876130937076711621603388815334555907099900749277080522449657647447293299167735864452743062486723899043202975481149688526255530815693291541173946373125044792210818218274971922456732957266689999701700514112728316579750910292054024386449681639908403523846060297088448251094358934090524965062651966798913985381364764384862824498058997947342392021595105265330929741553926731104482099695044837836713826596572513348637631899862407598711389056234111194498836994171142578126e-4952
+3.237587559719012555462219479113823276249784669017340504844942194598519770062059685508835745638324970127939070738424059838293609943191271023342555035986308991521396355375667467208367312819235870119724263252776995195727778126085574034035411017344128491238136414394551514178668780674015531193282296319913113495953953933831631032855605791532328598034154166422617226534880263244723830482289656875701701315902175019974435037627824356684033058939701577883356651733717468531204705842607568803666569711421917525834491783583598401321476176752039857173551930268891446850107760584333855521475305010940756813993214730850216669600967698749412592167692757446422169965426483919224341062751152057061076522973232731542382055087239368522167656194830741819605276971705738272393130698937532095725613383807312946395184980707534803490003540251394324459987958400939111001126190861523615485938285497714410609640798273816511769391568591823198476415765275534341709798367687043373145262933998108452661682659942586304978413812755518166239176614473815940025342279575304159493260770068030636885746695206392378276051948759263882079389379666940357441139816661913198656187703463519723262653223919257185751827493927586153153792077729913353547954808876263400200663495414360816863385220457719546338953323399286762099558324132103460225580066817535680886906060858264089074120360391613368274811868067637495154569071591624185979937989402513750464346904036668477876379544221432800037599944499161940321774835027752710681217554286366043661491013593886229615614494736186475932160549630939390542165126494166960681499481651861215529870984381726203476917507560266886692644952355421814201350137351435237036912624414444992497142303802423605897110605364956579914507108584002230524766331348271456591814078599780820974961968314684496428310691542272663818486132771177670874927831510002443658417608078383611526899905533629456904234997116303929427262032216072887961072267850618234492852606488522739744757845004694461812790342894353802938671928834585447328398711684245164703625580196678024410303542544534512706792134908369873605619756775207191558754413381571756431003248529020572648048946458999967788526617126349345966896362376841092268841417781414969315002419192181972121568811432459128737128140063645558482525300089060238860392371092102688097987915838860882370022268312322882235690785726190915062699382576041643741555139697348927957856990969985342299599797431503615312038393069808777315725367497595040966093808407117316369389112216628231869173217637452855462790553030636920487796465880633399632793882734473382168542596184679158149228725004404714293460752371865436947855237307240001863573081174929166645758276081272685156100195420794154740486637315823136798695124738873328565945598241199335059398955049459449844741098478330319112865980346771381982151154499846478545530650091824164892591396650703633600023191521502618379988693800703884555191647864959327260468892793195316578510173816406054364319294906641284764788384683586662382042642852654156477478700779123584369965723284711409361741235548687181052639639279285373139084165798451899763979500837428077782309910703522399860010310321116623028924118238023770381424894162717815296210097245221769714495449744327945091943394325259297771090128969600269822520904193880119094781214175887316220311309028456568749910010962366586834018403242866721783519806933018588077977626913774236680220258524711348037750591646286531625306510583751929280541119187219596706615736304036444366663256426643903386694536649648686380122198677895751002327229059364018755164517060321515091173358005987498359799467138817648881479418623694683454881683746841149715181334498096967702613110590140231345676956141227850879905018558219984441819798054463206764413100251255775535830770535620946159535406497134759043192647996190512978586496199656070707105117773853504277795024754647024165589129442822627147868917463795166386552921913398878270019905147510849518894114102536073369047160130990411626048426437835295683097278297774735181045158616674564080237813146623269215019613231938626758927531490945029356207933289363847181438902539297057969524961348607844569521442237914899100699610921669921572167164875488132527187949318543809703388178931170799769792886086681284964861608656928109305369539955846964197786677053847603962194721523867993048528558551380823699291873352033111096244814245789620930756114228971363838828108534030152031715929722499546436547773404017947035596936338462103946797525667033935433489292620531649199724400832489751788129365426568881328357966337292439204382537174357675404105580244018783685041224798457022189315692175787257287203633134300759209060570319508886475377719911176071302732819878165468592717406388218727585026352127436844762994722826390779737322113768842482160812973100323673863050234437722898796145596181862320550301285861980052194863780743808106946940079349630782676930197134206259739125377941060751175427888774493677478593805682322173891730311959284895178856039354015035864931073602059531001572891528828982167810245343327388887928886208615327002834690068636094325052251429781641267821367266715283643659749152264457938319185148303604827363623405060374573505789923003843438436174489383805098509083722050766328250349793203837202162624690093533478114438810603140565070517669964629947543608404988178019652088162307525611931821066493746994641048066011859814337589829896549720562117090677291541318153057715167624128318297771376531788973088699647168159229805877415594828532539839967464064556647594705830374653113373530876658380240145380423210673778776803592627231257495817394581607796277282644312510714532297108722017217547317744900647318022108570947064304280100418971450552007356891519523293614416944016354756866350050833501416942505071203810116719053430543531027953437436446745566839242129860410443198862219469972163224971258348314341755015213118628882713134766297624091644805801186976152536913514712919240503721680740586016832099946807466311777189050656676962849581383790904722087478646766320517056183581970236248227413322748304134245717987665377396011236706627320817654565682680006957454759981618023476448544673508068369492066566895437050571584345511070959483898938738225050292533674383091612495407126805381796487365892131916426837522671623266627483065655765705534239355214893395905702329340402794052884259146049064629582075576563307670749189662176976725361937046200576007893814439695301892528761187544161389682003509216791271836545495416676148151145195082668323677621182991451835324281863619641773620601014510950996746726615703771971266687151564427772359427340566909351858654807999781808513034680104078196607462166928018863385629928965649243954503391493597963417955268639606791452833692467872935741940362479842688642227725662504694679557678170929873774151037857807219938356152056997839625453727441947651198316190826615266016347740875615970031428012228328190610356706715662722241878767131224669837573607121539572299329404101274463156060298348931678277361174057097484704587036227686110677413094941011961262438027467952964727129462752693949019764164538344775554466171428121848999818969114034332797672927989107710137279281184295118233855942385256333164153378143279674287318136458207166174996112638689535976047617221520910027427485161965702038805161865494457444594178063766957037428053543239915792369877811053417485684498667123216132006378630814477106813088898563644909178779463295955587688067277368683836470612208483299572260344016516194247232298740800342116589984844356688576984553507410293250093945014209879983314562948451929862241009275783684229669718641013736581856815277185073259140534024850924787544871716174654424640728091372513505922826813145390369149590652886241000625495880523771672395227312971578042522330551788256261683080675549820375567692574152956993944504349004617185470945673049153218968830613586193253490318451871770642617802890083608004460414305421033261048294750210470303202846332054952531617433058538758154347087854561609738141615145103748777579733574989673510104836750248325511777237502526995647687215364262385606217553691332159421351598905950537513518351520709657614578131639854432532002236696200855408766520105076378983345708235918180749273124590433024519869147132931932462703067876214268579940066030521414045386366551780718510535469417760242493782392451178913322503092692423649855756521279456558275339921490892868856862895022564047205838132429286600764536839036698193759634186899291274131934296059833048690594627623595320676097721540716472990950611858372856271872423573251506230042608074167903809812264198034505185435990821356377966484742250577592243727298923187891299404854048446822719928239317254073429532989089675503790372464487057264894107613242300912487070053676379388189496900004239731820229886894053019610823763957809819187948639826973433528683168917360632750040517847686479093538683816924213175672979768822065627696943474914020483056384006872835738311110986586149510661361915342172527409078742250880056867149831149121019729847242037335904440063130981999650700416787683293610119590221942974317455716336227454789239793488032299063316588917505912406020220045264868457718282165158892171630470709599503997282778168097827497383884195820921583645621293941200045604062174334998171535030513366277293714389988219756129580868518167923841173364269774889246694435264051484911461988227011238661037602452710188911900438270362280391121270021679247152879324195035694278071477495720447513017171148877312193736366348711630105507365864598069586257026976295714123943691621672377694552248018987680338612382795605985191106112971398796002636340393693119651973344711646854574482999700397952536878348512983782198330513744803168936076427075943787200489575435147989033386529956551570669047103070223076797892329848058499725632813524581372640746415923016932853954152472487866287318545051065376430120748079948860283261855738836955246188128622509828635867225708782966017423170535046509131388753895013061151387840089512861842615441729962315731301087767989000918136617870582141517330935619268642915983553727587587676791953536960714236687847602589538927962585440961131240218794236944630211930970546118745080346860636620310193382167597465544174488399379683716417891139157575146359165023126594124268610800205258776019000550873739401445303129974560221438061891795442780328126230093178952504570380957199592993338719686487798275474853570100033092481743129836527369756194343789131822069107283156271772679863538216891518713732520976834628418347371261368933454629405371869789752684339805368137450825001203521193642598238954329102258317328098581116978343883611320940814793654745807336162557057195523274610323601685712314930799144191673243832283659669368716126815118360353441303009936083544193524336572930768154506567477565558211143508568396203781879592033787429012753106951129653074630840496376302289668286168325299592504054003803917262600195834001336180158836765599057537979745423711070158871650976475924365707758401328959478791343481250979029363644046972556422294698558561670817595994409985323205913035009923360820734795546082012200697671744573982535291905800552837118327702125018691644774560916230166739307705017656065679867259837178918123254219579594535869171376148397610005870749992910355727569593729567789260479930835305112462727870603529547312621720559953074675620549217314861961905983960910846471569192459257648138212674016814845327496495507412976753381357634960529826817906824433858135485518651632270319927880227571858035210375443324098235463619647723862420557582355632137583370066602155641218235815280874570372436217877316899649287051943247206509113311767578124e-4966
+3.237587559719012555462219479113823276249784669017340504844942194598519770062059685508835745638324970127939070738424059838293609943191271023342555035986308991521396355375667467208367312819235870119724263252776995195727778126085574034035411017344128491238136414394551514178668780674015531193282296319913113495953953933831631032855605791532328598034154166422617226534880263244723830482289656875701701315902175019974435037627824356684033058939701577883356651733717468531204705842607568803666569711421917525834491783583598401321476176752039857173551930268891446850107760584333855521475305010940756813993214730850216669600967698749412592167692757446422169965426483919224341062751152057061076522973232731542382055087239368522167656194830741819605276971705738272393130698937532095725613383807312946395184980707534803490003540251394324459987958400939111001126190861523615485938285497714410609640798273816511769391568591823198476415765275534341709798367687043373145262933998108452661682659942586304978413812755518166239176614473815940025342279575304159493260770068030636885746695206392378276051948759263882079389379666940357441139816661913198656187703463519723262653223919257185751827493927586153153792077729913353547954808876263400200663495414360816863385220457719546338953323399286762099558324132103460225580066817535680886906060858264089074120360391613368274811868067637495154569071591624185979937989402513750464346904036668477876379544221432800037599944499161940321774835027752710681217554286366043661491013593886229615614494736186475932160549630939390542165126494166960681499481651861215529870984381726203476917507560266886692644952355421814201350137351435237036912624414444992497142303802423605897110605364956579914507108584002230524766331348271456591814078599780820974961968314684496428310691542272663818486132771177670874927831510002443658417608078383611526899905533629456904234997116303929427262032216072887961072267850618234492852606488522739744757845004694461812790342894353802938671928834585447328398711684245164703625580196678024410303542544534512706792134908369873605619756775207191558754413381571756431003248529020572648048946458999967788526617126349345966896362376841092268841417781414969315002419192181972121568811432459128737128140063645558482525300089060238860392371092102688097987915838860882370022268312322882235690785726190915062699382576041643741555139697348927957856990969985342299599797431503615312038393069808777315725367497595040966093808407117316369389112216628231869173217637452855462790553030636920487796465880633399632793882734473382168542596184679158149228725004404714293460752371865436947855237307240001863573081174929166645758276081272685156100195420794154740486637315823136798695124738873328565945598241199335059398955049459449844741098478330319112865980346771381982151154499846478545530650091824164892591396650703633600023191521502618379988693800703884555191647864959327260468892793195316578510173816406054364319294906641284764788384683586662382042642852654156477478700779123584369965723284711409361741235548687181052639639279285373139084165798451899763979500837428077782309910703522399860010310321116623028924118238023770381424894162717815296210097245221769714495449744327945091943394325259297771090128969600269822520904193880119094781214175887316220311309028456568749910010962366586834018403242866721783519806933018588077977626913774236680220258524711348037750591646286531625306510583751929280541119187219596706615736304036444366663256426643903386694536649648686380122198677895751002327229059364018755164517060321515091173358005987498359799467138817648881479418623694683454881683746841149715181334498096967702613110590140231345676956141227850879905018558219984441819798054463206764413100251255775535830770535620946159535406497134759043192647996190512978586496199656070707105117773853504277795024754647024165589129442822627147868917463795166386552921913398878270019905147510849518894114102536073369047160130990411626048426437835295683097278297774735181045158616674564080237813146623269215019613231938626758927531490945029356207933289363847181438902539297057969524961348607844569521442237914899100699610921669921572167164875488132527187949318543809703388178931170799769792886086681284964861608656928109305369539955846964197786677053847603962194721523867993048528558551380823699291873352033111096244814245789620930756114228971363838828108534030152031715929722499546436547773404017947035596936338462103946797525667033935433489292620531649199724400832489751788129365426568881328357966337292439204382537174357675404105580244018783685041224798457022189315692175787257287203633134300759209060570319508886475377719911176071302732819878165468592717406388218727585026352127436844762994722826390779737322113768842482160812973100323673863050234437722898796145596181862320550301285861980052194863780743808106946940079349630782676930197134206259739125377941060751175427888774493677478593805682322173891730311959284895178856039354015035864931073602059531001572891528828982167810245343327388887928886208615327002834690068636094325052251429781641267821367266715283643659749152264457938319185148303604827363623405060374573505789923003843438436174489383805098509083722050766328250349793203837202162624690093533478114438810603140565070517669964629947543608404988178019652088162307525611931821066493746994641048066011859814337589829896549720562117090677291541318153057715167624128318297771376531788973088699647168159229805877415594828532539839967464064556647594705830374653113373530876658380240145380423210673778776803592627231257495817394581607796277282644312510714532297108722017217547317744900647318022108570947064304280100418971450552007356891519523293614416944016354756866350050833501416942505071203810116719053430543531027953437436446745566839242129860410443198862219469972163224971258348314341755015213118628882713134766297624091644805801186976152536913514712919240503721680740586016832099946807466311777189050656676962849581383790904722087478646766320517056183581970236248227413322748304134245717987665377396011236706627320817654565682680006957454759981618023476448544673508068369492066566895437050571584345511070959483898938738225050292533674383091612495407126805381796487365892131916426837522671623266627483065655765705534239355214893395905702329340402794052884259146049064629582075576563307670749189662176976725361937046200576007893814439695301892528761187544161389682003509216791271836545495416676148151145195082668323677621182991451835324281863619641773620601014510950996746726615703771971266687151564427772359427340566909351858654807999781808513034680104078196607462166928018863385629928965649243954503391493597963417955268639606791452833692467872935741940362479842688642227725662504694679557678170929873774151037857807219938356152056997839625453727441947651198316190826615266016347740875615970031428012228328190610356706715662722241878767131224669837573607121539572299329404101274463156060298348931678277361174057097484704587036227686110677413094941011961262438027467952964727129462752693949019764164538344775554466171428121848999818969114034332797672927989107710137279281184295118233855942385256333164153378143279674287318136458207166174996112638689535976047617221520910027427485161965702038805161865494457444594178063766957037428053543239915792369877811053417485684498667123216132006378630814477106813088898563644909178779463295955587688067277368683836470612208483299572260344016516194247232298740800342116589984844356688576984553507410293250093945014209879983314562948451929862241009275783684229669718641013736581856815277185073259140534024850924787544871716174654424640728091372513505922826813145390369149590652886241000625495880523771672395227312971578042522330551788256261683080675549820375567692574152956993944504349004617185470945673049153218968830613586193253490318451871770642617802890083608004460414305421033261048294750210470303202846332054952531617433058538758154347087854561609738141615145103748777579733574989673510104836750248325511777237502526995647687215364262385606217553691332159421351598905950537513518351520709657614578131639854432532002236696200855408766520105076378983345708235918180749273124590433024519869147132931932462703067876214268579940066030521414045386366551780718510535469417760242493782392451178913322503092692423649855756521279456558275339921490892868856862895022564047205838132429286600764536839036698193759634186899291274131934296059833048690594627623595320676097721540716472990950611858372856271872423573251506230042608074167903809812264198034505185435990821356377966484742250577592243727298923187891299404854048446822719928239317254073429532989089675503790372464487057264894107613242300912487070053676379388189496900004239731820229886894053019610823763957809819187948639826973433528683168917360632750040517847686479093538683816924213175672979768822065627696943474914020483056384006872835738311110986586149510661361915342172527409078742250880056867149831149121019729847242037335904440063130981999650700416787683293610119590221942974317455716336227454789239793488032299063316588917505912406020220045264868457718282165158892171630470709599503997282778168097827497383884195820921583645621293941200045604062174334998171535030513366277293714389988219756129580868518167923841173364269774889246694435264051484911461988227011238661037602452710188911900438270362280391121270021679247152879324195035694278071477495720447513017171148877312193736366348711630105507365864598069586257026976295714123943691621672377694552248018987680338612382795605985191106112971398796002636340393693119651973344711646854574482999700397952536878348512983782198330513744803168936076427075943787200489575435147989033386529956551570669047103070223076797892329848058499725632813524581372640746415923016932853954152472487866287318545051065376430120748079948860283261855738836955246188128622509828635867225708782966017423170535046509131388753895013061151387840089512861842615441729962315731301087767989000918136617870582141517330935619268642915983553727587587676791953536960714236687847602589538927962585440961131240218794236944630211930970546118745080346860636620310193382167597465544174488399379683716417891139157575146359165023126594124268610800205258776019000550873739401445303129974560221438061891795442780328126230093178952504570380957199592993338719686487798275474853570100033092481743129836527369756194343789131822069107283156271772679863538216891518713732520976834628418347371261368933454629405371869789752684339805368137450825001203521193642598238954329102258317328098581116978343883611320940814793654745807336162557057195523274610323601685712314930799144191673243832283659669368716126815118360353441303009936083544193524336572930768154506567477565558211143508568396203781879592033787429012753106951129653074630840496376302289668286168325299592504054003803917262600195834001336180158836765599057537979745423711070158871650976475924365707758401328959478791343481250979029363644046972556422294698558561670817595994409985323205913035009923360820734795546082012200697671744573982535291905800552837118327702125018691644774560916230166739307705017656065679867259837178918123254219579594535869171376148397610005870749992910355727569593729567789260479930835305112462727870603529547312621720559953074675620549217314861961905983960910846471569192459257648138212674016814845327496495507412976753381357634960529826817906824433858135485518651632270319927880227571858035210375443324098235463619647723862420557582355632137583370066602155641218235815280874570372436217877316899649287051943247206509113311767578125e-4966
+3.237587559719012555462219479113823276249784669017340504844942194598519770062059685508835745638324970127939070738424059838293609943191271023342555035986308991521396355375667467208367312819235870119724263252776995195727778126085574034035411017344128491238136414394551514178668780674015531193282296319913113495953953933831631032855605791532328598034154166422617226534880263244723830482289656875701701315902175019974435037627824356684033058939701577883356651733717468531204705842607568803666569711421917525834491783583598401321476176752039857173551930268891446850107760584333855521475305010940756813993214730850216669600967698749412592167692757446422169965426483919224341062751152057061076522973232731542382055087239368522167656194830741819605276971705738272393130698937532095725613383807312946395184980707534803490003540251394324459987958400939111001126190861523615485938285497714410609640798273816511769391568591823198476415765275534341709798367687043373145262933998108452661682659942586304978413812755518166239176614473815940025342279575304159493260770068030636885746695206392378276051948759263882079389379666940357441139816661913198656187703463519723262653223919257185751827493927586153153792077729913353547954808876263400200663495414360816863385220457719546338953323399286762099558324132103460225580066817535680886906060858264089074120360391613368274811868067637495154569071591624185979937989402513750464346904036668477876379544221432800037599944499161940321774835027752710681217554286366043661491013593886229615614494736186475932160549630939390542165126494166960681499481651861215529870984381726203476917507560266886692644952355421814201350137351435237036912624414444992497142303802423605897110605364956579914507108584002230524766331348271456591814078599780820974961968314684496428310691542272663818486132771177670874927831510002443658417608078383611526899905533629456904234997116303929427262032216072887961072267850618234492852606488522739744757845004694461812790342894353802938671928834585447328398711684245164703625580196678024410303542544534512706792134908369873605619756775207191558754413381571756431003248529020572648048946458999967788526617126349345966896362376841092268841417781414969315002419192181972121568811432459128737128140063645558482525300089060238860392371092102688097987915838860882370022268312322882235690785726190915062699382576041643741555139697348927957856990969985342299599797431503615312038393069808777315725367497595040966093808407117316369389112216628231869173217637452855462790553030636920487796465880633399632793882734473382168542596184679158149228725004404714293460752371865436947855237307240001863573081174929166645758276081272685156100195420794154740486637315823136798695124738873328565945598241199335059398955049459449844741098478330319112865980346771381982151154499846478545530650091824164892591396650703633600023191521502618379988693800703884555191647864959327260468892793195316578510173816406054364319294906641284764788384683586662382042642852654156477478700779123584369965723284711409361741235548687181052639639279285373139084165798451899763979500837428077782309910703522399860010310321116623028924118238023770381424894162717815296210097245221769714495449744327945091943394325259297771090128969600269822520904193880119094781214175887316220311309028456568749910010962366586834018403242866721783519806933018588077977626913774236680220258524711348037750591646286531625306510583751929280541119187219596706615736304036444366663256426643903386694536649648686380122198677895751002327229059364018755164517060321515091173358005987498359799467138817648881479418623694683454881683746841149715181334498096967702613110590140231345676956141227850879905018558219984441819798054463206764413100251255775535830770535620946159535406497134759043192647996190512978586496199656070707105117773853504277795024754647024165589129442822627147868917463795166386552921913398878270019905147510849518894114102536073369047160130990411626048426437835295683097278297774735181045158616674564080237813146623269215019613231938626758927531490945029356207933289363847181438902539297057969524961348607844569521442237914899100699610921669921572167164875488132527187949318543809703388178931170799769792886086681284964861608656928109305369539955846964197786677053847603962194721523867993048528558551380823699291873352033111096244814245789620930756114228971363838828108534030152031715929722499546436547773404017947035596936338462103946797525667033935433489292620531649199724400832489751788129365426568881328357966337292439204382537174357675404105580244018783685041224798457022189315692175787257287203633134300759209060570319508886475377719911176071302732819878165468592717406388218727585026352127436844762994722826390779737322113768842482160812973100323673863050234437722898796145596181862320550301285861980052194863780743808106946940079349630782676930197134206259739125377941060751175427888774493677478593805682322173891730311959284895178856039354015035864931073602059531001572891528828982167810245343327388887928886208615327002834690068636094325052251429781641267821367266715283643659749152264457938319185148303604827363623405060374573505789923003843438436174489383805098509083722050766328250349793203837202162624690093533478114438810603140565070517669964629947543608404988178019652088162307525611931821066493746994641048066011859814337589829896549720562117090677291541318153057715167624128318297771376531788973088699647168159229805877415594828532539839967464064556647594705830374653113373530876658380240145380423210673778776803592627231257495817394581607796277282644312510714532297108722017217547317744900647318022108570947064304280100418971450552007356891519523293614416944016354756866350050833501416942505071203810116719053430543531027953437436446745566839242129860410443198862219469972163224971258348314341755015213118628882713134766297624091644805801186976152536913514712919240503721680740586016832099946807466311777189050656676962849581383790904722087478646766320517056183581970236248227413322748304134245717987665377396011236706627320817654565682680006957454759981618023476448544673508068369492066566895437050571584345511070959483898938738225050292533674383091612495407126805381796487365892131916426837522671623266627483065655765705534239355214893395905702329340402794052884259146049064629582075576563307670749189662176976725361937046200576007893814439695301892528761187544161389682003509216791271836545495416676148151145195082668323677621182991451835324281863619641773620601014510950996746726615703771971266687151564427772359427340566909351858654807999781808513034680104078196607462166928018863385629928965649243954503391493597963417955268639606791452833692467872935741940362479842688642227725662504694679557678170929873774151037857807219938356152056997839625453727441947651198316190826615266016347740875615970031428012228328190610356706715662722241878767131224669837573607121539572299329404101274463156060298348931678277361174057097484704587036227686110677413094941011961262438027467952964727129462752693949019764164538344775554466171428121848999818969114034332797672927989107710137279281184295118233855942385256333164153378143279674287318136458207166174996112638689535976047617221520910027427485161965702038805161865494457444594178063766957037428053543239915792369877811053417485684498667123216132006378630814477106813088898563644909178779463295955587688067277368683836470612208483299572260344016516194247232298740800342116589984844356688576984553507410293250093945014209879983314562948451929862241009275783684229669718641013736581856815277185073259140534024850924787544871716174654424640728091372513505922826813145390369149590652886241000625495880523771672395227312971578042522330551788256261683080675549820375567692574152956993944504349004617185470945673049153218968830613586193253490318451871770642617802890083608004460414305421033261048294750210470303202846332054952531617433058538758154347087854561609738141615145103748777579733574989673510104836750248325511777237502526995647687215364262385606217553691332159421351598905950537513518351520709657614578131639854432532002236696200855408766520105076378983345708235918180749273124590433024519869147132931932462703067876214268579940066030521414045386366551780718510535469417760242493782392451178913322503092692423649855756521279456558275339921490892868856862895022564047205838132429286600764536839036698193759634186899291274131934296059833048690594627623595320676097721540716472990950611858372856271872423573251506230042608074167903809812264198034505185435990821356377966484742250577592243727298923187891299404854048446822719928239317254073429532989089675503790372464487057264894107613242300912487070053676379388189496900004239731820229886894053019610823763957809819187948639826973433528683168917360632750040517847686479093538683816924213175672979768822065627696943474914020483056384006872835738311110986586149510661361915342172527409078742250880056867149831149121019729847242037335904440063130981999650700416787683293610119590221942974317455716336227454789239793488032299063316588917505912406020220045264868457718282165158892171630470709599503997282778168097827497383884195820921583645621293941200045604062174334998171535030513366277293714389988219756129580868518167923841173364269774889246694435264051484911461988227011238661037602452710188911900438270362280391121270021679247152879324195035694278071477495720447513017171148877312193736366348711630105507365864598069586257026976295714123943691621672377694552248018987680338612382795605985191106112971398796002636340393693119651973344711646854574482999700397952536878348512983782198330513744803168936076427075943787200489575435147989033386529956551570669047103070223076797892329848058499725632813524581372640746415923016932853954152472487866287318545051065376430120748079948860283261855738836955246188128622509828635867225708782966017423170535046509131388753895013061151387840089512861842615441729962315731301087767989000918136617870582141517330935619268642915983553727587587676791953536960714236687847602589538927962585440961131240218794236944630211930970546118745080346860636620310193382167597465544174488399379683716417891139157575146359165023126594124268610800205258776019000550873739401445303129974560221438061891795442780328126230093178952504570380957199592993338719686487798275474853570100033092481743129836527369756194343789131822069107283156271772679863538216891518713732520976834628418347371261368933454629405371869789752684339805368137450825001203521193642598238954329102258317328098581116978343883611320940814793654745807336162557057195523274610323601685712314930799144191673243832283659669368716126815118360353441303009936083544193524336572930768154506567477565558211143508568396203781879592033787429012753106951129653074630840496376302289668286168325299592504054003803917262600195834001336180158836765599057537979745423711070158871650976475924365707758401328959478791343481250979029363644046972556422294698558561670817595994409985323205913035009923360820734795546082012200697671744573982535291905800552837118327702125018691644774560916230166739307705017656065679867259837178918123254219579594535869171376148397610005870749992910355727569593729567789260479930835305112462727870603529547312621720559953074675620549217314861961905983960910846471569192459257648138212674016814845327496495507412976753381357634960529826817906824433858135485518651632270319927880227571858035210375443324098235463619647723862420557582355632137583370066602155641218235815280874570372436217877316899649287051943247206509113311767578126e-4966
+-3.237587559719012555462219479113823276249784669017340504844942194598519770062059685508835745638324970127939070738424059838293609943191271023342555035986308991521396355375667467208367312819235870119724263252776995195727778126085574034035411017344128491238136414394551514178668780674015531193282296319913113495953953933831631032855605791532328598034154166422617226534880263244723830482289656875701701315902175019974435037627824356684033058939701577883356651733717468531204705842607568803666569711421917525834491783583598401321476176752039857173551930268891446850107760584333855521475305010940756813993214730850216669600967698749412592167692757446422169965426483919224341062751152057061076522973232731542382055087239368522167656194830741819605276971705738272393130698937532095725613383807312946395184980707534803490003540251394324459987958400939111001126190861523615485938285497714410609640798273816511769391568591823198476415765275534341709798367687043373145262933998108452661682659942586304978413812755518166239176614473815940025342279575304159493260770068030636885746695206392378276051948759263882079389379666940357441139816661913198656187703463519723262653223919257185751827493927586153153792077729913353547954808876263400200663495414360816863385220457719546338953323399286762099558324132103460225580066817535680886906060858264089074120360391613368274811868067637495154569071591624185979937989402513750464346904036668477876379544221432800037599944499161940321774835027752710681217554286366043661491013593886229615614494736186475932160549630939390542165126494166960681499481651861215529870984381726203476917507560266886692644952355421814201350137351435237036912624414444992497142303802423605897110605364956579914507108584002230524766331348271456591814078599780820974961968314684496428310691542272663818486132771177670874927831510002443658417608078383611526899905533629456904234997116303929427262032216072887961072267850618234492852606488522739744757845004694461812790342894353802938671928834585447328398711684245164703625580196678024410303542544534512706792134908369873605619756775207191558754413381571756431003248529020572648048946458999967788526617126349345966896362376841092268841417781414969315002419192181972121568811432459128737128140063645558482525300089060238860392371092102688097987915838860882370022268312322882235690785726190915062699382576041643741555139697348927957856990969985342299599797431503615312038393069808777315725367497595040966093808407117316369389112216628231869173217637452855462790553030636920487796465880633399632793882734473382168542596184679158149228725004404714293460752371865436947855237307240001863573081174929166645758276081272685156100195420794154740486637315823136798695124738873328565945598241199335059398955049459449844741098478330319112865980346771381982151154499846478545530650091824164892591396650703633600023191521502618379988693800703884555191647864959327260468892793195316578510173816406054364319294906641284764788384683586662382042642852654156477478700779123584369965723284711409361741235548687181052639639279285373139084165798451899763979500837428077782309910703522399860010310321116623028924118238023770381424894162717815296210097245221769714495449744327945091943394325259297771090128969600269822520904193880119094781214175887316220311309028456568749910010962366586834018403242866721783519806933018588077977626913774236680220258524711348037750591646286531625306510583751929280541119187219596706615736304036444366663256426643903386694536649648686380122198677895751002327229059364018755164517060321515091173358005987498359799467138817648881479418623694683454881683746841149715181334498096967702613110590140231345676956141227850879905018558219984441819798054463206764413100251255775535830770535620946159535406497134759043192647996190512978586496199656070707105117773853504277795024754647024165589129442822627147868917463795166386552921913398878270019905147510849518894114102536073369047160130990411626048426437835295683097278297774735181045158616674564080237813146623269215019613231938626758927531490945029356207933289363847181438902539297057969524961348607844569521442237914899100699610921669921572167164875488132527187949318543809703388178931170799769792886086681284964861608656928109305369539955846964197786677053847603962194721523867993048528558551380823699291873352033111096244814245789620930756114228971363838828108534030152031715929722499546436547773404017947035596936338462103946797525667033935433489292620531649199724400832489751788129365426568881328357966337292439204382537174357675404105580244018783685041224798457022189315692175787257287203633134300759209060570319508886475377719911176071302732819878165468592717406388218727585026352127436844762994722826390779737322113768842482160812973100323673863050234437722898796145596181862320550301285861980052194863780743808106946940079349630782676930197134206259739125377941060751175427888774493677478593805682322173891730311959284895178856039354015035864931073602059531001572891528828982167810245343327388887928886208615327002834690068636094325052251429781641267821367266715283643659749152264457938319185148303604827363623405060374573505789923003843438436174489383805098509083722050766328250349793203837202162624690093533478114438810603140565070517669964629947543608404988178019652088162307525611931821066493746994641048066011859814337589829896549720562117090677291541318153057715167624128318297771376531788973088699647168159229805877415594828532539839967464064556647594705830374653113373530876658380240145380423210673778776803592627231257495817394581607796277282644312510714532297108722017217547317744900647318022108570947064304280100418971450552007356891519523293614416944016354756866350050833501416942505071203810116719053430543531027953437436446745566839242129860410443198862219469972163224971258348314341755015213118628882713134766297624091644805801186976152536913514712919240503721680740586016832099946807466311777189050656676962849581383790904722087478646766320517056183581970236248227413322748304134245717987665377396011236706627320817654565682680006957454759981618023476448544673508068369492066566895437050571584345511070959483898938738225050292533674383091612495407126805381796487365892131916426837522671623266627483065655765705534239355214893395905702329340402794052884259146049064629582075576563307670749189662176976725361937046200576007893814439695301892528761187544161389682003509216791271836545495416676148151145195082668323677621182991451835324281863619641773620601014510950996746726615703771971266687151564427772359427340566909351858654807999781808513034680104078196607462166928018863385629928965649243954503391493597963417955268639606791452833692467872935741940362479842688642227725662504694679557678170929873774151037857807219938356152056997839625453727441947651198316190826615266016347740875615970031428012228328190610356706715662722241878767131224669837573607121539572299329404101274463156060298348931678277361174057097484704587036227686110677413094941011961262438027467952964727129462752693949019764164538344775554466171428121848999818969114034332797672927989107710137279281184295118233855942385256333164153378143279674287318136458207166174996112638689535976047617221520910027427485161965702038805161865494457444594178063766957037428053543239915792369877811053417485684498667123216132006378630814477106813088898563644909178779463295955587688067277368683836470612208483299572260344016516194247232298740800342116589984844356688576984553507410293250093945014209879983314562948451929862241009275783684229669718641013736581856815277185073259140534024850924787544871716174654424640728091372513505922826813145390369149590652886241000625495880523771672395227312971578042522330551788256261683080675549820375567692574152956993944504349004617185470945673049153218968830613586193253490318451871770642617802890083608004460414305421033261048294750210470303202846332054952531617433058538758154347087854561609738141615145103748777579733574989673510104836750248325511777237502526995647687215364262385606217553691332159421351598905950537513518351520709657614578131639854432532002236696200855408766520105076378983345708235918180749273124590433024519869147132931932462703067876214268579940066030521414045386366551780718510535469417760242493782392451178913322503092692423649855756521279456558275339921490892868856862895022564047205838132429286600764536839036698193759634186899291274131934296059833048690594627623595320676097721540716472990950611858372856271872423573251506230042608074167903809812264198034505185435990821356377966484742250577592243727298923187891299404854048446822719928239317254073429532989089675503790372464487057264894107613242300912487070053676379388189496900004239731820229886894053019610823763957809819187948639826973433528683168917360632750040517847686479093538683816924213175672979768822065627696943474914020483056384006872835738311110986586149510661361915342172527409078742250880056867149831149121019729847242037335904440063130981999650700416787683293610119590221942974317455716336227454789239793488032299063316588917505912406020220045264868457718282165158892171630470709599503997282778168097827497383884195820921583645621293941200045604062174334998171535030513366277293714389988219756129580868518167923841173364269774889246694435264051484911461988227011238661037602452710188911900438270362280391121270021679247152879324195035694278071477495720447513017171148877312193736366348711630105507365864598069586257026976295714123943691621672377694552248018987680338612382795605985191106112971398796002636340393693119651973344711646854574482999700397952536878348512983782198330513744803168936076427075943787200489575435147989033386529956551570669047103070223076797892329848058499725632813524581372640746415923016932853954152472487866287318545051065376430120748079948860283261855738836955246188128622509828635867225708782966017423170535046509131388753895013061151387840089512861842615441729962315731301087767989000918136617870582141517330935619268642915983553727587587676791953536960714236687847602589538927962585440961131240218794236944630211930970546118745080346860636620310193382167597465544174488399379683716417891139157575146359165023126594124268610800205258776019000550873739401445303129974560221438061891795442780328126230093178952504570380957199592993338719686487798275474853570100033092481743129836527369756194343789131822069107283156271772679863538216891518713732520976834628418347371261368933454629405371869789752684339805368137450825001203521193642598238954329102258317328098581116978343883611320940814793654745807336162557057195523274610323601685712314930799144191673243832283659669368716126815118360353441303009936083544193524336572930768154506567477565558211143508568396203781879592033787429012753106951129653074630840496376302289668286168325299592504054003803917262600195834001336180158836765599057537979745423711070158871650976475924365707758401328959478791343481250979029363644046972556422294698558561670817595994409985323205913035009923360820734795546082012200697671744573982535291905800552837118327702125018691644774560916230166739307705017656065679867259837178918123254219579594535869171376148397610005870749992910355727569593729567789260479930835305112462727870603529547312621720559953074675620549217314861961905983960910846471569192459257648138212674016814845327496495507412976753381357634960529826817906824433858135485518651632270319927880227571858035210375443324098235463619647723862420557582355632137583370066602155641218235815280874570372436217877316899649287051943247206509113311767578124e-4966
+-3.237587559719012555462219479113823276249784669017340504844942194598519770062059685508835745638324970127939070738424059838293609943191271023342555035986308991521396355375667467208367312819235870119724263252776995195727778126085574034035411017344128491238136414394551514178668780674015531193282296319913113495953953933831631032855605791532328598034154166422617226534880263244723830482289656875701701315902175019974435037627824356684033058939701577883356651733717468531204705842607568803666569711421917525834491783583598401321476176752039857173551930268891446850107760584333855521475305010940756813993214730850216669600967698749412592167692757446422169965426483919224341062751152057061076522973232731542382055087239368522167656194830741819605276971705738272393130698937532095725613383807312946395184980707534803490003540251394324459987958400939111001126190861523615485938285497714410609640798273816511769391568591823198476415765275534341709798367687043373145262933998108452661682659942586304978413812755518166239176614473815940025342279575304159493260770068030636885746695206392378276051948759263882079389379666940357441139816661913198656187703463519723262653223919257185751827493927586153153792077729913353547954808876263400200663495414360816863385220457719546338953323399286762099558324132103460225580066817535680886906060858264089074120360391613368274811868067637495154569071591624185979937989402513750464346904036668477876379544221432800037599944499161940321774835027752710681217554286366043661491013593886229615614494736186475932160549630939390542165126494166960681499481651861215529870984381726203476917507560266886692644952355421814201350137351435237036912624414444992497142303802423605897110605364956579914507108584002230524766331348271456591814078599780820974961968314684496428310691542272663818486132771177670874927831510002443658417608078383611526899905533629456904234997116303929427262032216072887961072267850618234492852606488522739744757845004694461812790342894353802938671928834585447328398711684245164703625580196678024410303542544534512706792134908369873605619756775207191558754413381571756431003248529020572648048946458999967788526617126349345966896362376841092268841417781414969315002419192181972121568811432459128737128140063645558482525300089060238860392371092102688097987915838860882370022268312322882235690785726190915062699382576041643741555139697348927957856990969985342299599797431503615312038393069808777315725367497595040966093808407117316369389112216628231869173217637452855462790553030636920487796465880633399632793882734473382168542596184679158149228725004404714293460752371865436947855237307240001863573081174929166645758276081272685156100195420794154740486637315823136798695124738873328565945598241199335059398955049459449844741098478330319112865980346771381982151154499846478545530650091824164892591396650703633600023191521502618379988693800703884555191647864959327260468892793195316578510173816406054364319294906641284764788384683586662382042642852654156477478700779123584369965723284711409361741235548687181052639639279285373139084165798451899763979500837428077782309910703522399860010310321116623028924118238023770381424894162717815296210097245221769714495449744327945091943394325259297771090128969600269822520904193880119094781214175887316220311309028456568749910010962366586834018403242866721783519806933018588077977626913774236680220258524711348037750591646286531625306510583751929280541119187219596706615736304036444366663256426643903386694536649648686380122198677895751002327229059364018755164517060321515091173358005987498359799467138817648881479418623694683454881683746841149715181334498096967702613110590140231345676956141227850879905018558219984441819798054463206764413100251255775535830770535620946159535406497134759043192647996190512978586496199656070707105117773853504277795024754647024165589129442822627147868917463795166386552921913398878270019905147510849518894114102536073369047160130990411626048426437835295683097278297774735181045158616674564080237813146623269215019613231938626758927531490945029356207933289363847181438902539297057969524961348607844569521442237914899100699610921669921572167164875488132527187949318543809703388178931170799769792886086681284964861608656928109305369539955846964197786677053847603962194721523867993048528558551380823699291873352033111096244814245789620930756114228971363838828108534030152031715929722499546436547773404017947035596936338462103946797525667033935433489292620531649199724400832489751788129365426568881328357966337292439204382537174357675404105580244018783685041224798457022189315692175787257287203633134300759209060570319508886475377719911176071302732819878165468592717406388218727585026352127436844762994722826390779737322113768842482160812973100323673863050234437722898796145596181862320550301285861980052194863780743808106946940079349630782676930197134206259739125377941060751175427888774493677478593805682322173891730311959284895178856039354015035864931073602059531001572891528828982167810245343327388887928886208615327002834690068636094325052251429781641267821367266715283643659749152264457938319185148303604827363623405060374573505789923003843438436174489383805098509083722050766328250349793203837202162624690093533478114438810603140565070517669964629947543608404988178019652088162307525611931821066493746994641048066011859814337589829896549720562117090677291541318153057715167624128318297771376531788973088699647168159229805877415594828532539839967464064556647594705830374653113373530876658380240145380423210673778776803592627231257495817394581607796277282644312510714532297108722017217547317744900647318022108570947064304280100418971450552007356891519523293614416944016354756866350050833501416942505071203810116719053430543531027953437436446745566839242129860410443198862219469972163224971258348314341755015213118628882713134766297624091644805801186976152536913514712919240503721680740586016832099946807466311777189050656676962849581383790904722087478646766320517056183581970236248227413322748304134245717987665377396011236706627320817654565682680006957454759981618023476448544673508068369492066566895437050571584345511070959483898938738225050292533674383091612495407126805381796487365892131916426837522671623266627483065655765705534239355214893395905702329340402794052884259146049064629582075576563307670749189662176976725361937046200576007893814439695301892528761187544161389682003509216791271836545495416676148151145195082668323677621182991451835324281863619641773620601014510950996746726615703771971266687151564427772359427340566909351858654807999781808513034680104078196607462166928018863385629928965649243954503391493597963417955268639606791452833692467872935741940362479842688642227725662504694679557678170929873774151037857807219938356152056997839625453727441947651198316190826615266016347740875615970031428012228328190610356706715662722241878767131224669837573607121539572299329404101274463156060298348931678277361174057097484704587036227686110677413094941011961262438027467952964727129462752693949019764164538344775554466171428121848999818969114034332797672927989107710137279281184295118233855942385256333164153378143279674287318136458207166174996112638689535976047617221520910027427485161965702038805161865494457444594178063766957037428053543239915792369877811053417485684498667123216132006378630814477106813088898563644909178779463295955587688067277368683836470612208483299572260344016516194247232298740800342116589984844356688576984553507410293250093945014209879983314562948451929862241009275783684229669718641013736581856815277185073259140534024850924787544871716174654424640728091372513505922826813145390369149590652886241000625495880523771672395227312971578042522330551788256261683080675549820375567692574152956993944504349004617185470945673049153218968830613586193253490318451871770642617802890083608004460414305421033261048294750210470303202846332054952531617433058538758154347087854561609738141615145103748777579733574989673510104836750248325511777237502526995647687215364262385606217553691332159421351598905950537513518351520709657614578131639854432532002236696200855408766520105076378983345708235918180749273124590433024519869147132931932462703067876214268579940066030521414045386366551780718510535469417760242493782392451178913322503092692423649855756521279456558275339921490892868856862895022564047205838132429286600764536839036698193759634186899291274131934296059833048690594627623595320676097721540716472990950611858372856271872423573251506230042608074167903809812264198034505185435990821356377966484742250577592243727298923187891299404854048446822719928239317254073429532989089675503790372464487057264894107613242300912487070053676379388189496900004239731820229886894053019610823763957809819187948639826973433528683168917360632750040517847686479093538683816924213175672979768822065627696943474914020483056384006872835738311110986586149510661361915342172527409078742250880056867149831149121019729847242037335904440063130981999650700416787683293610119590221942974317455716336227454789239793488032299063316588917505912406020220045264868457718282165158892171630470709599503997282778168097827497383884195820921583645621293941200045604062174334998171535030513366277293714389988219756129580868518167923841173364269774889246694435264051484911461988227011238661037602452710188911900438270362280391121270021679247152879324195035694278071477495720447513017171148877312193736366348711630105507365864598069586257026976295714123943691621672377694552248018987680338612382795605985191106112971398796002636340393693119651973344711646854574482999700397952536878348512983782198330513744803168936076427075943787200489575435147989033386529956551570669047103070223076797892329848058499725632813524581372640746415923016932853954152472487866287318545051065376430120748079948860283261855738836955246188128622509828635867225708782966017423170535046509131388753895013061151387840089512861842615441729962315731301087767989000918136617870582141517330935619268642915983553727587587676791953536960714236687847602589538927962585440961131240218794236944630211930970546118745080346860636620310193382167597465544174488399379683716417891139157575146359165023126594124268610800205258776019000550873739401445303129974560221438061891795442780328126230093178952504570380957199592993338719686487798275474853570100033092481743129836527369756194343789131822069107283156271772679863538216891518713732520976834628418347371261368933454629405371869789752684339805368137450825001203521193642598238954329102258317328098581116978343883611320940814793654745807336162557057195523274610323601685712314930799144191673243832283659669368716126815118360353441303009936083544193524336572930768154506567477565558211143508568396203781879592033787429012753106951129653074630840496376302289668286168325299592504054003803917262600195834001336180158836765599057537979745423711070158871650976475924365707758401328959478791343481250979029363644046972556422294698558561670817595994409985323205913035009923360820734795546082012200697671744573982535291905800552837118327702125018691644774560916230166739307705017656065679867259837178918123254219579594535869171376148397610005870749992910355727569593729567789260479930835305112462727870603529547312621720559953074675620549217314861961905983960910846471569192459257648138212674016814845327496495507412976753381357634960529826817906824433858135485518651632270319927880227571858035210375443324098235463619647723862420557582355632137583370066602155641218235815280874570372436217877316899649287051943247206509113311767578125e-4966
+-3.237587559719012555462219479113823276249784669017340504844942194598519770062059685508835745638324970127939070738424059838293609943191271023342555035986308991521396355375667467208367312819235870119724263252776995195727778126085574034035411017344128491238136414394551514178668780674015531193282296319913113495953953933831631032855605791532328598034154166422617226534880263244723830482289656875701701315902175019974435037627824356684033058939701577883356651733717468531204705842607568803666569711421917525834491783583598401321476176752039857173551930268891446850107760584333855521475305010940756813993214730850216669600967698749412592167692757446422169965426483919224341062751152057061076522973232731542382055087239368522167656194830741819605276971705738272393130698937532095725613383807312946395184980707534803490003540251394324459987958400939111001126190861523615485938285497714410609640798273816511769391568591823198476415765275534341709798367687043373145262933998108452661682659942586304978413812755518166239176614473815940025342279575304159493260770068030636885746695206392378276051948759263882079389379666940357441139816661913198656187703463519723262653223919257185751827493927586153153792077729913353547954808876263400200663495414360816863385220457719546338953323399286762099558324132103460225580066817535680886906060858264089074120360391613368274811868067637495154569071591624185979937989402513750464346904036668477876379544221432800037599944499161940321774835027752710681217554286366043661491013593886229615614494736186475932160549630939390542165126494166960681499481651861215529870984381726203476917507560266886692644952355421814201350137351435237036912624414444992497142303802423605897110605364956579914507108584002230524766331348271456591814078599780820974961968314684496428310691542272663818486132771177670874927831510002443658417608078383611526899905533629456904234997116303929427262032216072887961072267850618234492852606488522739744757845004694461812790342894353802938671928834585447328398711684245164703625580196678024410303542544534512706792134908369873605619756775207191558754413381571756431003248529020572648048946458999967788526617126349345966896362376841092268841417781414969315002419192181972121568811432459128737128140063645558482525300089060238860392371092102688097987915838860882370022268312322882235690785726190915062699382576041643741555139697348927957856990969985342299599797431503615312038393069808777315725367497595040966093808407117316369389112216628231869173217637452855462790553030636920487796465880633399632793882734473382168542596184679158149228725004404714293460752371865436947855237307240001863573081174929166645758276081272685156100195420794154740486637315823136798695124738873328565945598241199335059398955049459449844741098478330319112865980346771381982151154499846478545530650091824164892591396650703633600023191521502618379988693800703884555191647864959327260468892793195316578510173816406054364319294906641284764788384683586662382042642852654156477478700779123584369965723284711409361741235548687181052639639279285373139084165798451899763979500837428077782309910703522399860010310321116623028924118238023770381424894162717815296210097245221769714495449744327945091943394325259297771090128969600269822520904193880119094781214175887316220311309028456568749910010962366586834018403242866721783519806933018588077977626913774236680220258524711348037750591646286531625306510583751929280541119187219596706615736304036444366663256426643903386694536649648686380122198677895751002327229059364018755164517060321515091173358005987498359799467138817648881479418623694683454881683746841149715181334498096967702613110590140231345676956141227850879905018558219984441819798054463206764413100251255775535830770535620946159535406497134759043192647996190512978586496199656070707105117773853504277795024754647024165589129442822627147868917463795166386552921913398878270019905147510849518894114102536073369047160130990411626048426437835295683097278297774735181045158616674564080237813146623269215019613231938626758927531490945029356207933289363847181438902539297057969524961348607844569521442237914899100699610921669921572167164875488132527187949318543809703388178931170799769792886086681284964861608656928109305369539955846964197786677053847603962194721523867993048528558551380823699291873352033111096244814245789620930756114228971363838828108534030152031715929722499546436547773404017947035596936338462103946797525667033935433489292620531649199724400832489751788129365426568881328357966337292439204382537174357675404105580244018783685041224798457022189315692175787257287203633134300759209060570319508886475377719911176071302732819878165468592717406388218727585026352127436844762994722826390779737322113768842482160812973100323673863050234437722898796145596181862320550301285861980052194863780743808106946940079349630782676930197134206259739125377941060751175427888774493677478593805682322173891730311959284895178856039354015035864931073602059531001572891528828982167810245343327388887928886208615327002834690068636094325052251429781641267821367266715283643659749152264457938319185148303604827363623405060374573505789923003843438436174489383805098509083722050766328250349793203837202162624690093533478114438810603140565070517669964629947543608404988178019652088162307525611931821066493746994641048066011859814337589829896549720562117090677291541318153057715167624128318297771376531788973088699647168159229805877415594828532539839967464064556647594705830374653113373530876658380240145380423210673778776803592627231257495817394581607796277282644312510714532297108722017217547317744900647318022108570947064304280100418971450552007356891519523293614416944016354756866350050833501416942505071203810116719053430543531027953437436446745566839242129860410443198862219469972163224971258348314341755015213118628882713134766297624091644805801186976152536913514712919240503721680740586016832099946807466311777189050656676962849581383790904722087478646766320517056183581970236248227413322748304134245717987665377396011236706627320817654565682680006957454759981618023476448544673508068369492066566895437050571584345511070959483898938738225050292533674383091612495407126805381796487365892131916426837522671623266627483065655765705534239355214893395905702329340402794052884259146049064629582075576563307670749189662176976725361937046200576007893814439695301892528761187544161389682003509216791271836545495416676148151145195082668323677621182991451835324281863619641773620601014510950996746726615703771971266687151564427772359427340566909351858654807999781808513034680104078196607462166928018863385629928965649243954503391493597963417955268639606791452833692467872935741940362479842688642227725662504694679557678170929873774151037857807219938356152056997839625453727441947651198316190826615266016347740875615970031428012228328190610356706715662722241878767131224669837573607121539572299329404101274463156060298348931678277361174057097484704587036227686110677413094941011961262438027467952964727129462752693949019764164538344775554466171428121848999818969114034332797672927989107710137279281184295118233855942385256333164153378143279674287318136458207166174996112638689535976047617221520910027427485161965702038805161865494457444594178063766957037428053543239915792369877811053417485684498667123216132006378630814477106813088898563644909178779463295955587688067277368683836470612208483299572260344016516194247232298740800342116589984844356688576984553507410293250093945014209879983314562948451929862241009275783684229669718641013736581856815277185073259140534024850924787544871716174654424640728091372513505922826813145390369149590652886241000625495880523771672395227312971578042522330551788256261683080675549820375567692574152956993944504349004617185470945673049153218968830613586193253490318451871770642617802890083608004460414305421033261048294750210470303202846332054952531617433058538758154347087854561609738141615145103748777579733574989673510104836750248325511777237502526995647687215364262385606217553691332159421351598905950537513518351520709657614578131639854432532002236696200855408766520105076378983345708235918180749273124590433024519869147132931932462703067876214268579940066030521414045386366551780718510535469417760242493782392451178913322503092692423649855756521279456558275339921490892868856862895022564047205838132429286600764536839036698193759634186899291274131934296059833048690594627623595320676097721540716472990950611858372856271872423573251506230042608074167903809812264198034505185435990821356377966484742250577592243727298923187891299404854048446822719928239317254073429532989089675503790372464487057264894107613242300912487070053676379388189496900004239731820229886894053019610823763957809819187948639826973433528683168917360632750040517847686479093538683816924213175672979768822065627696943474914020483056384006872835738311110986586149510661361915342172527409078742250880056867149831149121019729847242037335904440063130981999650700416787683293610119590221942974317455716336227454789239793488032299063316588917505912406020220045264868457718282165158892171630470709599503997282778168097827497383884195820921583645621293941200045604062174334998171535030513366277293714389988219756129580868518167923841173364269774889246694435264051484911461988227011238661037602452710188911900438270362280391121270021679247152879324195035694278071477495720447513017171148877312193736366348711630105507365864598069586257026976295714123943691621672377694552248018987680338612382795605985191106112971398796002636340393693119651973344711646854574482999700397952536878348512983782198330513744803168936076427075943787200489575435147989033386529956551570669047103070223076797892329848058499725632813524581372640746415923016932853954152472487866287318545051065376430120748079948860283261855738836955246188128622509828635867225708782966017423170535046509131388753895013061151387840089512861842615441729962315731301087767989000918136617870582141517330935619268642915983553727587587676791953536960714236687847602589538927962585440961131240218794236944630211930970546118745080346860636620310193382167597465544174488399379683716417891139157575146359165023126594124268610800205258776019000550873739401445303129974560221438061891795442780328126230093178952504570380957199592993338719686487798275474853570100033092481743129836527369756194343789131822069107283156271772679863538216891518713732520976834628418347371261368933454629405371869789752684339805368137450825001203521193642598238954329102258317328098581116978343883611320940814793654745807336162557057195523274610323601685712314930799144191673243832283659669368716126815118360353441303009936083544193524336572930768154506567477565558211143508568396203781879592033787429012753106951129653074630840496376302289668286168325299592504054003803917262600195834001336180158836765599057537979745423711070158871650976475924365707758401328959478791343481250979029363644046972556422294698558561670817595994409985323205913035009923360820734795546082012200697671744573982535291905800552837118327702125018691644774560916230166739307705017656065679867259837178918123254219579594535869171376148397610005870749992910355727569593729567789260479930835305112462727870603529547312621720559953074675620549217314861961905983960910846471569192459257648138212674016814845327496495507412976753381357634960529826817906824433858135485518651632270319927880227571858035210375443324098235463619647723862420557582355632137583370066602155641218235815280874570372436217877316899649287051943247206509113311767578126e-4966
diff --git a/REORG.TODO/stdlib/tst-strtod-round-data.h b/REORG.TODO/stdlib/tst-strtod-round-data.h
new file mode 100644
index 0000000000..fc09bc9117
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod-round-data.h
@@ -0,0 +1,11584 @@
+/* This file was generated by gen-tst-strtod-round.c from tst-strtod-round-data. */
+static const struct test tests[] = {
+ TEST ("3.518437208883201171875E+013",
+ false,
+ 0x2p+44,
+ 0x2p+44,
+ 0x2p+44,
+ 0x2.000004p+44,
+ false,
+ 0x2.0000000000002p+44,
+ 0x2.0000000000004p+44,
+ 0x2.0000000000002p+44,
+ 0x2.0000000000004p+44,
+ true,
+ 0x2.0000000000003p+44,
+ 0x2.0000000000003p+44,
+ 0x2.0000000000003p+44,
+ 0x2.0000000000003p+44,
+ true,
+ 0x2.0000000000003p+44,
+ 0x2.0000000000003p+44,
+ 0x2.0000000000003p+44,
+ 0x2.0000000000003p+44,
+ true,
+ 0x2.0000000000003p+44,
+ 0x2.0000000000003p+44,
+ 0x2.0000000000003p+44,
+ 0x2.0000000000003p+44,
+ true,
+ 0x2.0000000000003p+44,
+ 0x2.0000000000003p+44,
+ 0x2.0000000000003p+44,
+ 0x2.0000000000003p+44),
+ TEST ("1.00000005960464477550",
+ false,
+ 0x1p+0,
+ 0x1.000002p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.0000010000001p+0,
+ false,
+ 0x1.0000010000000002p+0,
+ 0x1.0000010000000002p+0,
+ 0x1.0000010000000002p+0,
+ 0x1.0000010000000004p+0,
+ false,
+ 0x1.0000010000000002p+0,
+ 0x1.0000010000000002p+0,
+ 0x1.0000010000000002p+0,
+ 0x1.0000010000000004p+0,
+ false,
+ 0x1.0000010000000002048242f2ffp+0,
+ 0x1.0000010000000002048242f2ff8p+0,
+ 0x1.0000010000000002048242f2ffp+0,
+ 0x1.0000010000000002048242f2ff8p+0,
+ false,
+ 0x1.0000010000000002048242f2ff66p+0,
+ 0x1.0000010000000002048242f2ff67p+0,
+ 0x1.0000010000000002048242f2ff66p+0,
+ 0x1.0000010000000002048242f2ff67p+0),
+ TEST ("1.0000000596046447755",
+ false,
+ 0x1p+0,
+ 0x1.000002p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.0000010000001p+0,
+ false,
+ 0x1.0000010000000002p+0,
+ 0x1.0000010000000002p+0,
+ 0x1.0000010000000002p+0,
+ 0x1.0000010000000004p+0,
+ false,
+ 0x1.0000010000000002p+0,
+ 0x1.0000010000000002p+0,
+ 0x1.0000010000000002p+0,
+ 0x1.0000010000000004p+0,
+ false,
+ 0x1.0000010000000002048242f2ffp+0,
+ 0x1.0000010000000002048242f2ff8p+0,
+ 0x1.0000010000000002048242f2ffp+0,
+ 0x1.0000010000000002048242f2ff8p+0,
+ false,
+ 0x1.0000010000000002048242f2ff66p+0,
+ 0x1.0000010000000002048242f2ff67p+0,
+ 0x1.0000010000000002048242f2ff66p+0,
+ 0x1.0000010000000002048242f2ff67p+0),
+ TEST ("1.000000059604644776",
+ false,
+ 0x1p+0,
+ 0x1.000002p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.0000010000001p+0,
+ false,
+ 0x1.000001000000000ap+0,
+ 0x1.000001000000000cp+0,
+ 0x1.000001000000000ap+0,
+ 0x1.000001000000000cp+0,
+ false,
+ 0x1.000001000000000ap+0,
+ 0x1.000001000000000cp+0,
+ 0x1.000001000000000ap+0,
+ 0x1.000001000000000cp+0,
+ false,
+ 0x1.000001000000000b3db12bdc21p+0,
+ 0x1.000001000000000b3db12bdc21p+0,
+ 0x1.000001000000000b3db12bdc21p+0,
+ 0x1.000001000000000b3db12bdc218p+0,
+ false,
+ 0x1.000001000000000b3db12bdc213cp+0,
+ 0x1.000001000000000b3db12bdc213dp+0,
+ 0x1.000001000000000b3db12bdc213cp+0,
+ 0x1.000001000000000b3db12bdc213dp+0),
+ TEST ("1.000000059604644775",
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1.000000fffffffp+0,
+ 0x1.000001p+0,
+ 0x1.000000fffffffp+0,
+ 0x1.000001p+0,
+ false,
+ 0x1.000000fffffffff8p+0,
+ 0x1.000000fffffffff8p+0,
+ 0x1.000000fffffffff8p+0,
+ 0x1.000000fffffffffap+0,
+ false,
+ 0x1.000000fffffffff8p+0,
+ 0x1.000000fffffffff8p+0,
+ 0x1.000000fffffffff8p+0,
+ 0x1.000000fffffffffap+0,
+ false,
+ 0x1.000000fffffffff8cb535a09dd8p+0,
+ 0x1.000000fffffffff8cb535a09dd8p+0,
+ 0x1.000000fffffffff8cb535a09dd8p+0,
+ 0x1.000000fffffffff8cb535a09dep+0,
+ false,
+ 0x1.000000fffffffff8cb535a09dd9p+0,
+ 0x1.000000fffffffff8cb535a09dd91p+0,
+ 0x1.000000fffffffff8cb535a09dd9p+0,
+ 0x1.000000fffffffff8cb535a09dd91p+0),
+ TEST ("1.00000005960464478",
+ false,
+ 0x1p+0,
+ 0x1.000002p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.0000010000001p+0,
+ false,
+ 0x1.0000010000000054p+0,
+ 0x1.0000010000000056p+0,
+ 0x1.0000010000000054p+0,
+ 0x1.0000010000000056p+0,
+ false,
+ 0x1.0000010000000054p+0,
+ 0x1.0000010000000056p+0,
+ 0x1.0000010000000054p+0,
+ 0x1.0000010000000056p+0,
+ false,
+ 0x1.0000010000000055072873252f8p+0,
+ 0x1.0000010000000055072873253p+0,
+ 0x1.0000010000000055072873252f8p+0,
+ 0x1.0000010000000055072873253p+0,
+ false,
+ 0x1.0000010000000055072873252febp+0,
+ 0x1.0000010000000055072873252febp+0,
+ 0x1.0000010000000055072873252febp+0,
+ 0x1.0000010000000055072873252fecp+0),
+ TEST ("1.0000000596046448",
+ false,
+ 0x1p+0,
+ 0x1.000002p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.0000010000001p+0,
+ false,
+ 0x1.00000100000001c4p+0,
+ 0x1.00000100000001c6p+0,
+ 0x1.00000100000001c4p+0,
+ 0x1.00000100000001c6p+0,
+ false,
+ 0x1.00000100000001c4p+0,
+ 0x1.00000100000001c6p+0,
+ 0x1.00000100000001c4p+0,
+ 0x1.00000100000001c6p+0,
+ false,
+ 0x1.00000100000001c5f67cd79279p+0,
+ 0x1.00000100000001c5f67cd792798p+0,
+ 0x1.00000100000001c5f67cd79279p+0,
+ 0x1.00000100000001c5f67cd792798p+0,
+ false,
+ 0x1.00000100000001c5f67cd7927953p+0,
+ 0x1.00000100000001c5f67cd7927954p+0,
+ 0x1.00000100000001c5f67cd7927953p+0,
+ 0x1.00000100000001c5f67cd7927954p+0),
+ TEST ("1.000000059604645",
+ false,
+ 0x1p+0,
+ 0x1.000002p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1.0000010000001p+0,
+ 0x1.0000010000001p+0,
+ 0x1.0000010000001p+0,
+ 0x1.0000010000002p+0,
+ false,
+ 0x1.000001000000102ep+0,
+ 0x1.000001000000103p+0,
+ 0x1.000001000000102ep+0,
+ 0x1.000001000000103p+0,
+ false,
+ 0x1.000001000000102ep+0,
+ 0x1.000001000000103p+0,
+ 0x1.000001000000102ep+0,
+ 0x1.000001000000103p+0,
+ false,
+ 0x1.000001000000102f4fc8c3d757p+0,
+ 0x1.000001000000102f4fc8c3d7578p+0,
+ 0x1.000001000000102f4fc8c3d757p+0,
+ 0x1.000001000000102f4fc8c3d7578p+0,
+ false,
+ 0x1.000001000000102f4fc8c3d75769p+0,
+ 0x1.000001000000102f4fc8c3d75769p+0,
+ 0x1.000001000000102f4fc8c3d75769p+0,
+ 0x1.000001000000102f4fc8c3d7576ap+0),
+ TEST ("1.00000005960464",
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1.000000fffffeap+0,
+ 0x1.000000fffffeap+0,
+ 0x1.000000fffffeap+0,
+ 0x1.000000fffffebp+0,
+ false,
+ 0x1.000000fffffea7e4p+0,
+ 0x1.000000fffffea7e6p+0,
+ 0x1.000000fffffea7e4p+0,
+ 0x1.000000fffffea7e6p+0,
+ false,
+ 0x1.000000fffffea7e4p+0,
+ 0x1.000000fffffea7e6p+0,
+ 0x1.000000fffffea7e4p+0,
+ 0x1.000000fffffea7e6p+0,
+ false,
+ 0x1.000000fffffea7e5975eb11da7p+0,
+ 0x1.000000fffffea7e5975eb11da78p+0,
+ 0x1.000000fffffea7e5975eb11da7p+0,
+ 0x1.000000fffffea7e5975eb11da78p+0,
+ false,
+ 0x1.000000fffffea7e5975eb11da74ap+0,
+ 0x1.000000fffffea7e5975eb11da74bp+0,
+ 0x1.000000fffffea7e5975eb11da74ap+0,
+ 0x1.000000fffffea7e5975eb11da74bp+0),
+ TEST ("1.0000000596046",
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1.000000fffff36p+0,
+ 0x1.000000fffff36p+0,
+ 0x1.000000fffff36p+0,
+ 0x1.000000fffff37p+0,
+ false,
+ 0x1.000000fffff36596p+0,
+ 0x1.000000fffff36598p+0,
+ 0x1.000000fffff36596p+0,
+ 0x1.000000fffff36598p+0,
+ false,
+ 0x1.000000fffff36596p+0,
+ 0x1.000000fffff36598p+0,
+ 0x1.000000fffff36596p+0,
+ 0x1.000000fffff36598p+0,
+ false,
+ 0x1.000000fffff36597d40e1b5026p+0,
+ 0x1.000000fffff36597d40e1b50268p+0,
+ 0x1.000000fffff36597d40e1b5026p+0,
+ 0x1.000000fffff36597d40e1b50268p+0,
+ false,
+ 0x1.000000fffff36597d40e1b502655p+0,
+ 0x1.000000fffff36597d40e1b502656p+0,
+ 0x1.000000fffff36597d40e1b502655p+0,
+ 0x1.000000fffff36597d40e1b502656p+0),
+ TEST ("1.000000059605",
+ false,
+ 0x1p+0,
+ 0x1.000002p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1.000001000063fp+0,
+ 0x1.000001000064p+0,
+ 0x1.000001000063fp+0,
+ 0x1.000001000064p+0,
+ false,
+ 0x1.000001000063fcap+0,
+ 0x1.000001000063fca2p+0,
+ 0x1.000001000063fcap+0,
+ 0x1.000001000063fca2p+0,
+ false,
+ 0x1.000001000063fcap+0,
+ 0x1.000001000063fca2p+0,
+ 0x1.000001000063fcap+0,
+ 0x1.000001000063fca2p+0,
+ false,
+ 0x1.000001000063fca17533f5572f8p+0,
+ 0x1.000001000063fca17533f5573p+0,
+ 0x1.000001000063fca17533f5572f8p+0,
+ 0x1.000001000063fca17533f5573p+0,
+ false,
+ 0x1.000001000063fca17533f5572fe9p+0,
+ 0x1.000001000063fca17533f5572feap+0,
+ 0x1.000001000063fca17533f5572fe9p+0,
+ 0x1.000001000063fca17533f5572feap+0),
+ TEST ("1.00000005960",
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1.000000fffae49p+0,
+ 0x1.000000fffae4ap+0,
+ 0x1.000000fffae49p+0,
+ 0x1.000000fffae4ap+0,
+ false,
+ 0x1.000000fffae49ca8p+0,
+ 0x1.000000fffae49caap+0,
+ 0x1.000000fffae49ca8p+0,
+ 0x1.000000fffae49caap+0,
+ false,
+ 0x1.000000fffae49ca8p+0,
+ 0x1.000000fffae49caap+0,
+ 0x1.000000fffae49ca8p+0,
+ 0x1.000000fffae49caap+0,
+ false,
+ 0x1.000000fffae49ca916dacfff38p+0,
+ 0x1.000000fffae49ca916dacfff38p+0,
+ 0x1.000000fffae49ca916dacfff38p+0,
+ 0x1.000000fffae49ca916dacfff388p+0,
+ false,
+ 0x1.000000fffae49ca916dacfff382dp+0,
+ 0x1.000000fffae49ca916dacfff382dp+0,
+ 0x1.000000fffae49ca916dacfff382dp+0,
+ 0x1.000000fffae49ca916dacfff382ep+0),
+ TEST ("1.0000000596",
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1.000000fffae49p+0,
+ 0x1.000000fffae4ap+0,
+ 0x1.000000fffae49p+0,
+ 0x1.000000fffae4ap+0,
+ false,
+ 0x1.000000fffae49ca8p+0,
+ 0x1.000000fffae49caap+0,
+ 0x1.000000fffae49ca8p+0,
+ 0x1.000000fffae49caap+0,
+ false,
+ 0x1.000000fffae49ca8p+0,
+ 0x1.000000fffae49caap+0,
+ 0x1.000000fffae49ca8p+0,
+ 0x1.000000fffae49caap+0,
+ false,
+ 0x1.000000fffae49ca916dacfff38p+0,
+ 0x1.000000fffae49ca916dacfff38p+0,
+ 0x1.000000fffae49ca916dacfff38p+0,
+ 0x1.000000fffae49ca916dacfff388p+0,
+ false,
+ 0x1.000000fffae49ca916dacfff382dp+0,
+ 0x1.000000fffae49ca916dacfff382dp+0,
+ 0x1.000000fffae49ca916dacfff382dp+0,
+ 0x1.000000fffae49ca916dacfff382ep+0),
+ TEST ("1.000000060",
+ false,
+ 0x1p+0,
+ 0x1.000002p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1.00000101b2b29p+0,
+ 0x1.00000101b2b2ap+0,
+ 0x1.00000101b2b29p+0,
+ 0x1.00000101b2b2ap+0,
+ false,
+ 0x1.00000101b2b29a46p+0,
+ 0x1.00000101b2b29a46p+0,
+ 0x1.00000101b2b29a46p+0,
+ 0x1.00000101b2b29a48p+0,
+ false,
+ 0x1.00000101b2b29a46p+0,
+ 0x1.00000101b2b29a46p+0,
+ 0x1.00000101b2b29a46p+0,
+ 0x1.00000101b2b29a48p+0,
+ false,
+ 0x1.00000101b2b29a4692b67b7ca3p+0,
+ 0x1.00000101b2b29a4692b67b7ca3p+0,
+ 0x1.00000101b2b29a4692b67b7ca3p+0,
+ 0x1.00000101b2b29a4692b67b7ca38p+0,
+ false,
+ 0x1.00000101b2b29a4692b67b7ca313p+0,
+ 0x1.00000101b2b29a4692b67b7ca314p+0,
+ 0x1.00000101b2b29a4692b67b7ca313p+0,
+ 0x1.00000101b2b29a4692b67b7ca314p+0),
+ TEST ("1.00000006",
+ false,
+ 0x1p+0,
+ 0x1.000002p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1.00000101b2b29p+0,
+ 0x1.00000101b2b2ap+0,
+ 0x1.00000101b2b29p+0,
+ 0x1.00000101b2b2ap+0,
+ false,
+ 0x1.00000101b2b29a46p+0,
+ 0x1.00000101b2b29a46p+0,
+ 0x1.00000101b2b29a46p+0,
+ 0x1.00000101b2b29a48p+0,
+ false,
+ 0x1.00000101b2b29a46p+0,
+ 0x1.00000101b2b29a46p+0,
+ 0x1.00000101b2b29a46p+0,
+ 0x1.00000101b2b29a48p+0,
+ false,
+ 0x1.00000101b2b29a4692b67b7ca3p+0,
+ 0x1.00000101b2b29a4692b67b7ca3p+0,
+ 0x1.00000101b2b29a4692b67b7ca3p+0,
+ 0x1.00000101b2b29a4692b67b7ca38p+0,
+ false,
+ 0x1.00000101b2b29a4692b67b7ca313p+0,
+ 0x1.00000101b2b29a4692b67b7ca314p+0,
+ 0x1.00000101b2b29a4692b67b7ca313p+0,
+ 0x1.00000101b2b29a4692b67b7ca314p+0),
+ TEST ("1.0000001",
+ false,
+ 0x1p+0,
+ 0x1.000002p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1.000001ad7f29ap+0,
+ 0x1.000001ad7f29bp+0,
+ 0x1.000001ad7f29ap+0,
+ 0x1.000001ad7f29bp+0,
+ false,
+ 0x1.000001ad7f29abcap+0,
+ 0x1.000001ad7f29abcap+0,
+ 0x1.000001ad7f29abcap+0,
+ 0x1.000001ad7f29abccp+0,
+ false,
+ 0x1.000001ad7f29abcap+0,
+ 0x1.000001ad7f29abcap+0,
+ 0x1.000001ad7f29abcap+0,
+ 0x1.000001ad7f29abccp+0,
+ false,
+ 0x1.000001ad7f29abcaf485787a65p+0,
+ 0x1.000001ad7f29abcaf485787a65p+0,
+ 0x1.000001ad7f29abcaf485787a65p+0,
+ 0x1.000001ad7f29abcaf485787a658p+0,
+ false,
+ 0x1.000001ad7f29abcaf485787a652p+0,
+ 0x1.000001ad7f29abcaf485787a6521p+0,
+ 0x1.000001ad7f29abcaf485787a652p+0,
+ 0x1.000001ad7f29abcaf485787a6521p+0),
+ TEST ("1.000000",
+ true,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ true,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ true,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ true,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ true,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ true,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0),
+ TEST ("1.00000000000000011113",
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1p+0,
+ 0x1.0000000000001p+0,
+ 0x1p+0,
+ 0x1.0000000000001p+0,
+ false,
+ 0x1.00000000000008p+0,
+ 0x1.0000000000000802p+0,
+ 0x1.00000000000008p+0,
+ 0x1.0000000000000802p+0,
+ false,
+ 0x1.00000000000008p+0,
+ 0x1.0000000000000802p+0,
+ 0x1.00000000000008p+0,
+ 0x1.0000000000000802p+0,
+ false,
+ 0x1.0000000000000801fc96557232p+0,
+ 0x1.0000000000000801fc96557232p+0,
+ 0x1.0000000000000801fc96557232p+0,
+ 0x1.0000000000000801fc965572328p+0,
+ false,
+ 0x1.0000000000000801fc9655723222p+0,
+ 0x1.0000000000000801fc9655723222p+0,
+ 0x1.0000000000000801fc9655723222p+0,
+ 0x1.0000000000000801fc9655723223p+0),
+ TEST ("1.00000000000000011103",
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1p+0,
+ 0x1.0000000000001p+0,
+ 0x1p+0,
+ 0x1.0000000000001p+0,
+ false,
+ 0x1.00000000000008p+0,
+ 0x1.00000000000008p+0,
+ 0x1.00000000000008p+0,
+ 0x1.0000000000000802p+0,
+ false,
+ 0x1.00000000000008p+0,
+ 0x1.00000000000008p+0,
+ 0x1.00000000000008p+0,
+ 0x1.0000000000000802p+0,
+ false,
+ 0x1.00000000000008002459c076c48p+0,
+ 0x1.00000000000008002459c076c5p+0,
+ 0x1.00000000000008002459c076c48p+0,
+ 0x1.00000000000008002459c076c5p+0,
+ false,
+ 0x1.00000000000008002459c076c4f7p+0,
+ 0x1.00000000000008002459c076c4f8p+0,
+ 0x1.00000000000008002459c076c4f7p+0,
+ 0x1.00000000000008002459c076c4f8p+0),
+ TEST ("1.00000000000000011102",
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.0000000000001p+0,
+ false,
+ 0x1.00000000000007fep+0,
+ 0x1.00000000000008p+0,
+ 0x1.00000000000007fep+0,
+ 0x1.00000000000008p+0,
+ false,
+ 0x1.00000000000007fep+0,
+ 0x1.00000000000008p+0,
+ 0x1.00000000000007fep+0,
+ 0x1.00000000000008p+0,
+ false,
+ 0x1.00000000000007fff5207e5dap+0,
+ 0x1.00000000000007fff5207e5da08p+0,
+ 0x1.00000000000007fff5207e5dap+0,
+ 0x1.00000000000007fff5207e5da08p+0,
+ false,
+ 0x1.00000000000007fff5207e5da073p+0,
+ 0x1.00000000000007fff5207e5da073p+0,
+ 0x1.00000000000007fff5207e5da073p+0,
+ 0x1.00000000000007fff5207e5da074p+0),
+ TEST ("1.00000000000000011101",
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.0000000000001p+0,
+ false,
+ 0x1.00000000000007fep+0,
+ 0x1.00000000000008p+0,
+ 0x1.00000000000007fep+0,
+ 0x1.00000000000008p+0,
+ false,
+ 0x1.00000000000007fep+0,
+ 0x1.00000000000008p+0,
+ 0x1.00000000000007fep+0,
+ 0x1.00000000000008p+0,
+ false,
+ 0x1.00000000000007ffc5e73c447b8p+0,
+ 0x1.00000000000007ffc5e73c447cp+0,
+ 0x1.00000000000007ffc5e73c447b8p+0,
+ 0x1.00000000000007ffc5e73c447cp+0,
+ false,
+ 0x1.00000000000007ffc5e73c447befp+0,
+ 0x1.00000000000007ffc5e73c447befp+0,
+ 0x1.00000000000007ffc5e73c447befp+0,
+ 0x1.00000000000007ffc5e73c447bfp+0),
+ TEST ("1.0000000000000001111",
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1p+0,
+ 0x1.0000000000001p+0,
+ 0x1p+0,
+ 0x1.0000000000001p+0,
+ false,
+ 0x1.00000000000008p+0,
+ 0x1.0000000000000802p+0,
+ 0x1.00000000000008p+0,
+ 0x1.0000000000000802p+0,
+ false,
+ 0x1.00000000000008p+0,
+ 0x1.0000000000000802p+0,
+ 0x1.00000000000008p+0,
+ 0x1.0000000000000802p+0,
+ false,
+ 0x1.00000000000008016eea8f26c48p+0,
+ 0x1.00000000000008016eea8f26c48p+0,
+ 0x1.00000000000008016eea8f26c48p+0,
+ 0x1.00000000000008016eea8f26c5p+0,
+ false,
+ 0x1.00000000000008016eea8f26c495p+0,
+ 0x1.00000000000008016eea8f26c496p+0,
+ 0x1.00000000000008016eea8f26c495p+0,
+ 0x1.00000000000008016eea8f26c496p+0),
+ TEST ("1.000000000000000111",
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.0000000000001p+0,
+ false,
+ 0x1.00000000000007fep+0,
+ 0x1.00000000000008p+0,
+ 0x1.00000000000007fep+0,
+ 0x1.00000000000008p+0,
+ false,
+ 0x1.00000000000007fep+0,
+ 0x1.00000000000008p+0,
+ 0x1.00000000000007fep+0,
+ 0x1.00000000000008p+0,
+ false,
+ 0x1.00000000000007ff96adfa2b57p+0,
+ 0x1.00000000000007ff96adfa2b578p+0,
+ 0x1.00000000000007ff96adfa2b57p+0,
+ 0x1.00000000000007ff96adfa2b578p+0,
+ false,
+ 0x1.00000000000007ff96adfa2b576ap+0,
+ 0x1.00000000000007ff96adfa2b576bp+0,
+ 0x1.00000000000007ff96adfa2b576ap+0,
+ 0x1.00000000000007ff96adfa2b576bp+0),
+ TEST ("1.00000000000000011",
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.0000000000001p+0,
+ false,
+ 0x1.00000000000007ecp+0,
+ 0x1.00000000000007eep+0,
+ 0x1.00000000000007ecp+0,
+ 0x1.00000000000007eep+0,
+ false,
+ 0x1.00000000000007ecp+0,
+ 0x1.00000000000007eep+0,
+ 0x1.00000000000007ecp+0,
+ 0x1.00000000000007eep+0,
+ false,
+ 0x1.00000000000007ed24502859138p+0,
+ 0x1.00000000000007ed24502859138p+0,
+ 0x1.00000000000007ed24502859138p+0,
+ 0x1.00000000000007ed2450285914p+0,
+ false,
+ 0x1.00000000000007ed2450285913bfp+0,
+ 0x1.00000000000007ed2450285913bfp+0,
+ 0x1.00000000000007ed2450285913bfp+0,
+ 0x1.00000000000007ed2450285913cp+0),
+ TEST ("1.0000000000000001",
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.0000000000001p+0,
+ false,
+ 0x1.0000000000000734p+0,
+ 0x1.0000000000000734p+0,
+ 0x1.0000000000000734p+0,
+ 0x1.0000000000000736p+0,
+ false,
+ 0x1.0000000000000734p+0,
+ 0x1.0000000000000734p+0,
+ 0x1.0000000000000734p+0,
+ 0x1.0000000000000736p+0,
+ false,
+ 0x1.0000000000000734aca5f6226fp+0,
+ 0x1.0000000000000734aca5f6226fp+0,
+ 0x1.0000000000000734aca5f6226fp+0,
+ 0x1.0000000000000734aca5f6226f8p+0,
+ false,
+ 0x1.0000000000000734aca5f6226f0ap+0,
+ 0x1.0000000000000734aca5f6226f0bp+0,
+ 0x1.0000000000000734aca5f6226f0ap+0,
+ 0x1.0000000000000734aca5f6226f0bp+0),
+ TEST ("3929201589819414e-25",
+ false,
+ 0x1.b0053p-32,
+ 0x1.b00532p-32,
+ 0x1.b0053p-32,
+ 0x1.b00532p-32,
+ false,
+ 0x1.b005314e2421ep-32,
+ 0x1.b005314e2421ep-32,
+ 0x1.b005314e2421ep-32,
+ 0x1.b005314e2421fp-32,
+ false,
+ 0x1.b005314e2421e7fep-32,
+ 0x1.b005314e2421e8p-32,
+ 0x1.b005314e2421e7fep-32,
+ 0x1.b005314e2421e8p-32,
+ false,
+ 0x1.b005314e2421e7fep-32,
+ 0x1.b005314e2421e8p-32,
+ 0x1.b005314e2421e7fep-32,
+ 0x1.b005314e2421e8p-32,
+ false,
+ 0x1.b005314e2421e7ffb472840c5ap-32,
+ 0x1.b005314e2421e7ffb472840c5a8p-32,
+ 0x1.b005314e2421e7ffb472840c5ap-32,
+ 0x1.b005314e2421e7ffb472840c5a8p-32,
+ false,
+ 0x1.b005314e2421e7ffb472840c5a6ep-32,
+ 0x1.b005314e2421e7ffb472840c5a6fp-32,
+ 0x1.b005314e2421e7ffb472840c5a6ep-32,
+ 0x1.b005314e2421e7ffb472840c5a6fp-32),
+ TEST ("0.0000000000000000000000000000000000000000000021019476964872"
+ "256063855943749348741969203929128147736576356024258346866240"
+ "28790902229957282543182373046875",
+ false,
+ 0x8p-152,
+ 0x1p-148,
+ 0x8p-152,
+ 0x1p-148,
+ true,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ true,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ true,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ true,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ true,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152),
+ TEST ("1.00000005960464477539062499",
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1.000000fffffffp+0,
+ 0x1.000001p+0,
+ 0x1.000000fffffffp+0,
+ 0x1.000001p+0,
+ false,
+ 0x1.000000fffffffffep+0,
+ 0x1.000001p+0,
+ 0x1.000000fffffffffep+0,
+ 0x1.000001p+0,
+ false,
+ 0x1.000000fffffffffep+0,
+ 0x1.000001p+0,
+ 0x1.000000fffffffffep+0,
+ 0x1.000001p+0,
+ false,
+ 0x1.000000fffffffffffffffce7b78p+0,
+ 0x1.000000fffffffffffffffce7b8p+0,
+ 0x1.000000fffffffffffffffce7b78p+0,
+ 0x1.000000fffffffffffffffce7b8p+0,
+ false,
+ 0x1.000000fffffffffffffffce7b7e7p+0,
+ 0x1.000000fffffffffffffffce7b7e7p+0,
+ 0x1.000000fffffffffffffffce7b7e7p+0,
+ 0x1.000000fffffffffffffffce7b7e8p+0),
+ TEST ("1.000000059604644775390625",
+ false,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ true,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ true,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ true,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ true,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ true,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0),
+ TEST ("1.00000005960464477539062501",
+ false,
+ 0x1p+0,
+ 0x1.000002p+0,
+ 0x1p+0,
+ 0x1.000002p+0,
+ false,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.0000010000001p+0,
+ false,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.0000010000000002p+0,
+ false,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.000001p+0,
+ 0x1.0000010000000002p+0,
+ false,
+ 0x1.00000100000000000000031848p+0,
+ 0x1.00000100000000000000031848p+0,
+ 0x1.00000100000000000000031848p+0,
+ 0x1.000001000000000000000318488p+0,
+ false,
+ 0x1.0000010000000000000003184818p+0,
+ 0x1.0000010000000000000003184819p+0,
+ 0x1.0000010000000000000003184818p+0,
+ 0x1.0000010000000000000003184819p+0),
+ TEST ("1.00000011920928955078125",
+ true,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ true,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ true,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ true,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ true,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ true,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ 0x1.000002p+0),
+ TEST ("1.00000017881393432617187499",
+ false,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ 0x1.000002p+0,
+ 0x1.000004p+0,
+ false,
+ 0x1.000002fffffffp+0,
+ 0x1.000003p+0,
+ 0x1.000002fffffffp+0,
+ 0x1.000003p+0,
+ false,
+ 0x1.000002fffffffffep+0,
+ 0x1.000003p+0,
+ 0x1.000002fffffffffep+0,
+ 0x1.000003p+0,
+ false,
+ 0x1.000002fffffffffep+0,
+ 0x1.000003p+0,
+ 0x1.000002fffffffffep+0,
+ 0x1.000003p+0,
+ false,
+ 0x1.000002fffffffffffffffce7b78p+0,
+ 0x1.000002fffffffffffffffce7b8p+0,
+ 0x1.000002fffffffffffffffce7b78p+0,
+ 0x1.000002fffffffffffffffce7b8p+0,
+ false,
+ 0x1.000002fffffffffffffffce7b7e7p+0,
+ 0x1.000002fffffffffffffffce7b7e7p+0,
+ 0x1.000002fffffffffffffffce7b7e7p+0,
+ 0x1.000002fffffffffffffffce7b7e8p+0),
+ TEST ("1.000000178813934326171875",
+ false,
+ 0x1.000002p+0,
+ 0x1.000004p+0,
+ 0x1.000002p+0,
+ 0x1.000004p+0,
+ true,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ true,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ true,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ true,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ true,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ 0x1.000003p+0),
+ TEST ("1.00000017881393432617187501",
+ false,
+ 0x1.000002p+0,
+ 0x1.000004p+0,
+ 0x1.000002p+0,
+ 0x1.000004p+0,
+ false,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ 0x1.0000030000001p+0,
+ false,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ 0x1.0000030000000002p+0,
+ false,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ 0x1.000003p+0,
+ 0x1.0000030000000002p+0,
+ false,
+ 0x1.00000300000000000000031848p+0,
+ 0x1.00000300000000000000031848p+0,
+ 0x1.00000300000000000000031848p+0,
+ 0x1.000003000000000000000318488p+0,
+ false,
+ 0x1.0000030000000000000003184818p+0,
+ 0x1.0000030000000000000003184819p+0,
+ 0x1.0000030000000000000003184818p+0,
+ 0x1.0000030000000000000003184819p+0),
+ TEST ("1.0000002384185791015625",
+ true,
+ 0x1.000004p+0,
+ 0x1.000004p+0,
+ 0x1.000004p+0,
+ 0x1.000004p+0,
+ true,
+ 0x1.000004p+0,
+ 0x1.000004p+0,
+ 0x1.000004p+0,
+ 0x1.000004p+0,
+ true,
+ 0x1.000004p+0,
+ 0x1.000004p+0,
+ 0x1.000004p+0,
+ 0x1.000004p+0,
+ true,
+ 0x1.000004p+0,
+ 0x1.000004p+0,
+ 0x1.000004p+0,
+ 0x1.000004p+0,
+ true,
+ 0x1.000004p+0,
+ 0x1.000004p+0,
+ 0x1.000004p+0,
+ 0x1.000004p+0,
+ true,
+ 0x1.000004p+0,
+ 0x1.000004p+0,
+ 0x1.000004p+0,
+ 0x1.000004p+0),
+ TEST ("1.08420217248550443400745280086994171142578125e-19",
+ true,
+ 0x2p-64,
+ 0x2p-64,
+ 0x2p-64,
+ 0x2p-64,
+ true,
+ 0x2p-64,
+ 0x2p-64,
+ 0x2p-64,
+ 0x2p-64,
+ true,
+ 0x2p-64,
+ 0x2p-64,
+ 0x2p-64,
+ 0x2p-64,
+ true,
+ 0x2p-64,
+ 0x2p-64,
+ 0x2p-64,
+ 0x2p-64,
+ true,
+ 0x2p-64,
+ 0x2p-64,
+ 0x2p-64,
+ 0x2p-64,
+ true,
+ 0x2p-64,
+ 0x2p-64,
+ 0x2p-64,
+ 0x2p-64),
+ TEST ("1.0842022371089897897127399001987457793916291848290711641311"
+ "645507812499e-19",
+ false,
+ 0x2p-64,
+ 0x2p-64,
+ 0x2p-64,
+ 0x2.000004p-64,
+ false,
+ 0x2.000001ffffffep-64,
+ 0x2.000002p-64,
+ 0x2.000001ffffffep-64,
+ 0x2.000002p-64,
+ false,
+ 0x2.000001fffffffffcp-64,
+ 0x2.000002p-64,
+ 0x2.000001fffffffffcp-64,
+ 0x2.000002p-64,
+ false,
+ 0x2.000001fffffffffcp-64,
+ 0x2.000002p-64,
+ 0x2.000001fffffffffcp-64,
+ 0x2.000002p-64,
+ false,
+ 0x2.000001ffffffffffffffffffffp-64,
+ 0x2.000002p-64,
+ 0x2.000001ffffffffffffffffffffp-64,
+ 0x2.000002p-64,
+ false,
+ 0x2.000001fffffffffffffffffffffep-64,
+ 0x2.000002p-64,
+ 0x2.000001fffffffffffffffffffffep-64,
+ 0x2.000002p-64),
+ TEST ("1.0842022371089897897127399001987457793916291848290711641311"
+ "6455078125e-19",
+ false,
+ 0x2p-64,
+ 0x2p-64,
+ 0x2p-64,
+ 0x2.000004p-64,
+ true,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ true,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ true,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ true,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ true,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.000002p-64),
+ TEST ("1.0842022371089897897127399001987457793916291848290711641311"
+ "645507812501e-19",
+ false,
+ 0x2p-64,
+ 0x2.000004p-64,
+ 0x2p-64,
+ 0x2.000004p-64,
+ false,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.0000020000002p-64,
+ false,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.0000020000000004p-64,
+ false,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.0000020000000004p-64,
+ false,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.00000200000000000000000001p-64,
+ false,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.000002p-64,
+ 0x2.0000020000000000000000000002p-64),
+ TEST ("1.0842023017324751454180269995275498473574771196581423282623"
+ "291015625e-19",
+ true,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ true,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ true,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ true,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ true,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ true,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ 0x2.000004p-64),
+ TEST ("1.0842023663559605011233140988563539153233250544872134923934"
+ "936523437499e-19",
+ false,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ 0x2.000004p-64,
+ 0x2.000008p-64,
+ false,
+ 0x2.000005ffffffep-64,
+ 0x2.000006p-64,
+ 0x2.000005ffffffep-64,
+ 0x2.000006p-64,
+ false,
+ 0x2.000005fffffffffcp-64,
+ 0x2.000006p-64,
+ 0x2.000005fffffffffcp-64,
+ 0x2.000006p-64,
+ false,
+ 0x2.000005fffffffffcp-64,
+ 0x2.000006p-64,
+ 0x2.000005fffffffffcp-64,
+ 0x2.000006p-64,
+ false,
+ 0x2.000005ffffffffffffffffffffp-64,
+ 0x2.000006p-64,
+ 0x2.000005ffffffffffffffffffffp-64,
+ 0x2.000006p-64,
+ false,
+ 0x2.000005fffffffffffffffffffffep-64,
+ 0x2.000006p-64,
+ 0x2.000005fffffffffffffffffffffep-64,
+ 0x2.000006p-64),
+ TEST ("1.0842023663559605011233140988563539153233250544872134923934"
+ "9365234375e-19",
+ false,
+ 0x2.000004p-64,
+ 0x2.000008p-64,
+ 0x2.000004p-64,
+ 0x2.000008p-64,
+ true,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ true,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ true,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ true,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ true,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.000006p-64),
+ TEST ("1.0842023663559605011233140988563539153233250544872134923934"
+ "936523437501e-19",
+ false,
+ 0x2.000004p-64,
+ 0x2.000008p-64,
+ 0x2.000004p-64,
+ 0x2.000008p-64,
+ false,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.0000060000002p-64,
+ false,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.0000060000000004p-64,
+ false,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.0000060000000004p-64,
+ false,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.00000600000000000000000001p-64,
+ false,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.000006p-64,
+ 0x2.0000060000000000000000000002p-64),
+ TEST ("1.0842024309794458568286011981851579832891729893162846565246"
+ "58203125e-19",
+ true,
+ 0x2.000008p-64,
+ 0x2.000008p-64,
+ 0x2.000008p-64,
+ 0x2.000008p-64,
+ true,
+ 0x2.000008p-64,
+ 0x2.000008p-64,
+ 0x2.000008p-64,
+ 0x2.000008p-64,
+ true,
+ 0x2.000008p-64,
+ 0x2.000008p-64,
+ 0x2.000008p-64,
+ 0x2.000008p-64,
+ true,
+ 0x2.000008p-64,
+ 0x2.000008p-64,
+ 0x2.000008p-64,
+ 0x2.000008p-64,
+ true,
+ 0x2.000008p-64,
+ 0x2.000008p-64,
+ 0x2.000008p-64,
+ 0x2.000008p-64,
+ true,
+ 0x2.000008p-64,
+ 0x2.000008p-64,
+ 0x2.000008p-64,
+ 0x2.000008p-64),
+ TEST ("7.5231638452626400509999138382223723380394595633413601376560"
+ "1092018187046051025390625e-37",
+ true,
+ 0x1p-120,
+ 0x1p-120,
+ 0x1p-120,
+ 0x1p-120,
+ true,
+ 0x1p-120,
+ 0x1p-120,
+ 0x1p-120,
+ 0x1p-120,
+ true,
+ 0x1p-120,
+ 0x1p-120,
+ 0x1p-120,
+ 0x1p-120,
+ true,
+ 0x1p-120,
+ 0x1p-120,
+ 0x1p-120,
+ 0x1p-120,
+ true,
+ 0x1p-120,
+ 0x1p-120,
+ 0x1p-120,
+ 0x1p-120,
+ true,
+ 0x1p-120,
+ 0x1p-120,
+ 0x1p-120,
+ 0x1p-120),
+ TEST ("7.5231642936781486349413765338158389908126215730251815381410"
+ "578824437213052434003657253924757242202758789062499e-37",
+ false,
+ 0x1p-120,
+ 0x1p-120,
+ 0x1p-120,
+ 0x1.000002p-120,
+ false,
+ 0x1.000000fffffffp-120,
+ 0x1.000001p-120,
+ 0x1.000000fffffffp-120,
+ 0x1.000001p-120,
+ false,
+ 0x1.000000fffffffffep-120,
+ 0x1.000001p-120,
+ 0x1.000000fffffffffep-120,
+ 0x1.000001p-120,
+ false,
+ 0x1.000000fffffffffep-120,
+ 0x1.000001p-120,
+ 0x1.000000fffffffffep-120,
+ 0x1.000001p-120,
+ false,
+ 0x1.000000ffffffffffffffffffff8p-120,
+ 0x1.000001p-120,
+ 0x1.000000ffffffffffffffffffff8p-120,
+ 0x1.000001p-120,
+ false,
+ 0x1.000000ffffffffffffffffffffffp-120,
+ 0x1.000001p-120,
+ 0x1.000000ffffffffffffffffffffffp-120,
+ 0x1.000001p-120),
+ TEST ("7.5231642936781486349413765338158389908126215730251815381410"
+ "5788244372130524340036572539247572422027587890625e-37",
+ false,
+ 0x1p-120,
+ 0x1p-120,
+ 0x1p-120,
+ 0x1.000002p-120,
+ true,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ true,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ true,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ true,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ true,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.000001p-120),
+ TEST ("7.5231642936781486349413765338158389908126215730251815381410"
+ "578824437213052434003657253924757242202758789062501e-37",
+ false,
+ 0x1p-120,
+ 0x1.000002p-120,
+ 0x1p-120,
+ 0x1.000002p-120,
+ false,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.0000010000001p-120,
+ false,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.0000010000000002p-120,
+ false,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.0000010000000002p-120,
+ false,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.000001000000000000000000008p-120,
+ false,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.000001p-120,
+ 0x1.0000010000000000000000000001p-120),
+ TEST ("7.5231647420936572188828392294093056435857835827090029386261"
+ "048447055721499765468252007849514484405517578125e-37",
+ true,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ true,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ true,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ true,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ true,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ true,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ 0x1.000002p-120),
+ TEST ("7.5231651905091658028243019250027722963589455923928243391111"
+ "518069674229947096932846761774271726608276367187499e-37",
+ false,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ 0x1.000002p-120,
+ 0x1.000004p-120,
+ false,
+ 0x1.000002fffffffp-120,
+ 0x1.000003p-120,
+ 0x1.000002fffffffp-120,
+ 0x1.000003p-120,
+ false,
+ 0x1.000002fffffffffep-120,
+ 0x1.000003p-120,
+ 0x1.000002fffffffffep-120,
+ 0x1.000003p-120,
+ false,
+ 0x1.000002fffffffffep-120,
+ 0x1.000003p-120,
+ 0x1.000002fffffffffep-120,
+ 0x1.000003p-120,
+ false,
+ 0x1.000002ffffffffffffffffffff8p-120,
+ 0x1.000003p-120,
+ 0x1.000002ffffffffffffffffffff8p-120,
+ 0x1.000003p-120,
+ false,
+ 0x1.000002ffffffffffffffffffffffp-120,
+ 0x1.000003p-120,
+ 0x1.000002ffffffffffffffffffffffp-120,
+ 0x1.000003p-120),
+ TEST ("7.5231651905091658028243019250027722963589455923928243391111"
+ "5180696742299470969328467617742717266082763671875e-37",
+ false,
+ 0x1.000002p-120,
+ 0x1.000004p-120,
+ 0x1.000002p-120,
+ 0x1.000004p-120,
+ true,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ true,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ true,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ true,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ true,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.000003p-120),
+ TEST ("7.5231651905091658028243019250027722963589455923928243391111"
+ "518069674229947096932846761774271726608276367187501e-37",
+ false,
+ 0x1.000002p-120,
+ 0x1.000004p-120,
+ 0x1.000002p-120,
+ 0x1.000004p-120,
+ false,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.0000030000001p-120,
+ false,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.0000030000000002p-120,
+ false,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.0000030000000002p-120,
+ false,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.000003000000000000000000008p-120,
+ false,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.000003p-120,
+ 0x1.0000030000000000000000000001p-120),
+ TEST ("7.5231656389246743867657646205962389491321076020766457395961"
+ "98769229273839442839744151569902896881103515625e-37",
+ true,
+ 0x1.000004p-120,
+ 0x1.000004p-120,
+ 0x1.000004p-120,
+ 0x1.000004p-120,
+ true,
+ 0x1.000004p-120,
+ 0x1.000004p-120,
+ 0x1.000004p-120,
+ 0x1.000004p-120,
+ true,
+ 0x1.000004p-120,
+ 0x1.000004p-120,
+ 0x1.000004p-120,
+ 0x1.000004p-120,
+ true,
+ 0x1.000004p-120,
+ 0x1.000004p-120,
+ 0x1.000004p-120,
+ 0x1.000004p-120,
+ true,
+ 0x1.000004p-120,
+ 0x1.000004p-120,
+ 0x1.000004p-120,
+ 0x1.000004p-120,
+ true,
+ 0x1.000004p-120,
+ 0x1.000004p-120,
+ 0x1.000004p-120,
+ 0x1.000004p-120),
+ TEST ("340282356779733661637539395458142568447.999",
+ false,
+ 0xf.fffffp+124,
+ 0xf.fffffp+124,
+ 0xf.fffffp+124,
+ INF,
+ false,
+ 0xf.fffff7ffffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff7ffffff8p+124,
+ 0xf.fffff8p+124,
+ false,
+ 0xf.fffff7fffffffffp+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff7fffffffffp+124,
+ 0xf.fffff8p+124,
+ false,
+ 0xf.fffff7fffffffffp+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff7fffffffffp+124,
+ 0xf.fffff8p+124,
+ false,
+ 0xf.fffff7fffffffffffffffffffcp+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff7fffffffffffffffffffcp+124,
+ 0xf.fffff8p+124,
+ false,
+ 0xf.fffff7fffffffffffffffffffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff7fffffffffffffffffffff8p+124,
+ 0xf.fffff8p+124),
+ TEST ("340282356779733661637539395458142568448",
+ false,
+ 0xf.fffffp+124,
+ INF,
+ 0xf.fffffp+124,
+ INF,
+ true,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ true,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ true,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ true,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ true,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124),
+ TEST ("340282356779733661637539395458142568448.001",
+ false,
+ 0xf.fffffp+124,
+ INF,
+ 0xf.fffffp+124,
+ INF,
+ false,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff80000008p+124,
+ false,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff8000000001p+124,
+ false,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff8000000001p+124,
+ false,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff800000000000000000004p+124,
+ false,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff8p+124,
+ 0xf.fffff80000000000000000000008p+124),
+ TEST ("-340282356779733661637539395458142568447.999",
+ false,
+ -INF,
+ -0xf.fffffp+124,
+ -0xf.fffffp+124,
+ -0xf.fffffp+124,
+ false,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff7ffffff8p+124,
+ -0xf.fffff7ffffff8p+124,
+ false,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff7fffffffffp+124,
+ -0xf.fffff7fffffffffp+124,
+ false,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff7fffffffffp+124,
+ -0xf.fffff7fffffffffp+124,
+ false,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff7fffffffffffffffffffcp+124,
+ -0xf.fffff7fffffffffffffffffffcp+124,
+ false,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff7fffffffffffffffffffff8p+124,
+ -0xf.fffff7fffffffffffffffffffff8p+124),
+ TEST ("-340282356779733661637539395458142568448",
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffp+124,
+ -0xf.fffffp+124,
+ true,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ true,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ true,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ true,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ true,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124),
+ TEST ("-340282356779733661637539395458142568448.001",
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffp+124,
+ -0xf.fffffp+124,
+ false,
+ -0xf.fffff80000008p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ false,
+ -0xf.fffff8000000001p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ false,
+ -0xf.fffff8000000001p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ false,
+ -0xf.fffff800000000000000000004p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ false,
+ -0xf.fffff80000000000000000000008p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124,
+ -0xf.fffff8p+124),
+ TEST ("179769313486231580793728971405303415079934132710037826936173"
+ "778980444968292764750946649017977587207096330286416692887910"
+ "946555547851940402630657488671505820681908902000708383676273"
+ "854845817711531764475730270069855571366959622842914819860834"
+ "936475292719074168444365510704342711559699508093042880177904"
+ "174497791.999",
+ false,
+ 0xf.fffffp+124,
+ INF,
+ 0xf.fffffp+124,
+ INF,
+ false,
+ 0xf.ffffffffffff8p+1020,
+ 0xf.ffffffffffff8p+1020,
+ 0xf.ffffffffffff8p+1020,
+ INF,
+ false,
+ 0xf.ffffffffffffbffp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffbffp+1020,
+ 0xf.ffffffffffffcp+1020,
+ false,
+ 0xf.ffffffffffffbffp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffbffp+1020,
+ 0xf.ffffffffffffcp+1020,
+ false,
+ 0xf.ffffffffffffbffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffbffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ false,
+ 0xf.ffffffffffffbffffffffffffff8p+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffbffffffffffffff8p+1020,
+ 0xf.ffffffffffffcp+1020),
+ TEST ("179769313486231580793728971405303415079934132710037826936173"
+ "778980444968292764750946649017977587207096330286416692887910"
+ "946555547851940402630657488671505820681908902000708383676273"
+ "854845817711531764475730270069855571366959622842914819860834"
+ "936475292719074168444365510704342711559699508093042880177904"
+ "174497792",
+ false,
+ 0xf.fffffp+124,
+ INF,
+ 0xf.fffffp+124,
+ INF,
+ false,
+ 0xf.ffffffffffff8p+1020,
+ INF,
+ 0xf.ffffffffffff8p+1020,
+ INF,
+ true,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ true,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ false,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ true,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020),
+ TEST ("179769313486231580793728971405303415079934132710037826936173"
+ "778980444968292764750946649017977587207096330286416692887910"
+ "946555547851940402630657488671505820681908902000708383676273"
+ "854845817711531764475730270069855571366959622842914819860834"
+ "936475292719074168444365510704342711559699508093042880177904"
+ "174497792.001",
+ false,
+ 0xf.fffffp+124,
+ INF,
+ 0xf.fffffp+124,
+ INF,
+ false,
+ 0xf.ffffffffffff8p+1020,
+ INF,
+ 0xf.ffffffffffff8p+1020,
+ INF,
+ false,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffc01p+1020,
+ false,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffc01p+1020,
+ false,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffc0000000000004p+1020,
+ false,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffcp+1020,
+ 0xf.ffffffffffffc000000000000008p+1020),
+ TEST ("-17976931348623158079372897140530341507993413271003782693617"
+ "377898044496829276475094664901797758720709633028641669288791"
+ "094655554785194040263065748867150582068190890200070838367627"
+ "385484581771153176447573027006985557136695962284291481986083"
+ "493647529271907416844436551070434271155969950809304288017790"
+ "4174497791.999",
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffp+124,
+ -0xf.fffffp+124,
+ false,
+ -INF,
+ -0xf.ffffffffffff8p+1020,
+ -0xf.ffffffffffff8p+1020,
+ -0xf.ffffffffffff8p+1020,
+ false,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffbffp+1020,
+ -0xf.ffffffffffffbffp+1020,
+ false,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffbffp+1020,
+ -0xf.ffffffffffffbffp+1020,
+ false,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffbffffffffffffcp+1020,
+ -0xf.ffffffffffffbffffffffffffcp+1020,
+ false,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffbffffffffffffff8p+1020,
+ -0xf.ffffffffffffbffffffffffffff8p+1020),
+ TEST ("-17976931348623158079372897140530341507993413271003782693617"
+ "377898044496829276475094664901797758720709633028641669288791"
+ "094655554785194040263065748867150582068190890200070838367627"
+ "385484581771153176447573027006985557136695962284291481986083"
+ "493647529271907416844436551070434271155969950809304288017790"
+ "4174497792",
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffp+124,
+ -0xf.fffffp+124,
+ false,
+ -INF,
+ -INF,
+ -0xf.ffffffffffff8p+1020,
+ -0xf.ffffffffffff8p+1020,
+ true,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ true,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ false,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ true,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020),
+ TEST ("-17976931348623158079372897140530341507993413271003782693617"
+ "377898044496829276475094664901797758720709633028641669288791"
+ "094655554785194040263065748867150582068190890200070838367627"
+ "385484581771153176447573027006985557136695962284291481986083"
+ "493647529271907416844436551070434271155969950809304288017790"
+ "4174497792.001",
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffp+124,
+ -0xf.fffffp+124,
+ false,
+ -INF,
+ -INF,
+ -0xf.ffffffffffff8p+1020,
+ -0xf.ffffffffffff8p+1020,
+ false,
+ -0xf.ffffffffffffc01p+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ false,
+ -0xf.ffffffffffffc01p+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ false,
+ -0xf.ffffffffffffc0000000000004p+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ false,
+ -0xf.ffffffffffffc000000000000008p+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020,
+ -0xf.ffffffffffffcp+1020),
+ TEST ("118973149535723176505351158982948866796625400469556721895649"
+ "927756249918185172720476044944290457046138433056764616744328"
+ "666255526748948793023632513609765434237723241753648908036202"
+ "958495124648560574092817813661123067421904850038181180520787"
+ "720310726881239888580817051703268776757919551260442611296993"
+ "969730906497042135737359373754818979106457807539652027804156"
+ "491987771033211787185996492320631117543475322122625353433719"
+ "930462950413766867781210335973022293561007134342532563356262"
+ "609267460063335819387905541393759243547993474715549691352074"
+ "891450084783459970660481689991674771307443551458551137274603"
+ "094678907537177579699931235422786658780337099286207273033150"
+ "295133847635735008945346069635452157254692607776538304457707"
+ "598289220004738023060594798392660507455937428888763514661408"
+ "758068906506527143720723156203739676372818578090840614216621"
+ "704787774611256823213431325634056809505691175988424606654072"
+ "823115950827627377808673574181547198668714142143234447550206"
+ "269197545774263993130119778810659043621312707109068433886162"
+ "877222844491518930341896313561238988520360803607534987178305"
+ "043520937299838173444083502027340452162582038296009574808809"
+ "658742434897860755961343752419543802653239216337103370292742"
+ "935497502474626454559729017094560234867236701379230234809843"
+ "263739640909561388493227725171983531003154799850580375254640"
+ "686684370650275318316632539920970969803838872914424760535111"
+ "444864748847573042963569291679400178896696862026500700279826"
+ "635302471702206627303799047632971460017199544567373231610376"
+ "256879987134317934150014443436145710546137924490489525241523"
+ "018271239906743645663976778059895127442517397682525944430951"
+ "907648109952479454685655581652571021331761401038962049122047"
+ "111009185757383743827811254014770944602713378187451095200132"
+ "611700632386420792585207954137064426995712656449343534120120"
+ "770857498813673742586478583964512406030930704197486727636333"
+ "837001863610516286928300891774383071105022919314408502968809"
+ "463848377324668014115592383521324785361676372582468085716775"
+ "183709078048790084022838728361454734650904480489014369184979"
+ "256497738392744524915616501449487520501300124861778269881261"
+ "335544037735715125808986359728419859776521586683035924100574"
+ "850554368935873803132428446524362913648833348768663733118103"
+ "918959060412499201797234385239260504905744357611987327994540"
+ "083286019952793692265006211633524675976369938866409689573287"
+ "599490442761701229217689614343727392339547174221615984024864"
+ "635625680108391566720681134647098412863051374760613506003971"
+ "759070209697293081442875903240426975910170967179075646317814"
+ "394978762382183679266247724762405284284971833355044962214065"
+ "895558105408175131247181971272672247996246595857705695208092"
+ "816044125822560989770526261449460733912621692806952140652061"
+ "911968824328747339453822511902787546522099225623311147726504"
+ "972617425102845212076162056723650625826928778132002074035405"
+ "250631109426611640681070927283430486232053929420514345435713"
+ "131387967949326001734866894273047449417824913738789829732833"
+ "683358900903818016968127085077418070951770702999663693968324"
+ "004781728763310108379440442854174041581191669623267749855519"
+ "774427387794278666183504498843857475877442235608736818515722"
+ "862733587905866015455830953591207040129558473662150426884726"
+ "759522376583586317425575669726781893104752341432891868770513"
+ "406836036136374264038296610854599454591170582569741798904328"
+ "676755131072831974295435585611673171096113833795735888591844"
+ "569864166955969416680807491722688418115891753669917660968752"
+ "228842669182040018336152355940915579955628386232949747891257"
+ "526145783057949776122896048841308261113063674538553146663451"
+ "574384023903569848640351704415703922683108552880537081027404"
+ "397775617608412295293311763789489900990611859125572525530349"
+ "278319943261304784125553748811339225969956465404836696490782"
+ "500903694674135036899321686023782466034636817818347651623601"
+ "663129318574761269352028560641266614840108083315301260274558"
+ "575087296910384815285134460531715154639604115052348665171547"
+ "251609075784863196403541944155425166776423403472211742139313"
+ "210299896884252707306862499895115691675551238140467142819537"
+ "867343414276518703858928008759955391140729958278175965217739"
+ "826511218924463113077693598006228365514899236789515147503266"
+ "616268809617626228164916917150602464494142485507467876173251"
+ "398398846807079309227567538802476335624194115637802439400050"
+ "221934368975949846684026462252790745597563393487879954351820"
+ "652138303761879543933808642920064500206512003954563931569820"
+ "114768348051593629274325149906343853129692245386396887281599"
+ "735312588117968646270517005121997466606469447530616465384255"
+ "826304380842850779833108567141643769616400809617173972138187"
+ "711971431230616321035038259922624655396612597024040812967444"
+ "207673594478417900666764580589685104809363813759667069693701"
+ "069921295791929938093722225050956280798177934138468414654728"
+ "631498256418191041953123619406060363406390776140155709737059"
+ "125898120366007955506160309553860446596202876233728025871625"
+ "578031503869424406179027994752890226443351619365453243328968"
+ "8740976918527.999",
+ false,
+ 0xf.fffffp+124,
+ INF,
+ 0xf.fffffp+124,
+ INF,
+ false,
+ 0xf.ffffffffffff8p+1020,
+ INF,
+ 0xf.ffffffffffff8p+1020,
+ INF,
+ false,
+ 0xf.fffffffffffffffp+16380,
+ 0xf.fffffffffffffffp+16380,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ false,
+ 0xf.fffffffffffffffp+16380,
+ 0xf.fffffffffffffffp+16380,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ false,
+ 0xf.fffffffffffffffffffffffffcp+1020,
+ INF,
+ 0xf.fffffffffffffffffffffffffcp+1020,
+ INF,
+ false,
+ 0xf.fffffffffffffff7fffffffffff8p+16380,
+ 0xf.fffffffffffffff8p+16380,
+ 0xf.fffffffffffffff7fffffffffff8p+16380,
+ 0xf.fffffffffffffff8p+16380),
+ TEST ("118973149535723176505351158982948866796625400469556721895649"
+ "927756249918185172720476044944290457046138433056764616744328"
+ "666255526748948793023632513609765434237723241753648908036202"
+ "958495124648560574092817813661123067421904850038181180520787"
+ "720310726881239888580817051703268776757919551260442611296993"
+ "969730906497042135737359373754818979106457807539652027804156"
+ "491987771033211787185996492320631117543475322122625353433719"
+ "930462950413766867781210335973022293561007134342532563356262"
+ "609267460063335819387905541393759243547993474715549691352074"
+ "891450084783459970660481689991674771307443551458551137274603"
+ "094678907537177579699931235422786658780337099286207273033150"
+ "295133847635735008945346069635452157254692607776538304457707"
+ "598289220004738023060594798392660507455937428888763514661408"
+ "758068906506527143720723156203739676372818578090840614216621"
+ "704787774611256823213431325634056809505691175988424606654072"
+ "823115950827627377808673574181547198668714142143234447550206"
+ "269197545774263993130119778810659043621312707109068433886162"
+ "877222844491518930341896313561238988520360803607534987178305"
+ "043520937299838173444083502027340452162582038296009574808809"
+ "658742434897860755961343752419543802653239216337103370292742"
+ "935497502474626454559729017094560234867236701379230234809843"
+ "263739640909561388493227725171983531003154799850580375254640"
+ "686684370650275318316632539920970969803838872914424760535111"
+ "444864748847573042963569291679400178896696862026500700279826"
+ "635302471702206627303799047632971460017199544567373231610376"
+ "256879987134317934150014443436145710546137924490489525241523"
+ "018271239906743645663976778059895127442517397682525944430951"
+ "907648109952479454685655581652571021331761401038962049122047"
+ "111009185757383743827811254014770944602713378187451095200132"
+ "611700632386420792585207954137064426995712656449343534120120"
+ "770857498813673742586478583964512406030930704197486727636333"
+ "837001863610516286928300891774383071105022919314408502968809"
+ "463848377324668014115592383521324785361676372582468085716775"
+ "183709078048790084022838728361454734650904480489014369184979"
+ "256497738392744524915616501449487520501300124861778269881261"
+ "335544037735715125808986359728419859776521586683035924100574"
+ "850554368935873803132428446524362913648833348768663733118103"
+ "918959060412499201797234385239260504905744357611987327994540"
+ "083286019952793692265006211633524675976369938866409689573287"
+ "599490442761701229217689614343727392339547174221615984024864"
+ "635625680108391566720681134647098412863051374760613506003971"
+ "759070209697293081442875903240426975910170967179075646317814"
+ "394978762382183679266247724762405284284971833355044962214065"
+ "895558105408175131247181971272672247996246595857705695208092"
+ "816044125822560989770526261449460733912621692806952140652061"
+ "911968824328747339453822511902787546522099225623311147726504"
+ "972617425102845212076162056723650625826928778132002074035405"
+ "250631109426611640681070927283430486232053929420514345435713"
+ "131387967949326001734866894273047449417824913738789829732833"
+ "683358900903818016968127085077418070951770702999663693968324"
+ "004781728763310108379440442854174041581191669623267749855519"
+ "774427387794278666183504498843857475877442235608736818515722"
+ "862733587905866015455830953591207040129558473662150426884726"
+ "759522376583586317425575669726781893104752341432891868770513"
+ "406836036136374264038296610854599454591170582569741798904328"
+ "676755131072831974295435585611673171096113833795735888591844"
+ "569864166955969416680807491722688418115891753669917660968752"
+ "228842669182040018336152355940915579955628386232949747891257"
+ "526145783057949776122896048841308261113063674538553146663451"
+ "574384023903569848640351704415703922683108552880537081027404"
+ "397775617608412295293311763789489900990611859125572525530349"
+ "278319943261304784125553748811339225969956465404836696490782"
+ "500903694674135036899321686023782466034636817818347651623601"
+ "663129318574761269352028560641266614840108083315301260274558"
+ "575087296910384815285134460531715154639604115052348665171547"
+ "251609075784863196403541944155425166776423403472211742139313"
+ "210299896884252707306862499895115691675551238140467142819537"
+ "867343414276518703858928008759955391140729958278175965217739"
+ "826511218924463113077693598006228365514899236789515147503266"
+ "616268809617626228164916917150602464494142485507467876173251"
+ "398398846807079309227567538802476335624194115637802439400050"
+ "221934368975949846684026462252790745597563393487879954351820"
+ "652138303761879543933808642920064500206512003954563931569820"
+ "114768348051593629274325149906343853129692245386396887281599"
+ "735312588117968646270517005121997466606469447530616465384255"
+ "826304380842850779833108567141643769616400809617173972138187"
+ "711971431230616321035038259922624655396612597024040812967444"
+ "207673594478417900666764580589685104809363813759667069693701"
+ "069921295791929938093722225050956280798177934138468414654728"
+ "631498256418191041953123619406060363406390776140155709737059"
+ "125898120366007955506160309553860446596202876233728025871625"
+ "578031503869424406179027994752890226443351619365453243328968"
+ "8740976918528",
+ false,
+ 0xf.fffffp+124,
+ INF,
+ 0xf.fffffp+124,
+ INF,
+ false,
+ 0xf.ffffffffffff8p+1020,
+ INF,
+ 0xf.ffffffffffff8p+1020,
+ INF,
+ false,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ false,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ false,
+ 0xf.fffffffffffffffffffffffffcp+1020,
+ INF,
+ 0xf.fffffffffffffffffffffffffcp+1020,
+ INF,
+ true,
+ 0xf.fffffffffffffff8p+16380,
+ 0xf.fffffffffffffff8p+16380,
+ 0xf.fffffffffffffff8p+16380,
+ 0xf.fffffffffffffff8p+16380),
+ TEST ("118973149535723176505351158982948866796625400469556721895649"
+ "927756249918185172720476044944290457046138433056764616744328"
+ "666255526748948793023632513609765434237723241753648908036202"
+ "958495124648560574092817813661123067421904850038181180520787"
+ "720310726881239888580817051703268776757919551260442611296993"
+ "969730906497042135737359373754818979106457807539652027804156"
+ "491987771033211787185996492320631117543475322122625353433719"
+ "930462950413766867781210335973022293561007134342532563356262"
+ "609267460063335819387905541393759243547993474715549691352074"
+ "891450084783459970660481689991674771307443551458551137274603"
+ "094678907537177579699931235422786658780337099286207273033150"
+ "295133847635735008945346069635452157254692607776538304457707"
+ "598289220004738023060594798392660507455937428888763514661408"
+ "758068906506527143720723156203739676372818578090840614216621"
+ "704787774611256823213431325634056809505691175988424606654072"
+ "823115950827627377808673574181547198668714142143234447550206"
+ "269197545774263993130119778810659043621312707109068433886162"
+ "877222844491518930341896313561238988520360803607534987178305"
+ "043520937299838173444083502027340452162582038296009574808809"
+ "658742434897860755961343752419543802653239216337103370292742"
+ "935497502474626454559729017094560234867236701379230234809843"
+ "263739640909561388493227725171983531003154799850580375254640"
+ "686684370650275318316632539920970969803838872914424760535111"
+ "444864748847573042963569291679400178896696862026500700279826"
+ "635302471702206627303799047632971460017199544567373231610376"
+ "256879987134317934150014443436145710546137924490489525241523"
+ "018271239906743645663976778059895127442517397682525944430951"
+ "907648109952479454685655581652571021331761401038962049122047"
+ "111009185757383743827811254014770944602713378187451095200132"
+ "611700632386420792585207954137064426995712656449343534120120"
+ "770857498813673742586478583964512406030930704197486727636333"
+ "837001863610516286928300891774383071105022919314408502968809"
+ "463848377324668014115592383521324785361676372582468085716775"
+ "183709078048790084022838728361454734650904480489014369184979"
+ "256497738392744524915616501449487520501300124861778269881261"
+ "335544037735715125808986359728419859776521586683035924100574"
+ "850554368935873803132428446524362913648833348768663733118103"
+ "918959060412499201797234385239260504905744357611987327994540"
+ "083286019952793692265006211633524675976369938866409689573287"
+ "599490442761701229217689614343727392339547174221615984024864"
+ "635625680108391566720681134647098412863051374760613506003971"
+ "759070209697293081442875903240426975910170967179075646317814"
+ "394978762382183679266247724762405284284971833355044962214065"
+ "895558105408175131247181971272672247996246595857705695208092"
+ "816044125822560989770526261449460733912621692806952140652061"
+ "911968824328747339453822511902787546522099225623311147726504"
+ "972617425102845212076162056723650625826928778132002074035405"
+ "250631109426611640681070927283430486232053929420514345435713"
+ "131387967949326001734866894273047449417824913738789829732833"
+ "683358900903818016968127085077418070951770702999663693968324"
+ "004781728763310108379440442854174041581191669623267749855519"
+ "774427387794278666183504498843857475877442235608736818515722"
+ "862733587905866015455830953591207040129558473662150426884726"
+ "759522376583586317425575669726781893104752341432891868770513"
+ "406836036136374264038296610854599454591170582569741798904328"
+ "676755131072831974295435585611673171096113833795735888591844"
+ "569864166955969416680807491722688418115891753669917660968752"
+ "228842669182040018336152355940915579955628386232949747891257"
+ "526145783057949776122896048841308261113063674538553146663451"
+ "574384023903569848640351704415703922683108552880537081027404"
+ "397775617608412295293311763789489900990611859125572525530349"
+ "278319943261304784125553748811339225969956465404836696490782"
+ "500903694674135036899321686023782466034636817818347651623601"
+ "663129318574761269352028560641266614840108083315301260274558"
+ "575087296910384815285134460531715154639604115052348665171547"
+ "251609075784863196403541944155425166776423403472211742139313"
+ "210299896884252707306862499895115691675551238140467142819537"
+ "867343414276518703858928008759955391140729958278175965217739"
+ "826511218924463113077693598006228365514899236789515147503266"
+ "616268809617626228164916917150602464494142485507467876173251"
+ "398398846807079309227567538802476335624194115637802439400050"
+ "221934368975949846684026462252790745597563393487879954351820"
+ "652138303761879543933808642920064500206512003954563931569820"
+ "114768348051593629274325149906343853129692245386396887281599"
+ "735312588117968646270517005121997466606469447530616465384255"
+ "826304380842850779833108567141643769616400809617173972138187"
+ "711971431230616321035038259922624655396612597024040812967444"
+ "207673594478417900666764580589685104809363813759667069693701"
+ "069921295791929938093722225050956280798177934138468414654728"
+ "631498256418191041953123619406060363406390776140155709737059"
+ "125898120366007955506160309553860446596202876233728025871625"
+ "578031503869424406179027994752890226443351619365453243328968"
+ "8740976918528.001",
+ false,
+ 0xf.fffffp+124,
+ INF,
+ 0xf.fffffp+124,
+ INF,
+ false,
+ 0xf.ffffffffffff8p+1020,
+ INF,
+ 0xf.ffffffffffff8p+1020,
+ INF,
+ false,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ false,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ false,
+ 0xf.fffffffffffffffffffffffffcp+1020,
+ INF,
+ 0xf.fffffffffffffffffffffffffcp+1020,
+ INF,
+ false,
+ 0xf.fffffffffffffff8p+16380,
+ 0xf.fffffffffffffff8p+16380,
+ 0xf.fffffffffffffff8p+16380,
+ 0xf.fffffffffffffff8000000000008p+16380),
+ TEST ("-11897314953572317650535115898294886679662540046955672189564"
+ "992775624991818517272047604494429045704613843305676461674432"
+ "866625552674894879302363251360976543423772324175364890803620"
+ "295849512464856057409281781366112306742190485003818118052078"
+ "772031072688123988858081705170326877675791955126044261129699"
+ "396973090649704213573735937375481897910645780753965202780415"
+ "649198777103321178718599649232063111754347532212262535343371"
+ "993046295041376686778121033597302229356100713434253256335626"
+ "260926746006333581938790554139375924354799347471554969135207"
+ "489145008478345997066048168999167477130744355145855113727460"
+ "309467890753717757969993123542278665878033709928620727303315"
+ "029513384763573500894534606963545215725469260777653830445770"
+ "759828922000473802306059479839266050745593742888876351466140"
+ "875806890650652714372072315620373967637281857809084061421662"
+ "170478777461125682321343132563405680950569117598842460665407"
+ "282311595082762737780867357418154719866871414214323444755020"
+ "626919754577426399313011977881065904362131270710906843388616"
+ "287722284449151893034189631356123898852036080360753498717830"
+ "504352093729983817344408350202734045216258203829600957480880"
+ "965874243489786075596134375241954380265323921633710337029274"
+ "293549750247462645455972901709456023486723670137923023480984"
+ "326373964090956138849322772517198353100315479985058037525464"
+ "068668437065027531831663253992097096980383887291442476053511"
+ "144486474884757304296356929167940017889669686202650070027982"
+ "663530247170220662730379904763297146001719954456737323161037"
+ "625687998713431793415001444343614571054613792449048952524152"
+ "301827123990674364566397677805989512744251739768252594443095"
+ "190764810995247945468565558165257102133176140103896204912204"
+ "711100918575738374382781125401477094460271337818745109520013"
+ "261170063238642079258520795413706442699571265644934353412012"
+ "077085749881367374258647858396451240603093070419748672763633"
+ "383700186361051628692830089177438307110502291931440850296880"
+ "946384837732466801411559238352132478536167637258246808571677"
+ "518370907804879008402283872836145473465090448048901436918497"
+ "925649773839274452491561650144948752050130012486177826988126"
+ "133554403773571512580898635972841985977652158668303592410057"
+ "485055436893587380313242844652436291364883334876866373311810"
+ "391895906041249920179723438523926050490574435761198732799454"
+ "008328601995279369226500621163352467597636993886640968957328"
+ "759949044276170122921768961434372739233954717422161598402486"
+ "463562568010839156672068113464709841286305137476061350600397"
+ "175907020969729308144287590324042697591017096717907564631781"
+ "439497876238218367926624772476240528428497183335504496221406"
+ "589555810540817513124718197127267224799624659585770569520809"
+ "281604412582256098977052626144946073391262169280695214065206"
+ "191196882432874733945382251190278754652209922562331114772650"
+ "497261742510284521207616205672365062582692877813200207403540"
+ "525063110942661164068107092728343048623205392942051434543571"
+ "313138796794932600173486689427304744941782491373878982973283"
+ "368335890090381801696812708507741807095177070299966369396832"
+ "400478172876331010837944044285417404158119166962326774985551"
+ "977442738779427866618350449884385747587744223560873681851572"
+ "286273358790586601545583095359120704012955847366215042688472"
+ "675952237658358631742557566972678189310475234143289186877051"
+ "340683603613637426403829661085459945459117058256974179890432"
+ "867675513107283197429543558561167317109611383379573588859184"
+ "456986416695596941668080749172268841811589175366991766096875"
+ "222884266918204001833615235594091557995562838623294974789125"
+ "752614578305794977612289604884130826111306367453855314666345"
+ "157438402390356984864035170441570392268310855288053708102740"
+ "439777561760841229529331176378948990099061185912557252553034"
+ "927831994326130478412555374881133922596995646540483669649078"
+ "250090369467413503689932168602378246603463681781834765162360"
+ "166312931857476126935202856064126661484010808331530126027455"
+ "857508729691038481528513446053171515463960411505234866517154"
+ "725160907578486319640354194415542516677642340347221174213931"
+ "321029989688425270730686249989511569167555123814046714281953"
+ "786734341427651870385892800875995539114072995827817596521773"
+ "982651121892446311307769359800622836551489923678951514750326"
+ "661626880961762622816491691715060246449414248550746787617325"
+ "139839884680707930922756753880247633562419411563780243940005"
+ "022193436897594984668402646225279074559756339348787995435182"
+ "065213830376187954393380864292006450020651200395456393156982"
+ "011476834805159362927432514990634385312969224538639688728159"
+ "973531258811796864627051700512199746660646944753061646538425"
+ "582630438084285077983310856714164376961640080961717397213818"
+ "771197143123061632103503825992262465539661259702404081296744"
+ "420767359447841790066676458058968510480936381375966706969370"
+ "106992129579192993809372222505095628079817793413846841465472"
+ "863149825641819104195312361940606036340639077614015570973705"
+ "912589812036600795550616030955386044659620287623372802587162"
+ "557803150386942440617902799475289022644335161936545324332896"
+ "88740976918527.999",
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffp+124,
+ -0xf.fffffp+124,
+ false,
+ -INF,
+ -INF,
+ -0xf.ffffffffffff8p+1020,
+ -0xf.ffffffffffff8p+1020,
+ false,
+ -INF,
+ -0xf.fffffffffffffffp+16380,
+ -0xf.fffffffffffffffp+16380,
+ -0xf.fffffffffffffffp+16380,
+ false,
+ -INF,
+ -0xf.fffffffffffffffp+16380,
+ -0xf.fffffffffffffffp+16380,
+ -0xf.fffffffffffffffp+16380,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffffffffffffcp+1020,
+ -0xf.fffffffffffffffffffffffffcp+1020,
+ false,
+ -0xf.fffffffffffffff8p+16380,
+ -0xf.fffffffffffffff8p+16380,
+ -0xf.fffffffffffffff7fffffffffff8p+16380,
+ -0xf.fffffffffffffff7fffffffffff8p+16380),
+ TEST ("-11897314953572317650535115898294886679662540046955672189564"
+ "992775624991818517272047604494429045704613843305676461674432"
+ "866625552674894879302363251360976543423772324175364890803620"
+ "295849512464856057409281781366112306742190485003818118052078"
+ "772031072688123988858081705170326877675791955126044261129699"
+ "396973090649704213573735937375481897910645780753965202780415"
+ "649198777103321178718599649232063111754347532212262535343371"
+ "993046295041376686778121033597302229356100713434253256335626"
+ "260926746006333581938790554139375924354799347471554969135207"
+ "489145008478345997066048168999167477130744355145855113727460"
+ "309467890753717757969993123542278665878033709928620727303315"
+ "029513384763573500894534606963545215725469260777653830445770"
+ "759828922000473802306059479839266050745593742888876351466140"
+ "875806890650652714372072315620373967637281857809084061421662"
+ "170478777461125682321343132563405680950569117598842460665407"
+ "282311595082762737780867357418154719866871414214323444755020"
+ "626919754577426399313011977881065904362131270710906843388616"
+ "287722284449151893034189631356123898852036080360753498717830"
+ "504352093729983817344408350202734045216258203829600957480880"
+ "965874243489786075596134375241954380265323921633710337029274"
+ "293549750247462645455972901709456023486723670137923023480984"
+ "326373964090956138849322772517198353100315479985058037525464"
+ "068668437065027531831663253992097096980383887291442476053511"
+ "144486474884757304296356929167940017889669686202650070027982"
+ "663530247170220662730379904763297146001719954456737323161037"
+ "625687998713431793415001444343614571054613792449048952524152"
+ "301827123990674364566397677805989512744251739768252594443095"
+ "190764810995247945468565558165257102133176140103896204912204"
+ "711100918575738374382781125401477094460271337818745109520013"
+ "261170063238642079258520795413706442699571265644934353412012"
+ "077085749881367374258647858396451240603093070419748672763633"
+ "383700186361051628692830089177438307110502291931440850296880"
+ "946384837732466801411559238352132478536167637258246808571677"
+ "518370907804879008402283872836145473465090448048901436918497"
+ "925649773839274452491561650144948752050130012486177826988126"
+ "133554403773571512580898635972841985977652158668303592410057"
+ "485055436893587380313242844652436291364883334876866373311810"
+ "391895906041249920179723438523926050490574435761198732799454"
+ "008328601995279369226500621163352467597636993886640968957328"
+ "759949044276170122921768961434372739233954717422161598402486"
+ "463562568010839156672068113464709841286305137476061350600397"
+ "175907020969729308144287590324042697591017096717907564631781"
+ "439497876238218367926624772476240528428497183335504496221406"
+ "589555810540817513124718197127267224799624659585770569520809"
+ "281604412582256098977052626144946073391262169280695214065206"
+ "191196882432874733945382251190278754652209922562331114772650"
+ "497261742510284521207616205672365062582692877813200207403540"
+ "525063110942661164068107092728343048623205392942051434543571"
+ "313138796794932600173486689427304744941782491373878982973283"
+ "368335890090381801696812708507741807095177070299966369396832"
+ "400478172876331010837944044285417404158119166962326774985551"
+ "977442738779427866618350449884385747587744223560873681851572"
+ "286273358790586601545583095359120704012955847366215042688472"
+ "675952237658358631742557566972678189310475234143289186877051"
+ "340683603613637426403829661085459945459117058256974179890432"
+ "867675513107283197429543558561167317109611383379573588859184"
+ "456986416695596941668080749172268841811589175366991766096875"
+ "222884266918204001833615235594091557995562838623294974789125"
+ "752614578305794977612289604884130826111306367453855314666345"
+ "157438402390356984864035170441570392268310855288053708102740"
+ "439777561760841229529331176378948990099061185912557252553034"
+ "927831994326130478412555374881133922596995646540483669649078"
+ "250090369467413503689932168602378246603463681781834765162360"
+ "166312931857476126935202856064126661484010808331530126027455"
+ "857508729691038481528513446053171515463960411505234866517154"
+ "725160907578486319640354194415542516677642340347221174213931"
+ "321029989688425270730686249989511569167555123814046714281953"
+ "786734341427651870385892800875995539114072995827817596521773"
+ "982651121892446311307769359800622836551489923678951514750326"
+ "661626880961762622816491691715060246449414248550746787617325"
+ "139839884680707930922756753880247633562419411563780243940005"
+ "022193436897594984668402646225279074559756339348787995435182"
+ "065213830376187954393380864292006450020651200395456393156982"
+ "011476834805159362927432514990634385312969224538639688728159"
+ "973531258811796864627051700512199746660646944753061646538425"
+ "582630438084285077983310856714164376961640080961717397213818"
+ "771197143123061632103503825992262465539661259702404081296744"
+ "420767359447841790066676458058968510480936381375966706969370"
+ "106992129579192993809372222505095628079817793413846841465472"
+ "863149825641819104195312361940606036340639077614015570973705"
+ "912589812036600795550616030955386044659620287623372802587162"
+ "557803150386942440617902799475289022644335161936545324332896"
+ "88740976918528",
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffp+124,
+ -0xf.fffffp+124,
+ false,
+ -INF,
+ -INF,
+ -0xf.ffffffffffff8p+1020,
+ -0xf.ffffffffffff8p+1020,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffp+16380,
+ -0xf.fffffffffffffffp+16380,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffp+16380,
+ -0xf.fffffffffffffffp+16380,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffffffffffffcp+1020,
+ -0xf.fffffffffffffffffffffffffcp+1020,
+ true,
+ -0xf.fffffffffffffff8p+16380,
+ -0xf.fffffffffffffff8p+16380,
+ -0xf.fffffffffffffff8p+16380,
+ -0xf.fffffffffffffff8p+16380),
+ TEST ("-11897314953572317650535115898294886679662540046955672189564"
+ "992775624991818517272047604494429045704613843305676461674432"
+ "866625552674894879302363251360976543423772324175364890803620"
+ "295849512464856057409281781366112306742190485003818118052078"
+ "772031072688123988858081705170326877675791955126044261129699"
+ "396973090649704213573735937375481897910645780753965202780415"
+ "649198777103321178718599649232063111754347532212262535343371"
+ "993046295041376686778121033597302229356100713434253256335626"
+ "260926746006333581938790554139375924354799347471554969135207"
+ "489145008478345997066048168999167477130744355145855113727460"
+ "309467890753717757969993123542278665878033709928620727303315"
+ "029513384763573500894534606963545215725469260777653830445770"
+ "759828922000473802306059479839266050745593742888876351466140"
+ "875806890650652714372072315620373967637281857809084061421662"
+ "170478777461125682321343132563405680950569117598842460665407"
+ "282311595082762737780867357418154719866871414214323444755020"
+ "626919754577426399313011977881065904362131270710906843388616"
+ "287722284449151893034189631356123898852036080360753498717830"
+ "504352093729983817344408350202734045216258203829600957480880"
+ "965874243489786075596134375241954380265323921633710337029274"
+ "293549750247462645455972901709456023486723670137923023480984"
+ "326373964090956138849322772517198353100315479985058037525464"
+ "068668437065027531831663253992097096980383887291442476053511"
+ "144486474884757304296356929167940017889669686202650070027982"
+ "663530247170220662730379904763297146001719954456737323161037"
+ "625687998713431793415001444343614571054613792449048952524152"
+ "301827123990674364566397677805989512744251739768252594443095"
+ "190764810995247945468565558165257102133176140103896204912204"
+ "711100918575738374382781125401477094460271337818745109520013"
+ "261170063238642079258520795413706442699571265644934353412012"
+ "077085749881367374258647858396451240603093070419748672763633"
+ "383700186361051628692830089177438307110502291931440850296880"
+ "946384837732466801411559238352132478536167637258246808571677"
+ "518370907804879008402283872836145473465090448048901436918497"
+ "925649773839274452491561650144948752050130012486177826988126"
+ "133554403773571512580898635972841985977652158668303592410057"
+ "485055436893587380313242844652436291364883334876866373311810"
+ "391895906041249920179723438523926050490574435761198732799454"
+ "008328601995279369226500621163352467597636993886640968957328"
+ "759949044276170122921768961434372739233954717422161598402486"
+ "463562568010839156672068113464709841286305137476061350600397"
+ "175907020969729308144287590324042697591017096717907564631781"
+ "439497876238218367926624772476240528428497183335504496221406"
+ "589555810540817513124718197127267224799624659585770569520809"
+ "281604412582256098977052626144946073391262169280695214065206"
+ "191196882432874733945382251190278754652209922562331114772650"
+ "497261742510284521207616205672365062582692877813200207403540"
+ "525063110942661164068107092728343048623205392942051434543571"
+ "313138796794932600173486689427304744941782491373878982973283"
+ "368335890090381801696812708507741807095177070299966369396832"
+ "400478172876331010837944044285417404158119166962326774985551"
+ "977442738779427866618350449884385747587744223560873681851572"
+ "286273358790586601545583095359120704012955847366215042688472"
+ "675952237658358631742557566972678189310475234143289186877051"
+ "340683603613637426403829661085459945459117058256974179890432"
+ "867675513107283197429543558561167317109611383379573588859184"
+ "456986416695596941668080749172268841811589175366991766096875"
+ "222884266918204001833615235594091557995562838623294974789125"
+ "752614578305794977612289604884130826111306367453855314666345"
+ "157438402390356984864035170441570392268310855288053708102740"
+ "439777561760841229529331176378948990099061185912557252553034"
+ "927831994326130478412555374881133922596995646540483669649078"
+ "250090369467413503689932168602378246603463681781834765162360"
+ "166312931857476126935202856064126661484010808331530126027455"
+ "857508729691038481528513446053171515463960411505234866517154"
+ "725160907578486319640354194415542516677642340347221174213931"
+ "321029989688425270730686249989511569167555123814046714281953"
+ "786734341427651870385892800875995539114072995827817596521773"
+ "982651121892446311307769359800622836551489923678951514750326"
+ "661626880961762622816491691715060246449414248550746787617325"
+ "139839884680707930922756753880247633562419411563780243940005"
+ "022193436897594984668402646225279074559756339348787995435182"
+ "065213830376187954393380864292006450020651200395456393156982"
+ "011476834805159362927432514990634385312969224538639688728159"
+ "973531258811796864627051700512199746660646944753061646538425"
+ "582630438084285077983310856714164376961640080961717397213818"
+ "771197143123061632103503825992262465539661259702404081296744"
+ "420767359447841790066676458058968510480936381375966706969370"
+ "106992129579192993809372222505095628079817793413846841465472"
+ "863149825641819104195312361940606036340639077614015570973705"
+ "912589812036600795550616030955386044659620287623372802587162"
+ "557803150386942440617902799475289022644335161936545324332896"
+ "88740976918528.001",
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffp+124,
+ -0xf.fffffp+124,
+ false,
+ -INF,
+ -INF,
+ -0xf.ffffffffffff8p+1020,
+ -0xf.ffffffffffff8p+1020,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffp+16380,
+ -0xf.fffffffffffffffp+16380,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffp+16380,
+ -0xf.fffffffffffffffp+16380,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffffffffffffcp+1020,
+ -0xf.fffffffffffffffffffffffffcp+1020,
+ false,
+ -0xf.fffffffffffffff8000000000008p+16380,
+ -0xf.fffffffffffffff8p+16380,
+ -0xf.fffffffffffffff8p+16380,
+ -0xf.fffffffffffffff8p+16380),
+ TEST ("118973149535723176508575932662800707347995686986910214150118"
+ "685272271246896789803961473130416053705672050873552479421805"
+ "932646640744124594447361172514341324846716679654551308018400"
+ "452551246797021031695590308415421099521962856162050274568841"
+ "297915828747574343774874752902176710049525787625138678906010"
+ "048638212027057374683542842282633896097240913572043788690878"
+ "561421008447838407815393303366617352859876685151925036335142"
+ "606462825839541908847139311166770091872983498508632067665424"
+ "131663456011801988221011933744533095583591952713287509471572"
+ "005635584655570174753698625195967118200265238753375268656404"
+ "300638718932246773699829720984119713851462400809295266529707"
+ "450603039675996477317034685632764277790214944500590950459817"
+ "905458649624723235138950801408157339866516893477731877579183"
+ "713595679581558427625325833939652897845282019149923069371763"
+ "621014587926698827182969408373803807712292191282429102445352"
+ "493434039402290243933941906906661090602900960765874258303002"
+ "994639315656152078708796474719793763077934223746582725715380"
+ "546621026022818892467551940977566283266498758568504813830755"
+ "715585325649227824857891916443381390920079346240984072859876"
+ "394789650127468861490822526766717770136680743866932662343305"
+ "821821344306240809967537078707691232937387041140557168161956"
+ "672595323950666742010786584275766171661791973302251394804664"
+ "351065107886557299707326005651230394674710597929211000345040"
+ "748992483614253006562424867893567074606589931788062200063807"
+ "336740036940230215831403322125165368742446805152078682411506"
+ "081843753974005583111391605547148303480887461773984314393817"
+ "233328426227146997925421743280885595916487699461777590949432"
+ "536021389649845214065322016198143547250143861460313408300535"
+ "800647014276175548485543791298383644643679669618879907720347"
+ "361578030001247419574448359597988425487829219851305162204925"
+ "876422580754230478244492592334149461342828532046897137732862"
+ "560405101567370570895662663174689131741739602970845694214086"
+ "383402465037069569640956912385125748139813888875258203003486"
+ "978747055202810394072908580324008598756993885667142200558137"
+ "216665049755676940757442911860295559656788759871904662758651"
+ "106796978788783386988295123326864580419821595430891867179378"
+ "372968821128698879468814267529461494723425453808822356093436"
+ "114567635804621183162768389034017821036515461700163537265334"
+ "837042272659885702600247792917728828912373907035369136531164"
+ "551871575024551077026080114197652598224677403885378544255851"
+ "452142889211152237506343909351748731538683443195842912801950"
+ "740929058503113127929421291089844021925400931905939216271347"
+ "501989193058654389516377770771439860033940981826669939750630"
+ "966060749188986231404992238674933998516958950824840538996637"
+ "227947236848099456610159878061379742621311380927234118601003"
+ "068752002060437285024623575047782086630607224900910789188204"
+ "422115342157245494745974521832782208601602710639261482504706"
+ "793704189474198047840288064399210243702202724597107455534275"
+ "321401119382263147115748905050195256886082040192083380490209"
+ "648570353905656303876661710430922155024620842080323610266391"
+ "819853291160589645614945256684769911320943457402697573094119"
+ "430125589389298495428377185239916427991844172165080029177729"
+ "625180644077484441695092005844026411665118679537869781924378"
+ "377060887769389297625907410934020531742739577183152327119791"
+ "567636713426904553654134937766951789571845662564530364234831"
+ "655818811851573018210173773037253988893680153247404060131255"
+ "432297982534770778617218088583998040670598195597843579610890"
+ "315316606725381521608825464438386306376596459107591134507541"
+ "153403024199191222328259713530472683187873517955642380703639"
+ "029816037096049042094836437281075965243968431839386959736989"
+ "889027924230006904683050305965712585804355337311372959487108"
+ "794286031594805559334414767793211932142402860019029250966461"
+ "933621763149049802791695077716375242516443825235146860078555"
+ "453142397983479144560015010889077242726183149587493050950967"
+ "941488752366197740591478464591650201477772717579831983405962"
+ "171742164889284586217913115136227964861078958766284010901639"
+ "781256012341028188155836968476480842715858962105341815444164"
+ "696766584018508513610260777540911573496315580383328678958350"
+ "148157337222619548467971967434956296433870815461340134721800"
+ "205755114983399523323106573720732056659216468891205124203527"
+ "449961814733926916757607468806003312492414061695431041238453"
+ "023522795690830184799840657478014435335788410588338795921829"
+ "674102072285495410088727730494748054715270026371111466557692"
+ "092596172401951206117443077191868585496116051853795368595736"
+ "003882511620497061598923985774687093334185939744167238203676"
+ "453052472980823976562293117120372063945943890666325365061961"
+ "022928215929070357135085816756816486043117613837876554929621"
+ "856269743752885605649447338817178927896144473776360438797900"
+ "366212779802747593450564030114752479071739585723270865632758"
+ "495434839556211713523098602573445161475191311400514062427097"
+ "780117858230840648695846140902244217544683559565818359212130"
+ "972233447491583165728635513802591543441145939539353470970452"
+ "5536550715391.999",
+ false,
+ 0xf.fffffp+124,
+ INF,
+ 0xf.fffffp+124,
+ INF,
+ false,
+ 0xf.ffffffffffff8p+1020,
+ INF,
+ 0xf.ffffffffffff8p+1020,
+ INF,
+ false,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ false,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ false,
+ 0xf.fffffffffffffffffffffffffcp+1020,
+ INF,
+ 0xf.fffffffffffffffffffffffffcp+1020,
+ INF,
+ false,
+ 0xf.fffffffffffffffffffffffffff8p+16380,
+ 0xf.fffffffffffffffffffffffffff8p+16380,
+ 0xf.fffffffffffffffffffffffffff8p+16380,
+ INF),
+ TEST ("118973149535723176508575932662800707347995686986910214150118"
+ "685272271246896789803961473130416053705672050873552479421805"
+ "932646640744124594447361172514341324846716679654551308018400"
+ "452551246797021031695590308415421099521962856162050274568841"
+ "297915828747574343774874752902176710049525787625138678906010"
+ "048638212027057374683542842282633896097240913572043788690878"
+ "561421008447838407815393303366617352859876685151925036335142"
+ "606462825839541908847139311166770091872983498508632067665424"
+ "131663456011801988221011933744533095583591952713287509471572"
+ "005635584655570174753698625195967118200265238753375268656404"
+ "300638718932246773699829720984119713851462400809295266529707"
+ "450603039675996477317034685632764277790214944500590950459817"
+ "905458649624723235138950801408157339866516893477731877579183"
+ "713595679581558427625325833939652897845282019149923069371763"
+ "621014587926698827182969408373803807712292191282429102445352"
+ "493434039402290243933941906906661090602900960765874258303002"
+ "994639315656152078708796474719793763077934223746582725715380"
+ "546621026022818892467551940977566283266498758568504813830755"
+ "715585325649227824857891916443381390920079346240984072859876"
+ "394789650127468861490822526766717770136680743866932662343305"
+ "821821344306240809967537078707691232937387041140557168161956"
+ "672595323950666742010786584275766171661791973302251394804664"
+ "351065107886557299707326005651230394674710597929211000345040"
+ "748992483614253006562424867893567074606589931788062200063807"
+ "336740036940230215831403322125165368742446805152078682411506"
+ "081843753974005583111391605547148303480887461773984314393817"
+ "233328426227146997925421743280885595916487699461777590949432"
+ "536021389649845214065322016198143547250143861460313408300535"
+ "800647014276175548485543791298383644643679669618879907720347"
+ "361578030001247419574448359597988425487829219851305162204925"
+ "876422580754230478244492592334149461342828532046897137732862"
+ "560405101567370570895662663174689131741739602970845694214086"
+ "383402465037069569640956912385125748139813888875258203003486"
+ "978747055202810394072908580324008598756993885667142200558137"
+ "216665049755676940757442911860295559656788759871904662758651"
+ "106796978788783386988295123326864580419821595430891867179378"
+ "372968821128698879468814267529461494723425453808822356093436"
+ "114567635804621183162768389034017821036515461700163537265334"
+ "837042272659885702600247792917728828912373907035369136531164"
+ "551871575024551077026080114197652598224677403885378544255851"
+ "452142889211152237506343909351748731538683443195842912801950"
+ "740929058503113127929421291089844021925400931905939216271347"
+ "501989193058654389516377770771439860033940981826669939750630"
+ "966060749188986231404992238674933998516958950824840538996637"
+ "227947236848099456610159878061379742621311380927234118601003"
+ "068752002060437285024623575047782086630607224900910789188204"
+ "422115342157245494745974521832782208601602710639261482504706"
+ "793704189474198047840288064399210243702202724597107455534275"
+ "321401119382263147115748905050195256886082040192083380490209"
+ "648570353905656303876661710430922155024620842080323610266391"
+ "819853291160589645614945256684769911320943457402697573094119"
+ "430125589389298495428377185239916427991844172165080029177729"
+ "625180644077484441695092005844026411665118679537869781924378"
+ "377060887769389297625907410934020531742739577183152327119791"
+ "567636713426904553654134937766951789571845662564530364234831"
+ "655818811851573018210173773037253988893680153247404060131255"
+ "432297982534770778617218088583998040670598195597843579610890"
+ "315316606725381521608825464438386306376596459107591134507541"
+ "153403024199191222328259713530472683187873517955642380703639"
+ "029816037096049042094836437281075965243968431839386959736989"
+ "889027924230006904683050305965712585804355337311372959487108"
+ "794286031594805559334414767793211932142402860019029250966461"
+ "933621763149049802791695077716375242516443825235146860078555"
+ "453142397983479144560015010889077242726183149587493050950967"
+ "941488752366197740591478464591650201477772717579831983405962"
+ "171742164889284586217913115136227964861078958766284010901639"
+ "781256012341028188155836968476480842715858962105341815444164"
+ "696766584018508513610260777540911573496315580383328678958350"
+ "148157337222619548467971967434956296433870815461340134721800"
+ "205755114983399523323106573720732056659216468891205124203527"
+ "449961814733926916757607468806003312492414061695431041238453"
+ "023522795690830184799840657478014435335788410588338795921829"
+ "674102072285495410088727730494748054715270026371111466557692"
+ "092596172401951206117443077191868585496116051853795368595736"
+ "003882511620497061598923985774687093334185939744167238203676"
+ "453052472980823976562293117120372063945943890666325365061961"
+ "022928215929070357135085816756816486043117613837876554929621"
+ "856269743752885605649447338817178927896144473776360438797900"
+ "366212779802747593450564030114752479071739585723270865632758"
+ "495434839556211713523098602573445161475191311400514062427097"
+ "780117858230840648695846140902244217544683559565818359212130"
+ "972233447491583165728635513802591543441145939539353470970452"
+ "5536550715392",
+ false,
+ 0xf.fffffp+124,
+ INF,
+ 0xf.fffffp+124,
+ INF,
+ false,
+ 0xf.ffffffffffff8p+1020,
+ INF,
+ 0xf.ffffffffffff8p+1020,
+ INF,
+ false,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ false,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ false,
+ 0xf.fffffffffffffffffffffffffcp+1020,
+ INF,
+ 0xf.fffffffffffffffffffffffffcp+1020,
+ INF,
+ false,
+ 0xf.fffffffffffffffffffffffffff8p+16380,
+ INF,
+ 0xf.fffffffffffffffffffffffffff8p+16380,
+ INF),
+ TEST ("118973149535723176508575932662800707347995686986910214150118"
+ "685272271246896789803961473130416053705672050873552479421805"
+ "932646640744124594447361172514341324846716679654551308018400"
+ "452551246797021031695590308415421099521962856162050274568841"
+ "297915828747574343774874752902176710049525787625138678906010"
+ "048638212027057374683542842282633896097240913572043788690878"
+ "561421008447838407815393303366617352859876685151925036335142"
+ "606462825839541908847139311166770091872983498508632067665424"
+ "131663456011801988221011933744533095583591952713287509471572"
+ "005635584655570174753698625195967118200265238753375268656404"
+ "300638718932246773699829720984119713851462400809295266529707"
+ "450603039675996477317034685632764277790214944500590950459817"
+ "905458649624723235138950801408157339866516893477731877579183"
+ "713595679581558427625325833939652897845282019149923069371763"
+ "621014587926698827182969408373803807712292191282429102445352"
+ "493434039402290243933941906906661090602900960765874258303002"
+ "994639315656152078708796474719793763077934223746582725715380"
+ "546621026022818892467551940977566283266498758568504813830755"
+ "715585325649227824857891916443381390920079346240984072859876"
+ "394789650127468861490822526766717770136680743866932662343305"
+ "821821344306240809967537078707691232937387041140557168161956"
+ "672595323950666742010786584275766171661791973302251394804664"
+ "351065107886557299707326005651230394674710597929211000345040"
+ "748992483614253006562424867893567074606589931788062200063807"
+ "336740036940230215831403322125165368742446805152078682411506"
+ "081843753974005583111391605547148303480887461773984314393817"
+ "233328426227146997925421743280885595916487699461777590949432"
+ "536021389649845214065322016198143547250143861460313408300535"
+ "800647014276175548485543791298383644643679669618879907720347"
+ "361578030001247419574448359597988425487829219851305162204925"
+ "876422580754230478244492592334149461342828532046897137732862"
+ "560405101567370570895662663174689131741739602970845694214086"
+ "383402465037069569640956912385125748139813888875258203003486"
+ "978747055202810394072908580324008598756993885667142200558137"
+ "216665049755676940757442911860295559656788759871904662758651"
+ "106796978788783386988295123326864580419821595430891867179378"
+ "372968821128698879468814267529461494723425453808822356093436"
+ "114567635804621183162768389034017821036515461700163537265334"
+ "837042272659885702600247792917728828912373907035369136531164"
+ "551871575024551077026080114197652598224677403885378544255851"
+ "452142889211152237506343909351748731538683443195842912801950"
+ "740929058503113127929421291089844021925400931905939216271347"
+ "501989193058654389516377770771439860033940981826669939750630"
+ "966060749188986231404992238674933998516958950824840538996637"
+ "227947236848099456610159878061379742621311380927234118601003"
+ "068752002060437285024623575047782086630607224900910789188204"
+ "422115342157245494745974521832782208601602710639261482504706"
+ "793704189474198047840288064399210243702202724597107455534275"
+ "321401119382263147115748905050195256886082040192083380490209"
+ "648570353905656303876661710430922155024620842080323610266391"
+ "819853291160589645614945256684769911320943457402697573094119"
+ "430125589389298495428377185239916427991844172165080029177729"
+ "625180644077484441695092005844026411665118679537869781924378"
+ "377060887769389297625907410934020531742739577183152327119791"
+ "567636713426904553654134937766951789571845662564530364234831"
+ "655818811851573018210173773037253988893680153247404060131255"
+ "432297982534770778617218088583998040670598195597843579610890"
+ "315316606725381521608825464438386306376596459107591134507541"
+ "153403024199191222328259713530472683187873517955642380703639"
+ "029816037096049042094836437281075965243968431839386959736989"
+ "889027924230006904683050305965712585804355337311372959487108"
+ "794286031594805559334414767793211932142402860019029250966461"
+ "933621763149049802791695077716375242516443825235146860078555"
+ "453142397983479144560015010889077242726183149587493050950967"
+ "941488752366197740591478464591650201477772717579831983405962"
+ "171742164889284586217913115136227964861078958766284010901639"
+ "781256012341028188155836968476480842715858962105341815444164"
+ "696766584018508513610260777540911573496315580383328678958350"
+ "148157337222619548467971967434956296433870815461340134721800"
+ "205755114983399523323106573720732056659216468891205124203527"
+ "449961814733926916757607468806003312492414061695431041238453"
+ "023522795690830184799840657478014435335788410588338795921829"
+ "674102072285495410088727730494748054715270026371111466557692"
+ "092596172401951206117443077191868585496116051853795368595736"
+ "003882511620497061598923985774687093334185939744167238203676"
+ "453052472980823976562293117120372063945943890666325365061961"
+ "022928215929070357135085816756816486043117613837876554929621"
+ "856269743752885605649447338817178927896144473776360438797900"
+ "366212779802747593450564030114752479071739585723270865632758"
+ "495434839556211713523098602573445161475191311400514062427097"
+ "780117858230840648695846140902244217544683559565818359212130"
+ "972233447491583165728635513802591543441145939539353470970452"
+ "5536550715392.001",
+ false,
+ 0xf.fffffp+124,
+ INF,
+ 0xf.fffffp+124,
+ INF,
+ false,
+ 0xf.ffffffffffff8p+1020,
+ INF,
+ 0xf.ffffffffffff8p+1020,
+ INF,
+ false,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ false,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ 0xf.fffffffffffffffp+16380,
+ INF,
+ false,
+ 0xf.fffffffffffffffffffffffffcp+1020,
+ INF,
+ 0xf.fffffffffffffffffffffffffcp+1020,
+ INF,
+ false,
+ 0xf.fffffffffffffffffffffffffff8p+16380,
+ INF,
+ 0xf.fffffffffffffffffffffffffff8p+16380,
+ INF),
+ TEST ("-11897314953572317650857593266280070734799568698691021415011"
+ "868527227124689678980396147313041605370567205087355247942180"
+ "593264664074412459444736117251434132484671667965455130801840"
+ "045255124679702103169559030841542109952196285616205027456884"
+ "129791582874757434377487475290217671004952578762513867890601"
+ "004863821202705737468354284228263389609724091357204378869087"
+ "856142100844783840781539330336661735285987668515192503633514"
+ "260646282583954190884713931116677009187298349850863206766542"
+ "413166345601180198822101193374453309558359195271328750947157"
+ "200563558465557017475369862519596711820026523875337526865640"
+ "430063871893224677369982972098411971385146240080929526652970"
+ "745060303967599647731703468563276427779021494450059095045981"
+ "790545864962472323513895080140815733986651689347773187757918"
+ "371359567958155842762532583393965289784528201914992306937176"
+ "362101458792669882718296940837380380771229219128242910244535"
+ "249343403940229024393394190690666109060290096076587425830300"
+ "299463931565615207870879647471979376307793422374658272571538"
+ "054662102602281889246755194097756628326649875856850481383075"
+ "571558532564922782485789191644338139092007934624098407285987"
+ "639478965012746886149082252676671777013668074386693266234330"
+ "582182134430624080996753707870769123293738704114055716816195"
+ "667259532395066674201078658427576617166179197330225139480466"
+ "435106510788655729970732600565123039467471059792921100034504"
+ "074899248361425300656242486789356707460658993178806220006380"
+ "733674003694023021583140332212516536874244680515207868241150"
+ "608184375397400558311139160554714830348088746177398431439381"
+ "723332842622714699792542174328088559591648769946177759094943"
+ "253602138964984521406532201619814354725014386146031340830053"
+ "580064701427617554848554379129838364464367966961887990772034"
+ "736157803000124741957444835959798842548782921985130516220492"
+ "587642258075423047824449259233414946134282853204689713773286"
+ "256040510156737057089566266317468913174173960297084569421408"
+ "638340246503706956964095691238512574813981388887525820300348"
+ "697874705520281039407290858032400859875699388566714220055813"
+ "721666504975567694075744291186029555965678875987190466275865"
+ "110679697878878338698829512332686458041982159543089186717937"
+ "837296882112869887946881426752946149472342545380882235609343"
+ "611456763580462118316276838903401782103651546170016353726533"
+ "483704227265988570260024779291772882891237390703536913653116"
+ "455187157502455107702608011419765259822467740388537854425585"
+ "145214288921115223750634390935174873153868344319584291280195"
+ "074092905850311312792942129108984402192540093190593921627134"
+ "750198919305865438951637777077143986003394098182666993975063"
+ "096606074918898623140499223867493399851695895082484053899663"
+ "722794723684809945661015987806137974262131138092723411860100"
+ "306875200206043728502462357504778208663060722490091078918820"
+ "442211534215724549474597452183278220860160271063926148250470"
+ "679370418947419804784028806439921024370220272459710745553427"
+ "532140111938226314711574890505019525688608204019208338049020"
+ "964857035390565630387666171043092215502462084208032361026639"
+ "181985329116058964561494525668476991132094345740269757309411"
+ "943012558938929849542837718523991642799184417216508002917772"
+ "962518064407748444169509200584402641166511867953786978192437"
+ "837706088776938929762590741093402053174273957718315232711979"
+ "156763671342690455365413493776695178957184566256453036423483"
+ "165581881185157301821017377303725398889368015324740406013125"
+ "543229798253477077861721808858399804067059819559784357961089"
+ "031531660672538152160882546443838630637659645910759113450754"
+ "115340302419919122232825971353047268318787351795564238070363"
+ "902981603709604904209483643728107596524396843183938695973698"
+ "988902792423000690468305030596571258580435533731137295948710"
+ "879428603159480555933441476779321193214240286001902925096646"
+ "193362176314904980279169507771637524251644382523514686007855"
+ "545314239798347914456001501088907724272618314958749305095096"
+ "794148875236619774059147846459165020147777271757983198340596"
+ "217174216488928458621791311513622796486107895876628401090163"
+ "978125601234102818815583696847648084271585896210534181544416"
+ "469676658401850851361026077754091157349631558038332867895835"
+ "014815733722261954846797196743495629643387081546134013472180"
+ "020575511498339952332310657372073205665921646889120512420352"
+ "744996181473392691675760746880600331249241406169543104123845"
+ "302352279569083018479984065747801443533578841058833879592182"
+ "967410207228549541008872773049474805471527002637111146655769"
+ "209259617240195120611744307719186858549611605185379536859573"
+ "600388251162049706159892398577468709333418593974416723820367"
+ "645305247298082397656229311712037206394594389066632536506196"
+ "102292821592907035713508581675681648604311761383787655492962"
+ "185626974375288560564944733881717892789614447377636043879790"
+ "036621277980274759345056403011475247907173958572327086563275"
+ "849543483955621171352309860257344516147519131140051406242709"
+ "778011785823084064869584614090224421754468355956581835921213"
+ "097223344749158316572863551380259154344114593953935347097045"
+ "25536550715391.999",
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffp+124,
+ -0xf.fffffp+124,
+ false,
+ -INF,
+ -INF,
+ -0xf.ffffffffffff8p+1020,
+ -0xf.ffffffffffff8p+1020,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffp+16380,
+ -0xf.fffffffffffffffp+16380,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffp+16380,
+ -0xf.fffffffffffffffp+16380,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffffffffffffcp+1020,
+ -0xf.fffffffffffffffffffffffffcp+1020,
+ false,
+ -INF,
+ -0xf.fffffffffffffffffffffffffff8p+16380,
+ -0xf.fffffffffffffffffffffffffff8p+16380,
+ -0xf.fffffffffffffffffffffffffff8p+16380),
+ TEST ("-11897314953572317650857593266280070734799568698691021415011"
+ "868527227124689678980396147313041605370567205087355247942180"
+ "593264664074412459444736117251434132484671667965455130801840"
+ "045255124679702103169559030841542109952196285616205027456884"
+ "129791582874757434377487475290217671004952578762513867890601"
+ "004863821202705737468354284228263389609724091357204378869087"
+ "856142100844783840781539330336661735285987668515192503633514"
+ "260646282583954190884713931116677009187298349850863206766542"
+ "413166345601180198822101193374453309558359195271328750947157"
+ "200563558465557017475369862519596711820026523875337526865640"
+ "430063871893224677369982972098411971385146240080929526652970"
+ "745060303967599647731703468563276427779021494450059095045981"
+ "790545864962472323513895080140815733986651689347773187757918"
+ "371359567958155842762532583393965289784528201914992306937176"
+ "362101458792669882718296940837380380771229219128242910244535"
+ "249343403940229024393394190690666109060290096076587425830300"
+ "299463931565615207870879647471979376307793422374658272571538"
+ "054662102602281889246755194097756628326649875856850481383075"
+ "571558532564922782485789191644338139092007934624098407285987"
+ "639478965012746886149082252676671777013668074386693266234330"
+ "582182134430624080996753707870769123293738704114055716816195"
+ "667259532395066674201078658427576617166179197330225139480466"
+ "435106510788655729970732600565123039467471059792921100034504"
+ "074899248361425300656242486789356707460658993178806220006380"
+ "733674003694023021583140332212516536874244680515207868241150"
+ "608184375397400558311139160554714830348088746177398431439381"
+ "723332842622714699792542174328088559591648769946177759094943"
+ "253602138964984521406532201619814354725014386146031340830053"
+ "580064701427617554848554379129838364464367966961887990772034"
+ "736157803000124741957444835959798842548782921985130516220492"
+ "587642258075423047824449259233414946134282853204689713773286"
+ "256040510156737057089566266317468913174173960297084569421408"
+ "638340246503706956964095691238512574813981388887525820300348"
+ "697874705520281039407290858032400859875699388566714220055813"
+ "721666504975567694075744291186029555965678875987190466275865"
+ "110679697878878338698829512332686458041982159543089186717937"
+ "837296882112869887946881426752946149472342545380882235609343"
+ "611456763580462118316276838903401782103651546170016353726533"
+ "483704227265988570260024779291772882891237390703536913653116"
+ "455187157502455107702608011419765259822467740388537854425585"
+ "145214288921115223750634390935174873153868344319584291280195"
+ "074092905850311312792942129108984402192540093190593921627134"
+ "750198919305865438951637777077143986003394098182666993975063"
+ "096606074918898623140499223867493399851695895082484053899663"
+ "722794723684809945661015987806137974262131138092723411860100"
+ "306875200206043728502462357504778208663060722490091078918820"
+ "442211534215724549474597452183278220860160271063926148250470"
+ "679370418947419804784028806439921024370220272459710745553427"
+ "532140111938226314711574890505019525688608204019208338049020"
+ "964857035390565630387666171043092215502462084208032361026639"
+ "181985329116058964561494525668476991132094345740269757309411"
+ "943012558938929849542837718523991642799184417216508002917772"
+ "962518064407748444169509200584402641166511867953786978192437"
+ "837706088776938929762590741093402053174273957718315232711979"
+ "156763671342690455365413493776695178957184566256453036423483"
+ "165581881185157301821017377303725398889368015324740406013125"
+ "543229798253477077861721808858399804067059819559784357961089"
+ "031531660672538152160882546443838630637659645910759113450754"
+ "115340302419919122232825971353047268318787351795564238070363"
+ "902981603709604904209483643728107596524396843183938695973698"
+ "988902792423000690468305030596571258580435533731137295948710"
+ "879428603159480555933441476779321193214240286001902925096646"
+ "193362176314904980279169507771637524251644382523514686007855"
+ "545314239798347914456001501088907724272618314958749305095096"
+ "794148875236619774059147846459165020147777271757983198340596"
+ "217174216488928458621791311513622796486107895876628401090163"
+ "978125601234102818815583696847648084271585896210534181544416"
+ "469676658401850851361026077754091157349631558038332867895835"
+ "014815733722261954846797196743495629643387081546134013472180"
+ "020575511498339952332310657372073205665921646889120512420352"
+ "744996181473392691675760746880600331249241406169543104123845"
+ "302352279569083018479984065747801443533578841058833879592182"
+ "967410207228549541008872773049474805471527002637111146655769"
+ "209259617240195120611744307719186858549611605185379536859573"
+ "600388251162049706159892398577468709333418593974416723820367"
+ "645305247298082397656229311712037206394594389066632536506196"
+ "102292821592907035713508581675681648604311761383787655492962"
+ "185626974375288560564944733881717892789614447377636043879790"
+ "036621277980274759345056403011475247907173958572327086563275"
+ "849543483955621171352309860257344516147519131140051406242709"
+ "778011785823084064869584614090224421754468355956581835921213"
+ "097223344749158316572863551380259154344114593953935347097045"
+ "25536550715392",
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffp+124,
+ -0xf.fffffp+124,
+ false,
+ -INF,
+ -INF,
+ -0xf.ffffffffffff8p+1020,
+ -0xf.ffffffffffff8p+1020,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffp+16380,
+ -0xf.fffffffffffffffp+16380,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffp+16380,
+ -0xf.fffffffffffffffp+16380,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffffffffffffcp+1020,
+ -0xf.fffffffffffffffffffffffffcp+1020,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffffffffffffff8p+16380,
+ -0xf.fffffffffffffffffffffffffff8p+16380),
+ TEST ("-11897314953572317650857593266280070734799568698691021415011"
+ "868527227124689678980396147313041605370567205087355247942180"
+ "593264664074412459444736117251434132484671667965455130801840"
+ "045255124679702103169559030841542109952196285616205027456884"
+ "129791582874757434377487475290217671004952578762513867890601"
+ "004863821202705737468354284228263389609724091357204378869087"
+ "856142100844783840781539330336661735285987668515192503633514"
+ "260646282583954190884713931116677009187298349850863206766542"
+ "413166345601180198822101193374453309558359195271328750947157"
+ "200563558465557017475369862519596711820026523875337526865640"
+ "430063871893224677369982972098411971385146240080929526652970"
+ "745060303967599647731703468563276427779021494450059095045981"
+ "790545864962472323513895080140815733986651689347773187757918"
+ "371359567958155842762532583393965289784528201914992306937176"
+ "362101458792669882718296940837380380771229219128242910244535"
+ "249343403940229024393394190690666109060290096076587425830300"
+ "299463931565615207870879647471979376307793422374658272571538"
+ "054662102602281889246755194097756628326649875856850481383075"
+ "571558532564922782485789191644338139092007934624098407285987"
+ "639478965012746886149082252676671777013668074386693266234330"
+ "582182134430624080996753707870769123293738704114055716816195"
+ "667259532395066674201078658427576617166179197330225139480466"
+ "435106510788655729970732600565123039467471059792921100034504"
+ "074899248361425300656242486789356707460658993178806220006380"
+ "733674003694023021583140332212516536874244680515207868241150"
+ "608184375397400558311139160554714830348088746177398431439381"
+ "723332842622714699792542174328088559591648769946177759094943"
+ "253602138964984521406532201619814354725014386146031340830053"
+ "580064701427617554848554379129838364464367966961887990772034"
+ "736157803000124741957444835959798842548782921985130516220492"
+ "587642258075423047824449259233414946134282853204689713773286"
+ "256040510156737057089566266317468913174173960297084569421408"
+ "638340246503706956964095691238512574813981388887525820300348"
+ "697874705520281039407290858032400859875699388566714220055813"
+ "721666504975567694075744291186029555965678875987190466275865"
+ "110679697878878338698829512332686458041982159543089186717937"
+ "837296882112869887946881426752946149472342545380882235609343"
+ "611456763580462118316276838903401782103651546170016353726533"
+ "483704227265988570260024779291772882891237390703536913653116"
+ "455187157502455107702608011419765259822467740388537854425585"
+ "145214288921115223750634390935174873153868344319584291280195"
+ "074092905850311312792942129108984402192540093190593921627134"
+ "750198919305865438951637777077143986003394098182666993975063"
+ "096606074918898623140499223867493399851695895082484053899663"
+ "722794723684809945661015987806137974262131138092723411860100"
+ "306875200206043728502462357504778208663060722490091078918820"
+ "442211534215724549474597452183278220860160271063926148250470"
+ "679370418947419804784028806439921024370220272459710745553427"
+ "532140111938226314711574890505019525688608204019208338049020"
+ "964857035390565630387666171043092215502462084208032361026639"
+ "181985329116058964561494525668476991132094345740269757309411"
+ "943012558938929849542837718523991642799184417216508002917772"
+ "962518064407748444169509200584402641166511867953786978192437"
+ "837706088776938929762590741093402053174273957718315232711979"
+ "156763671342690455365413493776695178957184566256453036423483"
+ "165581881185157301821017377303725398889368015324740406013125"
+ "543229798253477077861721808858399804067059819559784357961089"
+ "031531660672538152160882546443838630637659645910759113450754"
+ "115340302419919122232825971353047268318787351795564238070363"
+ "902981603709604904209483643728107596524396843183938695973698"
+ "988902792423000690468305030596571258580435533731137295948710"
+ "879428603159480555933441476779321193214240286001902925096646"
+ "193362176314904980279169507771637524251644382523514686007855"
+ "545314239798347914456001501088907724272618314958749305095096"
+ "794148875236619774059147846459165020147777271757983198340596"
+ "217174216488928458621791311513622796486107895876628401090163"
+ "978125601234102818815583696847648084271585896210534181544416"
+ "469676658401850851361026077754091157349631558038332867895835"
+ "014815733722261954846797196743495629643387081546134013472180"
+ "020575511498339952332310657372073205665921646889120512420352"
+ "744996181473392691675760746880600331249241406169543104123845"
+ "302352279569083018479984065747801443533578841058833879592182"
+ "967410207228549541008872773049474805471527002637111146655769"
+ "209259617240195120611744307719186858549611605185379536859573"
+ "600388251162049706159892398577468709333418593974416723820367"
+ "645305247298082397656229311712037206394594389066632536506196"
+ "102292821592907035713508581675681648604311761383787655492962"
+ "185626974375288560564944733881717892789614447377636043879790"
+ "036621277980274759345056403011475247907173958572327086563275"
+ "849543483955621171352309860257344516147519131140051406242709"
+ "778011785823084064869584614090224421754468355956581835921213"
+ "097223344749158316572863551380259154344114593953935347097045"
+ "25536550715392.001",
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffp+124,
+ -0xf.fffffp+124,
+ false,
+ -INF,
+ -INF,
+ -0xf.ffffffffffff8p+1020,
+ -0xf.ffffffffffff8p+1020,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffp+16380,
+ -0xf.fffffffffffffffp+16380,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffp+16380,
+ -0xf.fffffffffffffffp+16380,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffffffffffffcp+1020,
+ -0xf.fffffffffffffffffffffffffcp+1020,
+ false,
+ -INF,
+ -INF,
+ -0xf.fffffffffffffffffffffffffff8p+16380,
+ -0xf.fffffffffffffffffffffffffff8p+16380),
+ TEST ("2.1019476964872256063855943749348741969203929128147736576356"
+ "0242583468662402879090222995728254318237304687499e-45",
+ false,
+ 0x8p-152,
+ 0x8p-152,
+ 0x8p-152,
+ 0x1p-148,
+ false,
+ 0xb.ffffffffffff8p-152,
+ 0xcp-152,
+ 0xb.ffffffffffff8p-152,
+ 0xcp-152,
+ false,
+ 0xb.fffffffffffffffp-152,
+ 0xcp-152,
+ 0xb.fffffffffffffffp-152,
+ 0xcp-152,
+ false,
+ 0xb.fffffffffffffffp-152,
+ 0xcp-152,
+ 0xb.fffffffffffffffp-152,
+ 0xcp-152,
+ false,
+ 0xb.fffffffffffffffffffffffffcp-152,
+ 0xcp-152,
+ 0xb.fffffffffffffffffffffffffcp-152,
+ 0xcp-152,
+ false,
+ 0xb.fffffffffffffffffffffffffff8p-152,
+ 0xcp-152,
+ 0xb.fffffffffffffffffffffffffff8p-152,
+ 0xcp-152),
+ TEST ("2.1019476964872256063855943749348741969203929128147736576356"
+ "02425834686624028790902229957282543182373046875e-45",
+ false,
+ 0x8p-152,
+ 0x1p-148,
+ 0x8p-152,
+ 0x1p-148,
+ true,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ true,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ true,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ true,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ true,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152),
+ TEST ("2.1019476964872256063855943749348741969203929128147736576356"
+ "0242583468662402879090222995728254318237304687501e-45",
+ false,
+ 0x8p-152,
+ 0x1p-148,
+ 0x8p-152,
+ 0x1p-148,
+ false,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ 0xc.0000000000008p-152,
+ false,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ 0xc.000000000000001p-152,
+ false,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ 0xc.000000000000001p-152,
+ false,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ 0xc.00000000000000000000000004p-152,
+ false,
+ 0xcp-152,
+ 0xcp-152,
+ 0xcp-152,
+ 0xc.0000000000000000000000000008p-152),
+ TEST ("-2.101947696487225606385594374934874196920392912814773657635"
+ "60242583468662402879090222995728254318237304687499e-45",
+ false,
+ -0x1p-148,
+ -0x8p-152,
+ -0x8p-152,
+ -0x8p-152,
+ false,
+ -0xcp-152,
+ -0xcp-152,
+ -0xb.ffffffffffff8p-152,
+ -0xb.ffffffffffff8p-152,
+ false,
+ -0xcp-152,
+ -0xcp-152,
+ -0xb.fffffffffffffffp-152,
+ -0xb.fffffffffffffffp-152,
+ false,
+ -0xcp-152,
+ -0xcp-152,
+ -0xb.fffffffffffffffp-152,
+ -0xb.fffffffffffffffp-152,
+ false,
+ -0xcp-152,
+ -0xcp-152,
+ -0xb.fffffffffffffffffffffffffcp-152,
+ -0xb.fffffffffffffffffffffffffcp-152,
+ false,
+ -0xcp-152,
+ -0xcp-152,
+ -0xb.fffffffffffffffffffffffffff8p-152,
+ -0xb.fffffffffffffffffffffffffff8p-152),
+ TEST ("-2.101947696487225606385594374934874196920392912814773657635"
+ "602425834686624028790902229957282543182373046875e-45",
+ false,
+ -0x1p-148,
+ -0x1p-148,
+ -0x8p-152,
+ -0x8p-152,
+ true,
+ -0xcp-152,
+ -0xcp-152,
+ -0xcp-152,
+ -0xcp-152,
+ true,
+ -0xcp-152,
+ -0xcp-152,
+ -0xcp-152,
+ -0xcp-152,
+ true,
+ -0xcp-152,
+ -0xcp-152,
+ -0xcp-152,
+ -0xcp-152,
+ true,
+ -0xcp-152,
+ -0xcp-152,
+ -0xcp-152,
+ -0xcp-152,
+ true,
+ -0xcp-152,
+ -0xcp-152,
+ -0xcp-152,
+ -0xcp-152),
+ TEST ("-2.101947696487225606385594374934874196920392912814773657635"
+ "60242583468662402879090222995728254318237304687501e-45",
+ false,
+ -0x1p-148,
+ -0x1p-148,
+ -0x8p-152,
+ -0x8p-152,
+ false,
+ -0xc.0000000000008p-152,
+ -0xcp-152,
+ -0xcp-152,
+ -0xcp-152,
+ false,
+ -0xc.000000000000001p-152,
+ -0xcp-152,
+ -0xcp-152,
+ -0xcp-152,
+ false,
+ -0xc.000000000000001p-152,
+ -0xcp-152,
+ -0xcp-152,
+ -0xcp-152,
+ false,
+ -0xc.00000000000000000000000004p-152,
+ -0xcp-152,
+ -0xcp-152,
+ -0xcp-152,
+ false,
+ -0xc.0000000000000000000000000008p-152,
+ -0xcp-152,
+ -0xcp-152,
+ -0xcp-152),
+ TEST ("3.5032461608120426773093239582247903282006548546912894293926"
+ "7070972447770671465150371659547090530395507812499e-45",
+ false,
+ 0x1p-148,
+ 0x1p-148,
+ 0x1p-148,
+ 0x1.8p-148,
+ false,
+ 0x1.3ffffffffffffp-148,
+ 0x1.4p-148,
+ 0x1.3ffffffffffffp-148,
+ 0x1.4p-148,
+ false,
+ 0x1.3ffffffffffffffep-148,
+ 0x1.4p-148,
+ 0x1.3ffffffffffffffep-148,
+ 0x1.4p-148,
+ false,
+ 0x1.3ffffffffffffffep-148,
+ 0x1.4p-148,
+ 0x1.3ffffffffffffffep-148,
+ 0x1.4p-148,
+ false,
+ 0x1.3fffffffffffffffffffffffff8p-148,
+ 0x1.4p-148,
+ 0x1.3fffffffffffffffffffffffff8p-148,
+ 0x1.4p-148,
+ false,
+ 0x1.3fffffffffffffffffffffffffffp-148,
+ 0x1.4p-148,
+ 0x1.3fffffffffffffffffffffffffffp-148,
+ 0x1.4p-148),
+ TEST ("3.5032461608120426773093239582247903282006548546912894293926"
+ "70709724477706714651503716595470905303955078125e-45",
+ false,
+ 0x1p-148,
+ 0x1p-148,
+ 0x1p-148,
+ 0x1.8p-148,
+ true,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ true,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ true,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ true,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ true,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4p-148),
+ TEST ("3.5032461608120426773093239582247903282006548546912894293926"
+ "7070972447770671465150371659547090530395507812501e-45",
+ false,
+ 0x1p-148,
+ 0x1.8p-148,
+ 0x1p-148,
+ 0x1.8p-148,
+ false,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4000000000001p-148,
+ false,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4000000000000002p-148,
+ false,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4000000000000002p-148,
+ false,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.400000000000000000000000008p-148,
+ false,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4p-148,
+ 0x1.4000000000000000000000000001p-148),
+ TEST ("-3.503246160812042677309323958224790328200654854691289429392"
+ "67070972447770671465150371659547090530395507812499e-45",
+ false,
+ -0x1.8p-148,
+ -0x1p-148,
+ -0x1p-148,
+ -0x1p-148,
+ false,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.3ffffffffffffp-148,
+ -0x1.3ffffffffffffp-148,
+ false,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.3ffffffffffffffep-148,
+ -0x1.3ffffffffffffffep-148,
+ false,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.3ffffffffffffffep-148,
+ -0x1.3ffffffffffffffep-148,
+ false,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.3fffffffffffffffffffffffff8p-148,
+ -0x1.3fffffffffffffffffffffffff8p-148,
+ false,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.3fffffffffffffffffffffffffffp-148,
+ -0x1.3fffffffffffffffffffffffffffp-148),
+ TEST ("-3.503246160812042677309323958224790328200654854691289429392"
+ "670709724477706714651503716595470905303955078125e-45",
+ false,
+ -0x1.8p-148,
+ -0x1p-148,
+ -0x1p-148,
+ -0x1p-148,
+ true,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ true,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ true,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ true,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ true,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.4p-148),
+ TEST ("-3.503246160812042677309323958224790328200654854691289429392"
+ "67070972447770671465150371659547090530395507812501e-45",
+ false,
+ -0x1.8p-148,
+ -0x1.8p-148,
+ -0x1p-148,
+ -0x1p-148,
+ false,
+ -0x1.4000000000001p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ false,
+ -0x1.4000000000000002p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ false,
+ -0x1.4000000000000002p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ false,
+ -0x1.400000000000000000000000008p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ false,
+ -0x1.4000000000000000000000000001p-148,
+ -0x1.4p-148,
+ -0x1.4p-148,
+ -0x1.4p-148),
+ TEST ("7.4109846876186981626485318930233205854758970392148714663837"
+ "852375101326090531312779794975454245398856969484704316857659"
+ "638998506553390969459816219401617281718945106978546710679176"
+ "872575177347315553307795408549809608457500958111373034747658"
+ "096871009590975442271004757307809711118935784838675653998783"
+ "503015228055934046593739791790738723868299395818481660169122"
+ "019456499931289798411362062484498678713572180352209017023903"
+ "285791732520220528974020802906854021606612375549983402671300"
+ "035812486479041385743401875520901590172592547146296175134159"
+ "774938718574737870961645638908718119841271673056017045493004"
+ "705269590165763776884908267986972573366521765567941072508764"
+ "337560846003984904972149117463085539556354188641513168478436"
+ "31308023759629577398300170898437499e-324",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x4p-1076,
+ 0x4p-1076,
+ 0x4p-1076,
+ 0x8p-1076,
+ false,
+ 0x5.fffffffffffffff8p-1076,
+ 0x6p-1076,
+ 0x5.fffffffffffffff8p-1076,
+ 0x6p-1076,
+ false,
+ 0x5.fffffffffffffff8p-1076,
+ 0x6p-1076,
+ 0x5.fffffffffffffff8p-1076,
+ 0x6p-1076,
+ false,
+ 0x4p-1076,
+ 0x4p-1076,
+ 0x4p-1076,
+ 0x8p-1076,
+ false,
+ 0x5.fffffffffffffffffffffffffffcp-1076,
+ 0x6p-1076,
+ 0x5.fffffffffffffffffffffffffffcp-1076,
+ 0x6p-1076),
+ TEST ("7.4109846876186981626485318930233205854758970392148714663837"
+ "852375101326090531312779794975454245398856969484704316857659"
+ "638998506553390969459816219401617281718945106978546710679176"
+ "872575177347315553307795408549809608457500958111373034747658"
+ "096871009590975442271004757307809711118935784838675653998783"
+ "503015228055934046593739791790738723868299395818481660169122"
+ "019456499931289798411362062484498678713572180352209017023903"
+ "285791732520220528974020802906854021606612375549983402671300"
+ "035812486479041385743401875520901590172592547146296175134159"
+ "774938718574737870961645638908718119841271673056017045493004"
+ "705269590165763776884908267986972573366521765567941072508764"
+ "337560846003984904972149117463085539556354188641513168478436"
+ "313080237596295773983001708984375e-324",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x4p-1076,
+ 0x8p-1076,
+ 0x4p-1076,
+ 0x8p-1076,
+ true,
+ 0x6p-1076,
+ 0x6p-1076,
+ 0x6p-1076,
+ 0x6p-1076,
+ true,
+ 0x6p-1076,
+ 0x6p-1076,
+ 0x6p-1076,
+ 0x6p-1076,
+ false,
+ 0x4p-1076,
+ 0x8p-1076,
+ 0x4p-1076,
+ 0x8p-1076,
+ true,
+ 0x6p-1076,
+ 0x6p-1076,
+ 0x6p-1076,
+ 0x6p-1076),
+ TEST ("7.4109846876186981626485318930233205854758970392148714663837"
+ "852375101326090531312779794975454245398856969484704316857659"
+ "638998506553390969459816219401617281718945106978546710679176"
+ "872575177347315553307795408549809608457500958111373034747658"
+ "096871009590975442271004757307809711118935784838675653998783"
+ "503015228055934046593739791790738723868299395818481660169122"
+ "019456499931289798411362062484498678713572180352209017023903"
+ "285791732520220528974020802906854021606612375549983402671300"
+ "035812486479041385743401875520901590172592547146296175134159"
+ "774938718574737870961645638908718119841271673056017045493004"
+ "705269590165763776884908267986972573366521765567941072508764"
+ "337560846003984904972149117463085539556354188641513168478436"
+ "31308023759629577398300170898437501e-324",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x4p-1076,
+ 0x8p-1076,
+ 0x4p-1076,
+ 0x8p-1076,
+ false,
+ 0x6p-1076,
+ 0x6p-1076,
+ 0x6p-1076,
+ 0x6.0000000000000008p-1076,
+ false,
+ 0x6p-1076,
+ 0x6p-1076,
+ 0x6p-1076,
+ 0x6.0000000000000008p-1076,
+ false,
+ 0x4p-1076,
+ 0x8p-1076,
+ 0x4p-1076,
+ 0x8p-1076,
+ false,
+ 0x6p-1076,
+ 0x6p-1076,
+ 0x6p-1076,
+ 0x6.0000000000000000000000000004p-1076),
+ TEST ("-7.410984687618698162648531893023320585475897039214871466383"
+ "785237510132609053131277979497545424539885696948470431685765"
+ "963899850655339096945981621940161728171894510697854671067917"
+ "687257517734731555330779540854980960845750095811137303474765"
+ "809687100959097544227100475730780971111893578483867565399878"
+ "350301522805593404659373979179073872386829939581848166016912"
+ "201945649993128979841136206248449867871357218035220901702390"
+ "328579173252022052897402080290685402160661237554998340267130"
+ "003581248647904138574340187552090159017259254714629617513415"
+ "977493871857473787096164563890871811984127167305601704549300"
+ "470526959016576377688490826798697257336652176556794107250876"
+ "433756084600398490497214911746308553955635418864151316847843"
+ "631308023759629577398300170898437499e-324",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x8p-1076,
+ -0x4p-1076,
+ -0x4p-1076,
+ -0x4p-1076,
+ false,
+ -0x6p-1076,
+ -0x6p-1076,
+ -0x5.fffffffffffffff8p-1076,
+ -0x5.fffffffffffffff8p-1076,
+ false,
+ -0x6p-1076,
+ -0x6p-1076,
+ -0x5.fffffffffffffff8p-1076,
+ -0x5.fffffffffffffff8p-1076,
+ false,
+ -0x8p-1076,
+ -0x4p-1076,
+ -0x4p-1076,
+ -0x4p-1076,
+ false,
+ -0x6p-1076,
+ -0x6p-1076,
+ -0x5.fffffffffffffffffffffffffffcp-1076,
+ -0x5.fffffffffffffffffffffffffffcp-1076),
+ TEST ("-7.410984687618698162648531893023320585475897039214871466383"
+ "785237510132609053131277979497545424539885696948470431685765"
+ "963899850655339096945981621940161728171894510697854671067917"
+ "687257517734731555330779540854980960845750095811137303474765"
+ "809687100959097544227100475730780971111893578483867565399878"
+ "350301522805593404659373979179073872386829939581848166016912"
+ "201945649993128979841136206248449867871357218035220901702390"
+ "328579173252022052897402080290685402160661237554998340267130"
+ "003581248647904138574340187552090159017259254714629617513415"
+ "977493871857473787096164563890871811984127167305601704549300"
+ "470526959016576377688490826798697257336652176556794107250876"
+ "433756084600398490497214911746308553955635418864151316847843"
+ "6313080237596295773983001708984375e-324",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x8p-1076,
+ -0x8p-1076,
+ -0x4p-1076,
+ -0x4p-1076,
+ true,
+ -0x6p-1076,
+ -0x6p-1076,
+ -0x6p-1076,
+ -0x6p-1076,
+ true,
+ -0x6p-1076,
+ -0x6p-1076,
+ -0x6p-1076,
+ -0x6p-1076,
+ false,
+ -0x8p-1076,
+ -0x8p-1076,
+ -0x4p-1076,
+ -0x4p-1076,
+ true,
+ -0x6p-1076,
+ -0x6p-1076,
+ -0x6p-1076,
+ -0x6p-1076),
+ TEST ("-7.410984687618698162648531893023320585475897039214871466383"
+ "785237510132609053131277979497545424539885696948470431685765"
+ "963899850655339096945981621940161728171894510697854671067917"
+ "687257517734731555330779540854980960845750095811137303474765"
+ "809687100959097544227100475730780971111893578483867565399878"
+ "350301522805593404659373979179073872386829939581848166016912"
+ "201945649993128979841136206248449867871357218035220901702390"
+ "328579173252022052897402080290685402160661237554998340267130"
+ "003581248647904138574340187552090159017259254714629617513415"
+ "977493871857473787096164563890871811984127167305601704549300"
+ "470526959016576377688490826798697257336652176556794107250876"
+ "433756084600398490497214911746308553955635418864151316847843"
+ "631308023759629577398300170898437501e-324",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x8p-1076,
+ -0x8p-1076,
+ -0x4p-1076,
+ -0x4p-1076,
+ false,
+ -0x6.0000000000000008p-1076,
+ -0x6p-1076,
+ -0x6p-1076,
+ -0x6p-1076,
+ false,
+ -0x6.0000000000000008p-1076,
+ -0x6p-1076,
+ -0x6p-1076,
+ -0x6p-1076,
+ false,
+ -0x8p-1076,
+ -0x8p-1076,
+ -0x4p-1076,
+ -0x4p-1076,
+ false,
+ -0x6.0000000000000000000000000004p-1076,
+ -0x6p-1076,
+ -0x6p-1076,
+ -0x6p-1076),
+ TEST ("5.4677992978237119037926089004291297245985762235403450155814"
+ "707305425575329500966052143410629387408077958710210208052966"
+ "529504784489330482549602621133847135082257338717668975178538"
+ "378957084503396349323438489751160934104796903302909028868611"
+ "999312592165232778075745690821530731336739429587895774023213"
+ "939331012985331912661021188896306095323395084578542200319963"
+ "179359407180003251440084380484161504585462684082946932782829"
+ "488183829817567452314437076943950532707791252404699268678810"
+ "198502871250235796855577909830559749628817599194837522029036"
+ "891995648803056846354520653635957919882905363521007017169741"
+ "463296044392266269433408052686419017699718627761948763856040"
+ "592690841721239300491445991666051031755802326720329666454066"
+ "568630314348735511753639418257984253319063825247065727664852"
+ "328745422305642626091617823968872438962470092440688372515677"
+ "832232712866924800106797113478024083516199991991274936894113"
+ "006233377518471389394984262004503058455485659100090665241525"
+ "454803628182902241401701783637353179296850056973639305945938"
+ "813428953287892593620291195986011128990061888798763718548789"
+ "025717537674780281005583347165047846045925077914824515331335"
+ "131286063574407181821236377907693209224423490663289916878620"
+ "725507793163931390372011875799729330162278748985052557432333"
+ "005334989519381566364065326138465761456173231416844807264090"
+ "741841972247545424908843928136253653308813487994328446248389"
+ "608261444391573619177442907290731163188581917588219420107047"
+ "265367485141413919810885909689112244064797106324295291545892"
+ "937991321479061743491490060940946128274533657682130125169586"
+ "930571899403551122506297763180795732325134340989331155893724"
+ "289358918212707392997768032299997207208451112971425779939507"
+ "837165263255764268971211819536322993221774123134726665579460"
+ "265871378186589562858761835613344584269098062275786969729830"
+ "545786485401407774313414954958161677096004701941411411592755"
+ "485864471870515173326244464631295701572087440183178339987662"
+ "926763241220698078822661709054601073523477544653542795020468"
+ "256078409306409100874886828781860529824879343987945751252081"
+ "314345990313550683792348814627862441324030155730592166581251"
+ "009922787324590431548734575328663628650380722603024383412564"
+ "651446272117561042207738413114131099731016728935023152239431"
+ "311619533848376583687509108453086730196255111695352464186678"
+ "221927564757730319825223049341618853631333478241227227268084"
+ "583396688436229936266854011427192767039363517491659523133852"
+ "472534104124441112346615696891097070121463652258681270378076"
+ "538381697594264658479637863087159293838880752928175545408262"
+ "813403793568695416998388572304528748824756265665683890518422"
+ "696169422338806137532304784682662448207928681740476188343739"
+ "117833525916386815135793034906806117413105008719197882837614"
+ "738262050320291539494104952056471606645482046176634075459021"
+ "552555959590354956262127809953013679512507451424271839221946"
+ "794056861055980558363033732905772356986051180966474116423192"
+ "194741572438649215204229781279620370445373851348786918527399"
+ "785630808242657122705381806661616271132182017797793661244078"
+ "445747547535623384548769818529655539279036503234072455810991"
+ "588075181817695975173110136482659854557506203058080551018873"
+ "203138260451109855100526720073566126209666125604482413705611"
+ "996796777927332827103568863352291499261312290355143742018042"
+ "254470707107847293593205234049774839191754781030496978091006"
+ "099559675240966730110167624903610656473267105556155633783594"
+ "089546261107653110531808279445757724399186120387548675148632"
+ "176049190701680305210224388072261974806791922636412897526952"
+ "793677946622674149577084803568051242934076450942927092705684"
+ "547042915490323112457971853658760725588190377666477106903106"
+ "693847278847646032201293023329503348730723947218797410452333"
+ "910847913892827195814551858335519518939031446093385329182820"
+ "714173657946661746005901866885589732922652604573972842197231"
+ "187365263381958925227970038358064987248233271706462687651143"
+ "350472018043321314534759819524203308490914358596886150053406"
+ "629512434788155355109100540319857813535695923273426256911552"
+ "977539394209918630668466632881929661971212772444625151371953"
+ "428875491139683919687008724010475217255347915698820960215217"
+ "257390308560235323463096946442080548018754166369706161589705"
+ "215873687166365628787796501470056870127729464714362172216802"
+ "441045276911597009443281135389729130222603185665646434661947"
+ "627628077723219376892727386120519287577405410510114936151502"
+ "752997122750262781911372625997223415283516995479265631485799"
+ "456782561734766648462849641064097181818204279498552827825384"
+ "186202065516999362573388136163077477126602169410435905014077"
+ "049808497409025369325795765272066650278004200357878990911374"
+ "982857977108488482528354406313893864211497105765030504600982"
+ "253488805474531798742143374465080240030582370086699167937651"
+ "038307909706139327119325418854546478285735654541635477790346"
+ "964782617354265050767878335230272194896680141986745074630225"
+ "893106573559558843545841186025169531604151588481389164948914"
+ "823593944287133336263680358191369540321930649824471425485137"
+ "777984823525402115151171093313613251350685343824859052220126"
+ "891551966018355920872775724807128769003243129486808733796350"
+ "497668255116485157191011858830643898323628223472099280243583"
+ "164434348347014910398004439821970508280440872759395827943270"
+ "985008769143562351938091476215083548164137333541883808870019"
+ "116234099013452929807950151652297436436006149684939775781234"
+ "660954156154478642694176038524277810483833149798681345708089"
+ "152179193979463169402340611793486272301808073267534612685593"
+ "859596787866884211031341417903391749825320454663508370385251"
+ "831778477311017089729361152161928815389818579983544490982891"
+ "734081131312309744330960666031291451740885503458543884956367"
+ "654943799264600314531815427932691107874782328654759293575803"
+ "481929361961781073958502075438499070633193799699311694287183"
+ "299423475339817655608058724723221867087563064557636112380829"
+ "514501382073257737022472866608244164310385205213523702910787"
+ "182472517125030106491031844871593141759729773907719510044049"
+ "352857426592936763727969496103940591601975078602859660478614"
+ "119405428212830134490731706220583788265344728818766885126977"
+ "588151111984290444321648931907188080336064713873288834096229"
+ "203276676119810521851726133377700616341304257822975788967472"
+ "152742255041912584197045423031298506219011800240120182445838"
+ "590696647416285334515631019799007515682004250060857020904012"
+ "215375170479800482680554499806010766109655061507421747722461"
+ "180617361402575082294678925605271083587897845390768226405648"
+ "508518103525778638618195775128516073959272990148239415346263"
+ "486966573934577450787243667063244378381883115827207605856174"
+ "876350045086885320626669331311880593775916269643646395423220"
+ "549940790476989709243027420158390806135690975149384714684219"
+ "964938182719962913931464979458639185519531490009437619838306"
+ "362365453754807654884704163490469296444427144778593725687358"
+ "437087390151990694667516279202024332494828210657618261952038"
+ "597230263799412584275851667403910657370879707181053365818502"
+ "680037431560091209982641738995652793235851569372314130107647"
+ "166085235615697257094269133100914135783178856280392139325001"
+ "352841718610484616627448189556913621837791650699820323059708"
+ "766420810133584841826718631681683381743511974264126250984214"
+ "812397119978273917903889865891718836792263377888052458189238"
+ "746074986456016681098722869419588274020181430652732817858728"
+ "473849369539367463917171317324882099804999043054467247785592"
+ "038464723442276239896066431580123756428540074945472427752568"
+ "981171400621705853374875885943072600692576914790467205905272"
+ "372594740187988081900317493185005142913607163380720069786786"
+ "782095331840893694073778325119471833528492917081008547303414"
+ "509381563617864195257751546539575461435803625993888325647883"
+ "541039192368366987400263049681218831477776345118518503709588"
+ "840859023379762456561030683928115349942393963185677123055324"
+ "771693784214924931737043793679546051454845624150270955450608"
+ "318747395755728950832754611277041359602301205138509175543313"
+ "522772786504141007552691902249572375175731740923618769197304"
+ "652898352694386665448260033458575323252814233868098279476166"
+ "764258284911434288072243178941698347365985427696983129579496"
+ "059032032841281149923518087084876885114369033227736521245740"
+ "554711771423492719899982357711910225545480424688322195336240"
+ "492253136281857837808491795993788199125205555222116581071134"
+ "476787468430539307909617442106685159519071053844987343666452"
+ "494280317720153567054364117244775141336558406098548803924509"
+ "496052261825198043140272655303625315605326569530252885854991"
+ "822289219201218313590745412010446642247111703901991591338062"
+ "693320157180618736569439969283245279430312651192668788340033"
+ "626825194260296262959884258597703584888770801961209652822982"
+ "322376122303586169861685106043820510444293432856251210395693"
+ "261264867823980172683352796141772210301725997652373804152525"
+ "037162852291403804455997331367378463632437773242905518075065"
+ "414724295857460288225400061608664961649196400079359622673770"
+ "607898395269075056596627116148289491042491764170924014885106"
+ "158235482774778418134123293974436877051995673618683751115353"
+ "808771434984204447736174758316063096245047311279841579995578"
+ "186609402864244042751443128536278453430633423118662852688374"
+ "229600894418958824842459450540826176452145829389286103522774"
+ "101195556029650753254244433565937938526828990893149766298997"
+ "738359913887178888607190765709867052470880785937935110091424"
+ "743449966353497865681753841380246075612094033617488674676296"
+ "822570077027076266879557913673839341012099558043806442348798"
+ "053951239274913334631522409564461770434875790402230022872647"
+ "568436177018658068697071731879399180374560963492726714528729"
+ "224208938589940272515747888379118461617702271694075087419634"
+ "147298076764775745707026934442908236664400557265527951453482"
+ "191684597674273691978253678690951178777239573925410438679099"
+ "374700609973920128201422381329108236575369403675960765238333"
+ "778127017096574296148321075566959285042221837159799800133563"
+ "239963969638610872680393210300180152020613051613414547163713"
+ "772512617757277955979895866367571776456268564191092477027650"
+ "135832200376440239783726540552694851717269598489288851529660"
+ "975027775639565229734596726205832668434979354541943345062977"
+ "891187146561050118118108223323735210843681128615413601091222"
+ "007912350536959777114306541514511332368936078560929788143798"
+ "814391221507522370648646767364209132147312407014953113532379"
+ "838195728491128536978285918066991040993153064356179903885952"
+ "027952713749653604502053512355449916680887234238773855581636"
+ "172479594866871765094513940103284167914110196720261110812716"
+ "776424260154507395050380575452850420730818412994731079307343"
+ "538376880280124019321040198038723558784544408584344466090982"
+ "802067326529000931562048932875469079874956595180595395347093"
+ "285140279165467965596318365749701535812384333240968283640721"
+ "344003442002691613772056762099098025739332715913970186225176"
+ "459563484134139746647940170537900275350480490468851439300771"
+ "949915194703080576611022590670399844931867609777417528903454"
+ "731922206378932141464755402629420074293816349270038351339419"
+ "146768473851353171629153912238797141905920143036064131705230"
+ "421762305232861503856799511155936565169005916711845389135580"
+ "928162511912438531204156138447775120789548666143600293412065"
+ "767167106888509172568003530668539460588248316513392652567856"
+ "224602697296203328920073354425994044956624831346979458846837"
+ "597950064151867164583749203433942592178528868981311575331848"
+ "941597492470436782387502687532649093096498315347403977436001"
+ "399982102030846763698994785054617523241463186980898394504211"
+ "430763617825306895065661536045431497903759118007934839122881"
+ "885863091769469883539876840543521295706315919855784493235603"
+ "866268925981702690270202829595794350800918257913991744455922"
+ "683343374046671669930219650268554687499e-4951",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x8p-16448,
+ 0x8p-16448,
+ 0x8p-16448,
+ 0x1p-16444,
+ false,
+ 0x8p-16448,
+ 0xcp-16448,
+ 0x8p-16448,
+ 0xcp-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0xb.fffffffffffcp-16448,
+ 0xcp-16448,
+ 0xb.fffffffffffcp-16448,
+ 0xcp-16448),
+ TEST ("5.4677992978237119037926089004291297245985762235403450155814"
+ "707305425575329500966052143410629387408077958710210208052966"
+ "529504784489330482549602621133847135082257338717668975178538"
+ "378957084503396349323438489751160934104796903302909028868611"
+ "999312592165232778075745690821530731336739429587895774023213"
+ "939331012985331912661021188896306095323395084578542200319963"
+ "179359407180003251440084380484161504585462684082946932782829"
+ "488183829817567452314437076943950532707791252404699268678810"
+ "198502871250235796855577909830559749628817599194837522029036"
+ "891995648803056846354520653635957919882905363521007017169741"
+ "463296044392266269433408052686419017699718627761948763856040"
+ "592690841721239300491445991666051031755802326720329666454066"
+ "568630314348735511753639418257984253319063825247065727664852"
+ "328745422305642626091617823968872438962470092440688372515677"
+ "832232712866924800106797113478024083516199991991274936894113"
+ "006233377518471389394984262004503058455485659100090665241525"
+ "454803628182902241401701783637353179296850056973639305945938"
+ "813428953287892593620291195986011128990061888798763718548789"
+ "025717537674780281005583347165047846045925077914824515331335"
+ "131286063574407181821236377907693209224423490663289916878620"
+ "725507793163931390372011875799729330162278748985052557432333"
+ "005334989519381566364065326138465761456173231416844807264090"
+ "741841972247545424908843928136253653308813487994328446248389"
+ "608261444391573619177442907290731163188581917588219420107047"
+ "265367485141413919810885909689112244064797106324295291545892"
+ "937991321479061743491490060940946128274533657682130125169586"
+ "930571899403551122506297763180795732325134340989331155893724"
+ "289358918212707392997768032299997207208451112971425779939507"
+ "837165263255764268971211819536322993221774123134726665579460"
+ "265871378186589562858761835613344584269098062275786969729830"
+ "545786485401407774313414954958161677096004701941411411592755"
+ "485864471870515173326244464631295701572087440183178339987662"
+ "926763241220698078822661709054601073523477544653542795020468"
+ "256078409306409100874886828781860529824879343987945751252081"
+ "314345990313550683792348814627862441324030155730592166581251"
+ "009922787324590431548734575328663628650380722603024383412564"
+ "651446272117561042207738413114131099731016728935023152239431"
+ "311619533848376583687509108453086730196255111695352464186678"
+ "221927564757730319825223049341618853631333478241227227268084"
+ "583396688436229936266854011427192767039363517491659523133852"
+ "472534104124441112346615696891097070121463652258681270378076"
+ "538381697594264658479637863087159293838880752928175545408262"
+ "813403793568695416998388572304528748824756265665683890518422"
+ "696169422338806137532304784682662448207928681740476188343739"
+ "117833525916386815135793034906806117413105008719197882837614"
+ "738262050320291539494104952056471606645482046176634075459021"
+ "552555959590354956262127809953013679512507451424271839221946"
+ "794056861055980558363033732905772356986051180966474116423192"
+ "194741572438649215204229781279620370445373851348786918527399"
+ "785630808242657122705381806661616271132182017797793661244078"
+ "445747547535623384548769818529655539279036503234072455810991"
+ "588075181817695975173110136482659854557506203058080551018873"
+ "203138260451109855100526720073566126209666125604482413705611"
+ "996796777927332827103568863352291499261312290355143742018042"
+ "254470707107847293593205234049774839191754781030496978091006"
+ "099559675240966730110167624903610656473267105556155633783594"
+ "089546261107653110531808279445757724399186120387548675148632"
+ "176049190701680305210224388072261974806791922636412897526952"
+ "793677946622674149577084803568051242934076450942927092705684"
+ "547042915490323112457971853658760725588190377666477106903106"
+ "693847278847646032201293023329503348730723947218797410452333"
+ "910847913892827195814551858335519518939031446093385329182820"
+ "714173657946661746005901866885589732922652604573972842197231"
+ "187365263381958925227970038358064987248233271706462687651143"
+ "350472018043321314534759819524203308490914358596886150053406"
+ "629512434788155355109100540319857813535695923273426256911552"
+ "977539394209918630668466632881929661971212772444625151371953"
+ "428875491139683919687008724010475217255347915698820960215217"
+ "257390308560235323463096946442080548018754166369706161589705"
+ "215873687166365628787796501470056870127729464714362172216802"
+ "441045276911597009443281135389729130222603185665646434661947"
+ "627628077723219376892727386120519287577405410510114936151502"
+ "752997122750262781911372625997223415283516995479265631485799"
+ "456782561734766648462849641064097181818204279498552827825384"
+ "186202065516999362573388136163077477126602169410435905014077"
+ "049808497409025369325795765272066650278004200357878990911374"
+ "982857977108488482528354406313893864211497105765030504600982"
+ "253488805474531798742143374465080240030582370086699167937651"
+ "038307909706139327119325418854546478285735654541635477790346"
+ "964782617354265050767878335230272194896680141986745074630225"
+ "893106573559558843545841186025169531604151588481389164948914"
+ "823593944287133336263680358191369540321930649824471425485137"
+ "777984823525402115151171093313613251350685343824859052220126"
+ "891551966018355920872775724807128769003243129486808733796350"
+ "497668255116485157191011858830643898323628223472099280243583"
+ "164434348347014910398004439821970508280440872759395827943270"
+ "985008769143562351938091476215083548164137333541883808870019"
+ "116234099013452929807950151652297436436006149684939775781234"
+ "660954156154478642694176038524277810483833149798681345708089"
+ "152179193979463169402340611793486272301808073267534612685593"
+ "859596787866884211031341417903391749825320454663508370385251"
+ "831778477311017089729361152161928815389818579983544490982891"
+ "734081131312309744330960666031291451740885503458543884956367"
+ "654943799264600314531815427932691107874782328654759293575803"
+ "481929361961781073958502075438499070633193799699311694287183"
+ "299423475339817655608058724723221867087563064557636112380829"
+ "514501382073257737022472866608244164310385205213523702910787"
+ "182472517125030106491031844871593141759729773907719510044049"
+ "352857426592936763727969496103940591601975078602859660478614"
+ "119405428212830134490731706220583788265344728818766885126977"
+ "588151111984290444321648931907188080336064713873288834096229"
+ "203276676119810521851726133377700616341304257822975788967472"
+ "152742255041912584197045423031298506219011800240120182445838"
+ "590696647416285334515631019799007515682004250060857020904012"
+ "215375170479800482680554499806010766109655061507421747722461"
+ "180617361402575082294678925605271083587897845390768226405648"
+ "508518103525778638618195775128516073959272990148239415346263"
+ "486966573934577450787243667063244378381883115827207605856174"
+ "876350045086885320626669331311880593775916269643646395423220"
+ "549940790476989709243027420158390806135690975149384714684219"
+ "964938182719962913931464979458639185519531490009437619838306"
+ "362365453754807654884704163490469296444427144778593725687358"
+ "437087390151990694667516279202024332494828210657618261952038"
+ "597230263799412584275851667403910657370879707181053365818502"
+ "680037431560091209982641738995652793235851569372314130107647"
+ "166085235615697257094269133100914135783178856280392139325001"
+ "352841718610484616627448189556913621837791650699820323059708"
+ "766420810133584841826718631681683381743511974264126250984214"
+ "812397119978273917903889865891718836792263377888052458189238"
+ "746074986456016681098722869419588274020181430652732817858728"
+ "473849369539367463917171317324882099804999043054467247785592"
+ "038464723442276239896066431580123756428540074945472427752568"
+ "981171400621705853374875885943072600692576914790467205905272"
+ "372594740187988081900317493185005142913607163380720069786786"
+ "782095331840893694073778325119471833528492917081008547303414"
+ "509381563617864195257751546539575461435803625993888325647883"
+ "541039192368366987400263049681218831477776345118518503709588"
+ "840859023379762456561030683928115349942393963185677123055324"
+ "771693784214924931737043793679546051454845624150270955450608"
+ "318747395755728950832754611277041359602301205138509175543313"
+ "522772786504141007552691902249572375175731740923618769197304"
+ "652898352694386665448260033458575323252814233868098279476166"
+ "764258284911434288072243178941698347365985427696983129579496"
+ "059032032841281149923518087084876885114369033227736521245740"
+ "554711771423492719899982357711910225545480424688322195336240"
+ "492253136281857837808491795993788199125205555222116581071134"
+ "476787468430539307909617442106685159519071053844987343666452"
+ "494280317720153567054364117244775141336558406098548803924509"
+ "496052261825198043140272655303625315605326569530252885854991"
+ "822289219201218313590745412010446642247111703901991591338062"
+ "693320157180618736569439969283245279430312651192668788340033"
+ "626825194260296262959884258597703584888770801961209652822982"
+ "322376122303586169861685106043820510444293432856251210395693"
+ "261264867823980172683352796141772210301725997652373804152525"
+ "037162852291403804455997331367378463632437773242905518075065"
+ "414724295857460288225400061608664961649196400079359622673770"
+ "607898395269075056596627116148289491042491764170924014885106"
+ "158235482774778418134123293974436877051995673618683751115353"
+ "808771434984204447736174758316063096245047311279841579995578"
+ "186609402864244042751443128536278453430633423118662852688374"
+ "229600894418958824842459450540826176452145829389286103522774"
+ "101195556029650753254244433565937938526828990893149766298997"
+ "738359913887178888607190765709867052470880785937935110091424"
+ "743449966353497865681753841380246075612094033617488674676296"
+ "822570077027076266879557913673839341012099558043806442348798"
+ "053951239274913334631522409564461770434875790402230022872647"
+ "568436177018658068697071731879399180374560963492726714528729"
+ "224208938589940272515747888379118461617702271694075087419634"
+ "147298076764775745707026934442908236664400557265527951453482"
+ "191684597674273691978253678690951178777239573925410438679099"
+ "374700609973920128201422381329108236575369403675960765238333"
+ "778127017096574296148321075566959285042221837159799800133563"
+ "239963969638610872680393210300180152020613051613414547163713"
+ "772512617757277955979895866367571776456268564191092477027650"
+ "135832200376440239783726540552694851717269598489288851529660"
+ "975027775639565229734596726205832668434979354541943345062977"
+ "891187146561050118118108223323735210843681128615413601091222"
+ "007912350536959777114306541514511332368936078560929788143798"
+ "814391221507522370648646767364209132147312407014953113532379"
+ "838195728491128536978285918066991040993153064356179903885952"
+ "027952713749653604502053512355449916680887234238773855581636"
+ "172479594866871765094513940103284167914110196720261110812716"
+ "776424260154507395050380575452850420730818412994731079307343"
+ "538376880280124019321040198038723558784544408584344466090982"
+ "802067326529000931562048932875469079874956595180595395347093"
+ "285140279165467965596318365749701535812384333240968283640721"
+ "344003442002691613772056762099098025739332715913970186225176"
+ "459563484134139746647940170537900275350480490468851439300771"
+ "949915194703080576611022590670399844931867609777417528903454"
+ "731922206378932141464755402629420074293816349270038351339419"
+ "146768473851353171629153912238797141905920143036064131705230"
+ "421762305232861503856799511155936565169005916711845389135580"
+ "928162511912438531204156138447775120789548666143600293412065"
+ "767167106888509172568003530668539460588248316513392652567856"
+ "224602697296203328920073354425994044956624831346979458846837"
+ "597950064151867164583749203433942592178528868981311575331848"
+ "941597492470436782387502687532649093096498315347403977436001"
+ "399982102030846763698994785054617523241463186980898394504211"
+ "430763617825306895065661536045431497903759118007934839122881"
+ "885863091769469883539876840543521295706315919855784493235603"
+ "866268925981702690270202829595794350800918257913991744455922"
+ "6833433740466716699302196502685546875e-4951",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x8p-16448,
+ 0x1p-16444,
+ 0x8p-16448,
+ 0x1p-16444,
+ true,
+ 0xcp-16448,
+ 0xcp-16448,
+ 0xcp-16448,
+ 0xcp-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ true,
+ 0xcp-16448,
+ 0xcp-16448,
+ 0xcp-16448,
+ 0xcp-16448),
+ TEST ("5.4677992978237119037926089004291297245985762235403450155814"
+ "707305425575329500966052143410629387408077958710210208052966"
+ "529504784489330482549602621133847135082257338717668975178538"
+ "378957084503396349323438489751160934104796903302909028868611"
+ "999312592165232778075745690821530731336739429587895774023213"
+ "939331012985331912661021188896306095323395084578542200319963"
+ "179359407180003251440084380484161504585462684082946932782829"
+ "488183829817567452314437076943950532707791252404699268678810"
+ "198502871250235796855577909830559749628817599194837522029036"
+ "891995648803056846354520653635957919882905363521007017169741"
+ "463296044392266269433408052686419017699718627761948763856040"
+ "592690841721239300491445991666051031755802326720329666454066"
+ "568630314348735511753639418257984253319063825247065727664852"
+ "328745422305642626091617823968872438962470092440688372515677"
+ "832232712866924800106797113478024083516199991991274936894113"
+ "006233377518471389394984262004503058455485659100090665241525"
+ "454803628182902241401701783637353179296850056973639305945938"
+ "813428953287892593620291195986011128990061888798763718548789"
+ "025717537674780281005583347165047846045925077914824515331335"
+ "131286063574407181821236377907693209224423490663289916878620"
+ "725507793163931390372011875799729330162278748985052557432333"
+ "005334989519381566364065326138465761456173231416844807264090"
+ "741841972247545424908843928136253653308813487994328446248389"
+ "608261444391573619177442907290731163188581917588219420107047"
+ "265367485141413919810885909689112244064797106324295291545892"
+ "937991321479061743491490060940946128274533657682130125169586"
+ "930571899403551122506297763180795732325134340989331155893724"
+ "289358918212707392997768032299997207208451112971425779939507"
+ "837165263255764268971211819536322993221774123134726665579460"
+ "265871378186589562858761835613344584269098062275786969729830"
+ "545786485401407774313414954958161677096004701941411411592755"
+ "485864471870515173326244464631295701572087440183178339987662"
+ "926763241220698078822661709054601073523477544653542795020468"
+ "256078409306409100874886828781860529824879343987945751252081"
+ "314345990313550683792348814627862441324030155730592166581251"
+ "009922787324590431548734575328663628650380722603024383412564"
+ "651446272117561042207738413114131099731016728935023152239431"
+ "311619533848376583687509108453086730196255111695352464186678"
+ "221927564757730319825223049341618853631333478241227227268084"
+ "583396688436229936266854011427192767039363517491659523133852"
+ "472534104124441112346615696891097070121463652258681270378076"
+ "538381697594264658479637863087159293838880752928175545408262"
+ "813403793568695416998388572304528748824756265665683890518422"
+ "696169422338806137532304784682662448207928681740476188343739"
+ "117833525916386815135793034906806117413105008719197882837614"
+ "738262050320291539494104952056471606645482046176634075459021"
+ "552555959590354956262127809953013679512507451424271839221946"
+ "794056861055980558363033732905772356986051180966474116423192"
+ "194741572438649215204229781279620370445373851348786918527399"
+ "785630808242657122705381806661616271132182017797793661244078"
+ "445747547535623384548769818529655539279036503234072455810991"
+ "588075181817695975173110136482659854557506203058080551018873"
+ "203138260451109855100526720073566126209666125604482413705611"
+ "996796777927332827103568863352291499261312290355143742018042"
+ "254470707107847293593205234049774839191754781030496978091006"
+ "099559675240966730110167624903610656473267105556155633783594"
+ "089546261107653110531808279445757724399186120387548675148632"
+ "176049190701680305210224388072261974806791922636412897526952"
+ "793677946622674149577084803568051242934076450942927092705684"
+ "547042915490323112457971853658760725588190377666477106903106"
+ "693847278847646032201293023329503348730723947218797410452333"
+ "910847913892827195814551858335519518939031446093385329182820"
+ "714173657946661746005901866885589732922652604573972842197231"
+ "187365263381958925227970038358064987248233271706462687651143"
+ "350472018043321314534759819524203308490914358596886150053406"
+ "629512434788155355109100540319857813535695923273426256911552"
+ "977539394209918630668466632881929661971212772444625151371953"
+ "428875491139683919687008724010475217255347915698820960215217"
+ "257390308560235323463096946442080548018754166369706161589705"
+ "215873687166365628787796501470056870127729464714362172216802"
+ "441045276911597009443281135389729130222603185665646434661947"
+ "627628077723219376892727386120519287577405410510114936151502"
+ "752997122750262781911372625997223415283516995479265631485799"
+ "456782561734766648462849641064097181818204279498552827825384"
+ "186202065516999362573388136163077477126602169410435905014077"
+ "049808497409025369325795765272066650278004200357878990911374"
+ "982857977108488482528354406313893864211497105765030504600982"
+ "253488805474531798742143374465080240030582370086699167937651"
+ "038307909706139327119325418854546478285735654541635477790346"
+ "964782617354265050767878335230272194896680141986745074630225"
+ "893106573559558843545841186025169531604151588481389164948914"
+ "823593944287133336263680358191369540321930649824471425485137"
+ "777984823525402115151171093313613251350685343824859052220126"
+ "891551966018355920872775724807128769003243129486808733796350"
+ "497668255116485157191011858830643898323628223472099280243583"
+ "164434348347014910398004439821970508280440872759395827943270"
+ "985008769143562351938091476215083548164137333541883808870019"
+ "116234099013452929807950151652297436436006149684939775781234"
+ "660954156154478642694176038524277810483833149798681345708089"
+ "152179193979463169402340611793486272301808073267534612685593"
+ "859596787866884211031341417903391749825320454663508370385251"
+ "831778477311017089729361152161928815389818579983544490982891"
+ "734081131312309744330960666031291451740885503458543884956367"
+ "654943799264600314531815427932691107874782328654759293575803"
+ "481929361961781073958502075438499070633193799699311694287183"
+ "299423475339817655608058724723221867087563064557636112380829"
+ "514501382073257737022472866608244164310385205213523702910787"
+ "182472517125030106491031844871593141759729773907719510044049"
+ "352857426592936763727969496103940591601975078602859660478614"
+ "119405428212830134490731706220583788265344728818766885126977"
+ "588151111984290444321648931907188080336064713873288834096229"
+ "203276676119810521851726133377700616341304257822975788967472"
+ "152742255041912584197045423031298506219011800240120182445838"
+ "590696647416285334515631019799007515682004250060857020904012"
+ "215375170479800482680554499806010766109655061507421747722461"
+ "180617361402575082294678925605271083587897845390768226405648"
+ "508518103525778638618195775128516073959272990148239415346263"
+ "486966573934577450787243667063244378381883115827207605856174"
+ "876350045086885320626669331311880593775916269643646395423220"
+ "549940790476989709243027420158390806135690975149384714684219"
+ "964938182719962913931464979458639185519531490009437619838306"
+ "362365453754807654884704163490469296444427144778593725687358"
+ "437087390151990694667516279202024332494828210657618261952038"
+ "597230263799412584275851667403910657370879707181053365818502"
+ "680037431560091209982641738995652793235851569372314130107647"
+ "166085235615697257094269133100914135783178856280392139325001"
+ "352841718610484616627448189556913621837791650699820323059708"
+ "766420810133584841826718631681683381743511974264126250984214"
+ "812397119978273917903889865891718836792263377888052458189238"
+ "746074986456016681098722869419588274020181430652732817858728"
+ "473849369539367463917171317324882099804999043054467247785592"
+ "038464723442276239896066431580123756428540074945472427752568"
+ "981171400621705853374875885943072600692576914790467205905272"
+ "372594740187988081900317493185005142913607163380720069786786"
+ "782095331840893694073778325119471833528492917081008547303414"
+ "509381563617864195257751546539575461435803625993888325647883"
+ "541039192368366987400263049681218831477776345118518503709588"
+ "840859023379762456561030683928115349942393963185677123055324"
+ "771693784214924931737043793679546051454845624150270955450608"
+ "318747395755728950832754611277041359602301205138509175543313"
+ "522772786504141007552691902249572375175731740923618769197304"
+ "652898352694386665448260033458575323252814233868098279476166"
+ "764258284911434288072243178941698347365985427696983129579496"
+ "059032032841281149923518087084876885114369033227736521245740"
+ "554711771423492719899982357711910225545480424688322195336240"
+ "492253136281857837808491795993788199125205555222116581071134"
+ "476787468430539307909617442106685159519071053844987343666452"
+ "494280317720153567054364117244775141336558406098548803924509"
+ "496052261825198043140272655303625315605326569530252885854991"
+ "822289219201218313590745412010446642247111703901991591338062"
+ "693320157180618736569439969283245279430312651192668788340033"
+ "626825194260296262959884258597703584888770801961209652822982"
+ "322376122303586169861685106043820510444293432856251210395693"
+ "261264867823980172683352796141772210301725997652373804152525"
+ "037162852291403804455997331367378463632437773242905518075065"
+ "414724295857460288225400061608664961649196400079359622673770"
+ "607898395269075056596627116148289491042491764170924014885106"
+ "158235482774778418134123293974436877051995673618683751115353"
+ "808771434984204447736174758316063096245047311279841579995578"
+ "186609402864244042751443128536278453430633423118662852688374"
+ "229600894418958824842459450540826176452145829389286103522774"
+ "101195556029650753254244433565937938526828990893149766298997"
+ "738359913887178888607190765709867052470880785937935110091424"
+ "743449966353497865681753841380246075612094033617488674676296"
+ "822570077027076266879557913673839341012099558043806442348798"
+ "053951239274913334631522409564461770434875790402230022872647"
+ "568436177018658068697071731879399180374560963492726714528729"
+ "224208938589940272515747888379118461617702271694075087419634"
+ "147298076764775745707026934442908236664400557265527951453482"
+ "191684597674273691978253678690951178777239573925410438679099"
+ "374700609973920128201422381329108236575369403675960765238333"
+ "778127017096574296148321075566959285042221837159799800133563"
+ "239963969638610872680393210300180152020613051613414547163713"
+ "772512617757277955979895866367571776456268564191092477027650"
+ "135832200376440239783726540552694851717269598489288851529660"
+ "975027775639565229734596726205832668434979354541943345062977"
+ "891187146561050118118108223323735210843681128615413601091222"
+ "007912350536959777114306541514511332368936078560929788143798"
+ "814391221507522370648646767364209132147312407014953113532379"
+ "838195728491128536978285918066991040993153064356179903885952"
+ "027952713749653604502053512355449916680887234238773855581636"
+ "172479594866871765094513940103284167914110196720261110812716"
+ "776424260154507395050380575452850420730818412994731079307343"
+ "538376880280124019321040198038723558784544408584344466090982"
+ "802067326529000931562048932875469079874956595180595395347093"
+ "285140279165467965596318365749701535812384333240968283640721"
+ "344003442002691613772056762099098025739332715913970186225176"
+ "459563484134139746647940170537900275350480490468851439300771"
+ "949915194703080576611022590670399844931867609777417528903454"
+ "731922206378932141464755402629420074293816349270038351339419"
+ "146768473851353171629153912238797141905920143036064131705230"
+ "421762305232861503856799511155936565169005916711845389135580"
+ "928162511912438531204156138447775120789548666143600293412065"
+ "767167106888509172568003530668539460588248316513392652567856"
+ "224602697296203328920073354425994044956624831346979458846837"
+ "597950064151867164583749203433942592178528868981311575331848"
+ "941597492470436782387502687532649093096498315347403977436001"
+ "399982102030846763698994785054617523241463186980898394504211"
+ "430763617825306895065661536045431497903759118007934839122881"
+ "885863091769469883539876840543521295706315919855784493235603"
+ "866268925981702690270202829595794350800918257913991744455922"
+ "683343374046671669930219650268554687501e-4951",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x8p-16448,
+ 0x1p-16444,
+ 0x8p-16448,
+ 0x1p-16444,
+ false,
+ 0xcp-16448,
+ 0xcp-16448,
+ 0xcp-16448,
+ 0x1p-16444,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0xcp-16448,
+ 0xcp-16448,
+ 0xcp-16448,
+ 0xc.000000000004p-16448),
+ TEST ("-5.467799297823711903792608900429129724598576223540345015581"
+ "470730542557532950096605214341062938740807795871021020805296"
+ "652950478448933048254960262113384713508225733871766897517853"
+ "837895708450339634932343848975116093410479690330290902886861"
+ "199931259216523277807574569082153073133673942958789577402321"
+ "393933101298533191266102118889630609532339508457854220031996"
+ "317935940718000325144008438048416150458546268408294693278282"
+ "948818382981756745231443707694395053270779125240469926867881"
+ "019850287125023579685557790983055974962881759919483752202903"
+ "689199564880305684635452065363595791988290536352100701716974"
+ "146329604439226626943340805268641901769971862776194876385604"
+ "059269084172123930049144599166605103175580232672032966645406"
+ "656863031434873551175363941825798425331906382524706572766485"
+ "232874542230564262609161782396887243896247009244068837251567"
+ "783223271286692480010679711347802408351619999199127493689411"
+ "300623337751847138939498426200450305845548565910009066524152"
+ "545480362818290224140170178363735317929685005697363930594593"
+ "881342895328789259362029119598601112899006188879876371854878"
+ "902571753767478028100558334716504784604592507791482451533133"
+ "513128606357440718182123637790769320922442349066328991687862"
+ "072550779316393139037201187579972933016227874898505255743233"
+ "300533498951938156636406532613846576145617323141684480726409"
+ "074184197224754542490884392813625365330881348799432844624838"
+ "960826144439157361917744290729073116318858191758821942010704"
+ "726536748514141391981088590968911224406479710632429529154589"
+ "293799132147906174349149006094094612827453365768213012516958"
+ "693057189940355112250629776318079573232513434098933115589372"
+ "428935891821270739299776803229999720720845111297142577993950"
+ "783716526325576426897121181953632299322177412313472666557946"
+ "026587137818658956285876183561334458426909806227578696972983"
+ "054578648540140777431341495495816167709600470194141141159275"
+ "548586447187051517332624446463129570157208744018317833998766"
+ "292676324122069807882266170905460107352347754465354279502046"
+ "825607840930640910087488682878186052982487934398794575125208"
+ "131434599031355068379234881462786244132403015573059216658125"
+ "100992278732459043154873457532866362865038072260302438341256"
+ "465144627211756104220773841311413109973101672893502315223943"
+ "131161953384837658368750910845308673019625511169535246418667"
+ "822192756475773031982522304934161885363133347824122722726808"
+ "458339668843622993626685401142719276703936351749165952313385"
+ "247253410412444111234661569689109707012146365225868127037807"
+ "653838169759426465847963786308715929383888075292817554540826"
+ "281340379356869541699838857230452874882475626566568389051842"
+ "269616942233880613753230478468266244820792868174047618834373"
+ "911783352591638681513579303490680611741310500871919788283761"
+ "473826205032029153949410495205647160664548204617663407545902"
+ "155255595959035495626212780995301367951250745142427183922194"
+ "679405686105598055836303373290577235698605118096647411642319"
+ "219474157243864921520422978127962037044537385134878691852739"
+ "978563080824265712270538180666161627113218201779779366124407"
+ "844574754753562338454876981852965553927903650323407245581099"
+ "158807518181769597517311013648265985455750620305808055101887"
+ "320313826045110985510052672007356612620966612560448241370561"
+ "199679677792733282710356886335229149926131229035514374201804"
+ "225447070710784729359320523404977483919175478103049697809100"
+ "609955967524096673011016762490361065647326710555615563378359"
+ "408954626110765311053180827944575772439918612038754867514863"
+ "217604919070168030521022438807226197480679192263641289752695"
+ "279367794662267414957708480356805124293407645094292709270568"
+ "454704291549032311245797185365876072558819037766647710690310"
+ "669384727884764603220129302332950334873072394721879741045233"
+ "391084791389282719581455185833551951893903144609338532918282"
+ "071417365794666174600590186688558973292265260457397284219723"
+ "118736526338195892522797003835806498724823327170646268765114"
+ "335047201804332131453475981952420330849091435859688615005340"
+ "662951243478815535510910054031985781353569592327342625691155"
+ "297753939420991863066846663288192966197121277244462515137195"
+ "342887549113968391968700872401047521725534791569882096021521"
+ "725739030856023532346309694644208054801875416636970616158970"
+ "521587368716636562878779650147005687012772946471436217221680"
+ "244104527691159700944328113538972913022260318566564643466194"
+ "762762807772321937689272738612051928757740541051011493615150"
+ "275299712275026278191137262599722341528351699547926563148579"
+ "945678256173476664846284964106409718181820427949855282782538"
+ "418620206551699936257338813616307747712660216941043590501407"
+ "704980849740902536932579576527206665027800420035787899091137"
+ "498285797710848848252835440631389386421149710576503050460098"
+ "225348880547453179874214337446508024003058237008669916793765"
+ "103830790970613932711932541885454647828573565454163547779034"
+ "696478261735426505076787833523027219489668014198674507463022"
+ "589310657355955884354584118602516953160415158848138916494891"
+ "482359394428713333626368035819136954032193064982447142548513"
+ "777798482352540211515117109331361325135068534382485905222012"
+ "689155196601835592087277572480712876900324312948680873379635"
+ "049766825511648515719101185883064389832362822347209928024358"
+ "316443434834701491039800443982197050828044087275939582794327"
+ "098500876914356235193809147621508354816413733354188380887001"
+ "911623409901345292980795015165229743643600614968493977578123"
+ "466095415615447864269417603852427781048383314979868134570808"
+ "915217919397946316940234061179348627230180807326753461268559"
+ "385959678786688421103134141790339174982532045466350837038525"
+ "183177847731101708972936115216192881538981857998354449098289"
+ "173408113131230974433096066603129145174088550345854388495636"
+ "765494379926460031453181542793269110787478232865475929357580"
+ "348192936196178107395850207543849907063319379969931169428718"
+ "329942347533981765560805872472322186708756306455763611238082"
+ "951450138207325773702247286660824416431038520521352370291078"
+ "718247251712503010649103184487159314175972977390771951004404"
+ "935285742659293676372796949610394059160197507860285966047861"
+ "411940542821283013449073170622058378826534472881876688512697"
+ "758815111198429044432164893190718808033606471387328883409622"
+ "920327667611981052185172613337770061634130425782297578896747"
+ "215274225504191258419704542303129850621901180024012018244583"
+ "859069664741628533451563101979900751568200425006085702090401"
+ "221537517047980048268055449980601076610965506150742174772246"
+ "118061736140257508229467892560527108358789784539076822640564"
+ "850851810352577863861819577512851607395927299014823941534626"
+ "348696657393457745078724366706324437838188311582720760585617"
+ "487635004508688532062666933131188059377591626964364639542322"
+ "054994079047698970924302742015839080613569097514938471468421"
+ "996493818271996291393146497945863918551953149000943761983830"
+ "636236545375480765488470416349046929644442714477859372568735"
+ "843708739015199069466751627920202433249482821065761826195203"
+ "859723026379941258427585166740391065737087970718105336581850"
+ "268003743156009120998264173899565279323585156937231413010764"
+ "716608523561569725709426913310091413578317885628039213932500"
+ "135284171861048461662744818955691362183779165069982032305970"
+ "876642081013358484182671863168168338174351197426412625098421"
+ "481239711997827391790388986589171883679226337788805245818923"
+ "874607498645601668109872286941958827402018143065273281785872"
+ "847384936953936746391717131732488209980499904305446724778559"
+ "203846472344227623989606643158012375642854007494547242775256"
+ "898117140062170585337487588594307260069257691479046720590527"
+ "237259474018798808190031749318500514291360716338072006978678"
+ "678209533184089369407377832511947183352849291708100854730341"
+ "450938156361786419525775154653957546143580362599388832564788"
+ "354103919236836698740026304968121883147777634511851850370958"
+ "884085902337976245656103068392811534994239396318567712305532"
+ "477169378421492493173704379367954605145484562415027095545060"
+ "831874739575572895083275461127704135960230120513850917554331"
+ "352277278650414100755269190224957237517573174092361876919730"
+ "465289835269438666544826003345857532325281423386809827947616"
+ "676425828491143428807224317894169834736598542769698312957949"
+ "605903203284128114992351808708487688511436903322773652124574"
+ "055471177142349271989998235771191022554548042468832219533624"
+ "049225313628185783780849179599378819912520555522211658107113"
+ "447678746843053930790961744210668515951907105384498734366645"
+ "249428031772015356705436411724477514133655840609854880392450"
+ "949605226182519804314027265530362531560532656953025288585499"
+ "182228921920121831359074541201044664224711170390199159133806"
+ "269332015718061873656943996928324527943031265119266878834003"
+ "362682519426029626295988425859770358488877080196120965282298"
+ "232237612230358616986168510604382051044429343285625121039569"
+ "326126486782398017268335279614177221030172599765237380415252"
+ "503716285229140380445599733136737846363243777324290551807506"
+ "541472429585746028822540006160866496164919640007935962267377"
+ "060789839526907505659662711614828949104249176417092401488510"
+ "615823548277477841813412329397443687705199567361868375111535"
+ "380877143498420444773617475831606309624504731127984157999557"
+ "818660940286424404275144312853627845343063342311866285268837"
+ "422960089441895882484245945054082617645214582938928610352277"
+ "410119555602965075325424443356593793852682899089314976629899"
+ "773835991388717888860719076570986705247088078593793511009142"
+ "474344996635349786568175384138024607561209403361748867467629"
+ "682257007702707626687955791367383934101209955804380644234879"
+ "805395123927491333463152240956446177043487579040223002287264"
+ "756843617701865806869707173187939918037456096349272671452872"
+ "922420893858994027251574788837911846161770227169407508741963"
+ "414729807676477574570702693444290823666440055726552795145348"
+ "219168459767427369197825367869095117877723957392541043867909"
+ "937470060997392012820142238132910823657536940367596076523833"
+ "377812701709657429614832107556695928504222183715979980013356"
+ "323996396963861087268039321030018015202061305161341454716371"
+ "377251261775727795597989586636757177645626856419109247702765"
+ "013583220037644023978372654055269485171726959848928885152966"
+ "097502777563956522973459672620583266843497935454194334506297"
+ "789118714656105011811810822332373521084368112861541360109122"
+ "200791235053695977711430654151451133236893607856092978814379"
+ "881439122150752237064864676736420913214731240701495311353237"
+ "983819572849112853697828591806699104099315306435617990388595"
+ "202795271374965360450205351235544991668088723423877385558163"
+ "617247959486687176509451394010328416791411019672026111081271"
+ "677642426015450739505038057545285042073081841299473107930734"
+ "353837688028012401932104019803872355878454440858434446609098"
+ "280206732652900093156204893287546907987495659518059539534709"
+ "328514027916546796559631836574970153581238433324096828364072"
+ "134400344200269161377205676209909802573933271591397018622517"
+ "645956348413413974664794017053790027535048049046885143930077"
+ "194991519470308057661102259067039984493186760977741752890345"
+ "473192220637893214146475540262942007429381634927003835133941"
+ "914676847385135317162915391223879714190592014303606413170523"
+ "042176230523286150385679951115593656516900591671184538913558"
+ "092816251191243853120415613844777512078954866614360029341206"
+ "576716710688850917256800353066853946058824831651339265256785"
+ "622460269729620332892007335442599404495662483134697945884683"
+ "759795006415186716458374920343394259217852886898131157533184"
+ "894159749247043678238750268753264909309649831534740397743600"
+ "139998210203084676369899478505461752324146318698089839450421"
+ "143076361782530689506566153604543149790375911800793483912288"
+ "188586309176946988353987684054352129570631591985578449323560"
+ "386626892598170269027020282959579435080091825791399174445592"
+ "2683343374046671669930219650268554687499e-4951",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x1p-16444,
+ -0x8p-16448,
+ -0x8p-16448,
+ -0x8p-16448,
+ false,
+ -0xcp-16448,
+ -0xcp-16448,
+ -0x8p-16448,
+ -0x8p-16448,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0xcp-16448,
+ -0xcp-16448,
+ -0xb.fffffffffffcp-16448,
+ -0xb.fffffffffffcp-16448),
+ TEST ("-5.467799297823711903792608900429129724598576223540345015581"
+ "470730542557532950096605214341062938740807795871021020805296"
+ "652950478448933048254960262113384713508225733871766897517853"
+ "837895708450339634932343848975116093410479690330290902886861"
+ "199931259216523277807574569082153073133673942958789577402321"
+ "393933101298533191266102118889630609532339508457854220031996"
+ "317935940718000325144008438048416150458546268408294693278282"
+ "948818382981756745231443707694395053270779125240469926867881"
+ "019850287125023579685557790983055974962881759919483752202903"
+ "689199564880305684635452065363595791988290536352100701716974"
+ "146329604439226626943340805268641901769971862776194876385604"
+ "059269084172123930049144599166605103175580232672032966645406"
+ "656863031434873551175363941825798425331906382524706572766485"
+ "232874542230564262609161782396887243896247009244068837251567"
+ "783223271286692480010679711347802408351619999199127493689411"
+ "300623337751847138939498426200450305845548565910009066524152"
+ "545480362818290224140170178363735317929685005697363930594593"
+ "881342895328789259362029119598601112899006188879876371854878"
+ "902571753767478028100558334716504784604592507791482451533133"
+ "513128606357440718182123637790769320922442349066328991687862"
+ "072550779316393139037201187579972933016227874898505255743233"
+ "300533498951938156636406532613846576145617323141684480726409"
+ "074184197224754542490884392813625365330881348799432844624838"
+ "960826144439157361917744290729073116318858191758821942010704"
+ "726536748514141391981088590968911224406479710632429529154589"
+ "293799132147906174349149006094094612827453365768213012516958"
+ "693057189940355112250629776318079573232513434098933115589372"
+ "428935891821270739299776803229999720720845111297142577993950"
+ "783716526325576426897121181953632299322177412313472666557946"
+ "026587137818658956285876183561334458426909806227578696972983"
+ "054578648540140777431341495495816167709600470194141141159275"
+ "548586447187051517332624446463129570157208744018317833998766"
+ "292676324122069807882266170905460107352347754465354279502046"
+ "825607840930640910087488682878186052982487934398794575125208"
+ "131434599031355068379234881462786244132403015573059216658125"
+ "100992278732459043154873457532866362865038072260302438341256"
+ "465144627211756104220773841311413109973101672893502315223943"
+ "131161953384837658368750910845308673019625511169535246418667"
+ "822192756475773031982522304934161885363133347824122722726808"
+ "458339668843622993626685401142719276703936351749165952313385"
+ "247253410412444111234661569689109707012146365225868127037807"
+ "653838169759426465847963786308715929383888075292817554540826"
+ "281340379356869541699838857230452874882475626566568389051842"
+ "269616942233880613753230478468266244820792868174047618834373"
+ "911783352591638681513579303490680611741310500871919788283761"
+ "473826205032029153949410495205647160664548204617663407545902"
+ "155255595959035495626212780995301367951250745142427183922194"
+ "679405686105598055836303373290577235698605118096647411642319"
+ "219474157243864921520422978127962037044537385134878691852739"
+ "978563080824265712270538180666161627113218201779779366124407"
+ "844574754753562338454876981852965553927903650323407245581099"
+ "158807518181769597517311013648265985455750620305808055101887"
+ "320313826045110985510052672007356612620966612560448241370561"
+ "199679677792733282710356886335229149926131229035514374201804"
+ "225447070710784729359320523404977483919175478103049697809100"
+ "609955967524096673011016762490361065647326710555615563378359"
+ "408954626110765311053180827944575772439918612038754867514863"
+ "217604919070168030521022438807226197480679192263641289752695"
+ "279367794662267414957708480356805124293407645094292709270568"
+ "454704291549032311245797185365876072558819037766647710690310"
+ "669384727884764603220129302332950334873072394721879741045233"
+ "391084791389282719581455185833551951893903144609338532918282"
+ "071417365794666174600590186688558973292265260457397284219723"
+ "118736526338195892522797003835806498724823327170646268765114"
+ "335047201804332131453475981952420330849091435859688615005340"
+ "662951243478815535510910054031985781353569592327342625691155"
+ "297753939420991863066846663288192966197121277244462515137195"
+ "342887549113968391968700872401047521725534791569882096021521"
+ "725739030856023532346309694644208054801875416636970616158970"
+ "521587368716636562878779650147005687012772946471436217221680"
+ "244104527691159700944328113538972913022260318566564643466194"
+ "762762807772321937689272738612051928757740541051011493615150"
+ "275299712275026278191137262599722341528351699547926563148579"
+ "945678256173476664846284964106409718181820427949855282782538"
+ "418620206551699936257338813616307747712660216941043590501407"
+ "704980849740902536932579576527206665027800420035787899091137"
+ "498285797710848848252835440631389386421149710576503050460098"
+ "225348880547453179874214337446508024003058237008669916793765"
+ "103830790970613932711932541885454647828573565454163547779034"
+ "696478261735426505076787833523027219489668014198674507463022"
+ "589310657355955884354584118602516953160415158848138916494891"
+ "482359394428713333626368035819136954032193064982447142548513"
+ "777798482352540211515117109331361325135068534382485905222012"
+ "689155196601835592087277572480712876900324312948680873379635"
+ "049766825511648515719101185883064389832362822347209928024358"
+ "316443434834701491039800443982197050828044087275939582794327"
+ "098500876914356235193809147621508354816413733354188380887001"
+ "911623409901345292980795015165229743643600614968493977578123"
+ "466095415615447864269417603852427781048383314979868134570808"
+ "915217919397946316940234061179348627230180807326753461268559"
+ "385959678786688421103134141790339174982532045466350837038525"
+ "183177847731101708972936115216192881538981857998354449098289"
+ "173408113131230974433096066603129145174088550345854388495636"
+ "765494379926460031453181542793269110787478232865475929357580"
+ "348192936196178107395850207543849907063319379969931169428718"
+ "329942347533981765560805872472322186708756306455763611238082"
+ "951450138207325773702247286660824416431038520521352370291078"
+ "718247251712503010649103184487159314175972977390771951004404"
+ "935285742659293676372796949610394059160197507860285966047861"
+ "411940542821283013449073170622058378826534472881876688512697"
+ "758815111198429044432164893190718808033606471387328883409622"
+ "920327667611981052185172613337770061634130425782297578896747"
+ "215274225504191258419704542303129850621901180024012018244583"
+ "859069664741628533451563101979900751568200425006085702090401"
+ "221537517047980048268055449980601076610965506150742174772246"
+ "118061736140257508229467892560527108358789784539076822640564"
+ "850851810352577863861819577512851607395927299014823941534626"
+ "348696657393457745078724366706324437838188311582720760585617"
+ "487635004508688532062666933131188059377591626964364639542322"
+ "054994079047698970924302742015839080613569097514938471468421"
+ "996493818271996291393146497945863918551953149000943761983830"
+ "636236545375480765488470416349046929644442714477859372568735"
+ "843708739015199069466751627920202433249482821065761826195203"
+ "859723026379941258427585166740391065737087970718105336581850"
+ "268003743156009120998264173899565279323585156937231413010764"
+ "716608523561569725709426913310091413578317885628039213932500"
+ "135284171861048461662744818955691362183779165069982032305970"
+ "876642081013358484182671863168168338174351197426412625098421"
+ "481239711997827391790388986589171883679226337788805245818923"
+ "874607498645601668109872286941958827402018143065273281785872"
+ "847384936953936746391717131732488209980499904305446724778559"
+ "203846472344227623989606643158012375642854007494547242775256"
+ "898117140062170585337487588594307260069257691479046720590527"
+ "237259474018798808190031749318500514291360716338072006978678"
+ "678209533184089369407377832511947183352849291708100854730341"
+ "450938156361786419525775154653957546143580362599388832564788"
+ "354103919236836698740026304968121883147777634511851850370958"
+ "884085902337976245656103068392811534994239396318567712305532"
+ "477169378421492493173704379367954605145484562415027095545060"
+ "831874739575572895083275461127704135960230120513850917554331"
+ "352277278650414100755269190224957237517573174092361876919730"
+ "465289835269438666544826003345857532325281423386809827947616"
+ "676425828491143428807224317894169834736598542769698312957949"
+ "605903203284128114992351808708487688511436903322773652124574"
+ "055471177142349271989998235771191022554548042468832219533624"
+ "049225313628185783780849179599378819912520555522211658107113"
+ "447678746843053930790961744210668515951907105384498734366645"
+ "249428031772015356705436411724477514133655840609854880392450"
+ "949605226182519804314027265530362531560532656953025288585499"
+ "182228921920121831359074541201044664224711170390199159133806"
+ "269332015718061873656943996928324527943031265119266878834003"
+ "362682519426029626295988425859770358488877080196120965282298"
+ "232237612230358616986168510604382051044429343285625121039569"
+ "326126486782398017268335279614177221030172599765237380415252"
+ "503716285229140380445599733136737846363243777324290551807506"
+ "541472429585746028822540006160866496164919640007935962267377"
+ "060789839526907505659662711614828949104249176417092401488510"
+ "615823548277477841813412329397443687705199567361868375111535"
+ "380877143498420444773617475831606309624504731127984157999557"
+ "818660940286424404275144312853627845343063342311866285268837"
+ "422960089441895882484245945054082617645214582938928610352277"
+ "410119555602965075325424443356593793852682899089314976629899"
+ "773835991388717888860719076570986705247088078593793511009142"
+ "474344996635349786568175384138024607561209403361748867467629"
+ "682257007702707626687955791367383934101209955804380644234879"
+ "805395123927491333463152240956446177043487579040223002287264"
+ "756843617701865806869707173187939918037456096349272671452872"
+ "922420893858994027251574788837911846161770227169407508741963"
+ "414729807676477574570702693444290823666440055726552795145348"
+ "219168459767427369197825367869095117877723957392541043867909"
+ "937470060997392012820142238132910823657536940367596076523833"
+ "377812701709657429614832107556695928504222183715979980013356"
+ "323996396963861087268039321030018015202061305161341454716371"
+ "377251261775727795597989586636757177645626856419109247702765"
+ "013583220037644023978372654055269485171726959848928885152966"
+ "097502777563956522973459672620583266843497935454194334506297"
+ "789118714656105011811810822332373521084368112861541360109122"
+ "200791235053695977711430654151451133236893607856092978814379"
+ "881439122150752237064864676736420913214731240701495311353237"
+ "983819572849112853697828591806699104099315306435617990388595"
+ "202795271374965360450205351235544991668088723423877385558163"
+ "617247959486687176509451394010328416791411019672026111081271"
+ "677642426015450739505038057545285042073081841299473107930734"
+ "353837688028012401932104019803872355878454440858434446609098"
+ "280206732652900093156204893287546907987495659518059539534709"
+ "328514027916546796559631836574970153581238433324096828364072"
+ "134400344200269161377205676209909802573933271591397018622517"
+ "645956348413413974664794017053790027535048049046885143930077"
+ "194991519470308057661102259067039984493186760977741752890345"
+ "473192220637893214146475540262942007429381634927003835133941"
+ "914676847385135317162915391223879714190592014303606413170523"
+ "042176230523286150385679951115593656516900591671184538913558"
+ "092816251191243853120415613844777512078954866614360029341206"
+ "576716710688850917256800353066853946058824831651339265256785"
+ "622460269729620332892007335442599404495662483134697945884683"
+ "759795006415186716458374920343394259217852886898131157533184"
+ "894159749247043678238750268753264909309649831534740397743600"
+ "139998210203084676369899478505461752324146318698089839450421"
+ "143076361782530689506566153604543149790375911800793483912288"
+ "188586309176946988353987684054352129570631591985578449323560"
+ "386626892598170269027020282959579435080091825791399174445592"
+ "26833433740466716699302196502685546875e-4951",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x1p-16444,
+ -0x1p-16444,
+ -0x8p-16448,
+ -0x8p-16448,
+ true,
+ -0xcp-16448,
+ -0xcp-16448,
+ -0xcp-16448,
+ -0xcp-16448,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ true,
+ -0xcp-16448,
+ -0xcp-16448,
+ -0xcp-16448,
+ -0xcp-16448),
+ TEST ("-5.467799297823711903792608900429129724598576223540345015581"
+ "470730542557532950096605214341062938740807795871021020805296"
+ "652950478448933048254960262113384713508225733871766897517853"
+ "837895708450339634932343848975116093410479690330290902886861"
+ "199931259216523277807574569082153073133673942958789577402321"
+ "393933101298533191266102118889630609532339508457854220031996"
+ "317935940718000325144008438048416150458546268408294693278282"
+ "948818382981756745231443707694395053270779125240469926867881"
+ "019850287125023579685557790983055974962881759919483752202903"
+ "689199564880305684635452065363595791988290536352100701716974"
+ "146329604439226626943340805268641901769971862776194876385604"
+ "059269084172123930049144599166605103175580232672032966645406"
+ "656863031434873551175363941825798425331906382524706572766485"
+ "232874542230564262609161782396887243896247009244068837251567"
+ "783223271286692480010679711347802408351619999199127493689411"
+ "300623337751847138939498426200450305845548565910009066524152"
+ "545480362818290224140170178363735317929685005697363930594593"
+ "881342895328789259362029119598601112899006188879876371854878"
+ "902571753767478028100558334716504784604592507791482451533133"
+ "513128606357440718182123637790769320922442349066328991687862"
+ "072550779316393139037201187579972933016227874898505255743233"
+ "300533498951938156636406532613846576145617323141684480726409"
+ "074184197224754542490884392813625365330881348799432844624838"
+ "960826144439157361917744290729073116318858191758821942010704"
+ "726536748514141391981088590968911224406479710632429529154589"
+ "293799132147906174349149006094094612827453365768213012516958"
+ "693057189940355112250629776318079573232513434098933115589372"
+ "428935891821270739299776803229999720720845111297142577993950"
+ "783716526325576426897121181953632299322177412313472666557946"
+ "026587137818658956285876183561334458426909806227578696972983"
+ "054578648540140777431341495495816167709600470194141141159275"
+ "548586447187051517332624446463129570157208744018317833998766"
+ "292676324122069807882266170905460107352347754465354279502046"
+ "825607840930640910087488682878186052982487934398794575125208"
+ "131434599031355068379234881462786244132403015573059216658125"
+ "100992278732459043154873457532866362865038072260302438341256"
+ "465144627211756104220773841311413109973101672893502315223943"
+ "131161953384837658368750910845308673019625511169535246418667"
+ "822192756475773031982522304934161885363133347824122722726808"
+ "458339668843622993626685401142719276703936351749165952313385"
+ "247253410412444111234661569689109707012146365225868127037807"
+ "653838169759426465847963786308715929383888075292817554540826"
+ "281340379356869541699838857230452874882475626566568389051842"
+ "269616942233880613753230478468266244820792868174047618834373"
+ "911783352591638681513579303490680611741310500871919788283761"
+ "473826205032029153949410495205647160664548204617663407545902"
+ "155255595959035495626212780995301367951250745142427183922194"
+ "679405686105598055836303373290577235698605118096647411642319"
+ "219474157243864921520422978127962037044537385134878691852739"
+ "978563080824265712270538180666161627113218201779779366124407"
+ "844574754753562338454876981852965553927903650323407245581099"
+ "158807518181769597517311013648265985455750620305808055101887"
+ "320313826045110985510052672007356612620966612560448241370561"
+ "199679677792733282710356886335229149926131229035514374201804"
+ "225447070710784729359320523404977483919175478103049697809100"
+ "609955967524096673011016762490361065647326710555615563378359"
+ "408954626110765311053180827944575772439918612038754867514863"
+ "217604919070168030521022438807226197480679192263641289752695"
+ "279367794662267414957708480356805124293407645094292709270568"
+ "454704291549032311245797185365876072558819037766647710690310"
+ "669384727884764603220129302332950334873072394721879741045233"
+ "391084791389282719581455185833551951893903144609338532918282"
+ "071417365794666174600590186688558973292265260457397284219723"
+ "118736526338195892522797003835806498724823327170646268765114"
+ "335047201804332131453475981952420330849091435859688615005340"
+ "662951243478815535510910054031985781353569592327342625691155"
+ "297753939420991863066846663288192966197121277244462515137195"
+ "342887549113968391968700872401047521725534791569882096021521"
+ "725739030856023532346309694644208054801875416636970616158970"
+ "521587368716636562878779650147005687012772946471436217221680"
+ "244104527691159700944328113538972913022260318566564643466194"
+ "762762807772321937689272738612051928757740541051011493615150"
+ "275299712275026278191137262599722341528351699547926563148579"
+ "945678256173476664846284964106409718181820427949855282782538"
+ "418620206551699936257338813616307747712660216941043590501407"
+ "704980849740902536932579576527206665027800420035787899091137"
+ "498285797710848848252835440631389386421149710576503050460098"
+ "225348880547453179874214337446508024003058237008669916793765"
+ "103830790970613932711932541885454647828573565454163547779034"
+ "696478261735426505076787833523027219489668014198674507463022"
+ "589310657355955884354584118602516953160415158848138916494891"
+ "482359394428713333626368035819136954032193064982447142548513"
+ "777798482352540211515117109331361325135068534382485905222012"
+ "689155196601835592087277572480712876900324312948680873379635"
+ "049766825511648515719101185883064389832362822347209928024358"
+ "316443434834701491039800443982197050828044087275939582794327"
+ "098500876914356235193809147621508354816413733354188380887001"
+ "911623409901345292980795015165229743643600614968493977578123"
+ "466095415615447864269417603852427781048383314979868134570808"
+ "915217919397946316940234061179348627230180807326753461268559"
+ "385959678786688421103134141790339174982532045466350837038525"
+ "183177847731101708972936115216192881538981857998354449098289"
+ "173408113131230974433096066603129145174088550345854388495636"
+ "765494379926460031453181542793269110787478232865475929357580"
+ "348192936196178107395850207543849907063319379969931169428718"
+ "329942347533981765560805872472322186708756306455763611238082"
+ "951450138207325773702247286660824416431038520521352370291078"
+ "718247251712503010649103184487159314175972977390771951004404"
+ "935285742659293676372796949610394059160197507860285966047861"
+ "411940542821283013449073170622058378826534472881876688512697"
+ "758815111198429044432164893190718808033606471387328883409622"
+ "920327667611981052185172613337770061634130425782297578896747"
+ "215274225504191258419704542303129850621901180024012018244583"
+ "859069664741628533451563101979900751568200425006085702090401"
+ "221537517047980048268055449980601076610965506150742174772246"
+ "118061736140257508229467892560527108358789784539076822640564"
+ "850851810352577863861819577512851607395927299014823941534626"
+ "348696657393457745078724366706324437838188311582720760585617"
+ "487635004508688532062666933131188059377591626964364639542322"
+ "054994079047698970924302742015839080613569097514938471468421"
+ "996493818271996291393146497945863918551953149000943761983830"
+ "636236545375480765488470416349046929644442714477859372568735"
+ "843708739015199069466751627920202433249482821065761826195203"
+ "859723026379941258427585166740391065737087970718105336581850"
+ "268003743156009120998264173899565279323585156937231413010764"
+ "716608523561569725709426913310091413578317885628039213932500"
+ "135284171861048461662744818955691362183779165069982032305970"
+ "876642081013358484182671863168168338174351197426412625098421"
+ "481239711997827391790388986589171883679226337788805245818923"
+ "874607498645601668109872286941958827402018143065273281785872"
+ "847384936953936746391717131732488209980499904305446724778559"
+ "203846472344227623989606643158012375642854007494547242775256"
+ "898117140062170585337487588594307260069257691479046720590527"
+ "237259474018798808190031749318500514291360716338072006978678"
+ "678209533184089369407377832511947183352849291708100854730341"
+ "450938156361786419525775154653957546143580362599388832564788"
+ "354103919236836698740026304968121883147777634511851850370958"
+ "884085902337976245656103068392811534994239396318567712305532"
+ "477169378421492493173704379367954605145484562415027095545060"
+ "831874739575572895083275461127704135960230120513850917554331"
+ "352277278650414100755269190224957237517573174092361876919730"
+ "465289835269438666544826003345857532325281423386809827947616"
+ "676425828491143428807224317894169834736598542769698312957949"
+ "605903203284128114992351808708487688511436903322773652124574"
+ "055471177142349271989998235771191022554548042468832219533624"
+ "049225313628185783780849179599378819912520555522211658107113"
+ "447678746843053930790961744210668515951907105384498734366645"
+ "249428031772015356705436411724477514133655840609854880392450"
+ "949605226182519804314027265530362531560532656953025288585499"
+ "182228921920121831359074541201044664224711170390199159133806"
+ "269332015718061873656943996928324527943031265119266878834003"
+ "362682519426029626295988425859770358488877080196120965282298"
+ "232237612230358616986168510604382051044429343285625121039569"
+ "326126486782398017268335279614177221030172599765237380415252"
+ "503716285229140380445599733136737846363243777324290551807506"
+ "541472429585746028822540006160866496164919640007935962267377"
+ "060789839526907505659662711614828949104249176417092401488510"
+ "615823548277477841813412329397443687705199567361868375111535"
+ "380877143498420444773617475831606309624504731127984157999557"
+ "818660940286424404275144312853627845343063342311866285268837"
+ "422960089441895882484245945054082617645214582938928610352277"
+ "410119555602965075325424443356593793852682899089314976629899"
+ "773835991388717888860719076570986705247088078593793511009142"
+ "474344996635349786568175384138024607561209403361748867467629"
+ "682257007702707626687955791367383934101209955804380644234879"
+ "805395123927491333463152240956446177043487579040223002287264"
+ "756843617701865806869707173187939918037456096349272671452872"
+ "922420893858994027251574788837911846161770227169407508741963"
+ "414729807676477574570702693444290823666440055726552795145348"
+ "219168459767427369197825367869095117877723957392541043867909"
+ "937470060997392012820142238132910823657536940367596076523833"
+ "377812701709657429614832107556695928504222183715979980013356"
+ "323996396963861087268039321030018015202061305161341454716371"
+ "377251261775727795597989586636757177645626856419109247702765"
+ "013583220037644023978372654055269485171726959848928885152966"
+ "097502777563956522973459672620583266843497935454194334506297"
+ "789118714656105011811810822332373521084368112861541360109122"
+ "200791235053695977711430654151451133236893607856092978814379"
+ "881439122150752237064864676736420913214731240701495311353237"
+ "983819572849112853697828591806699104099315306435617990388595"
+ "202795271374965360450205351235544991668088723423877385558163"
+ "617247959486687176509451394010328416791411019672026111081271"
+ "677642426015450739505038057545285042073081841299473107930734"
+ "353837688028012401932104019803872355878454440858434446609098"
+ "280206732652900093156204893287546907987495659518059539534709"
+ "328514027916546796559631836574970153581238433324096828364072"
+ "134400344200269161377205676209909802573933271591397018622517"
+ "645956348413413974664794017053790027535048049046885143930077"
+ "194991519470308057661102259067039984493186760977741752890345"
+ "473192220637893214146475540262942007429381634927003835133941"
+ "914676847385135317162915391223879714190592014303606413170523"
+ "042176230523286150385679951115593656516900591671184538913558"
+ "092816251191243853120415613844777512078954866614360029341206"
+ "576716710688850917256800353066853946058824831651339265256785"
+ "622460269729620332892007335442599404495662483134697945884683"
+ "759795006415186716458374920343394259217852886898131157533184"
+ "894159749247043678238750268753264909309649831534740397743600"
+ "139998210203084676369899478505461752324146318698089839450421"
+ "143076361782530689506566153604543149790375911800793483912288"
+ "188586309176946988353987684054352129570631591985578449323560"
+ "386626892598170269027020282959579435080091825791399174445592"
+ "2683343374046671669930219650268554687501e-4951",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x1p-16444,
+ -0x1p-16444,
+ -0x8p-16448,
+ -0x8p-16448,
+ false,
+ -0x1p-16444,
+ -0xcp-16448,
+ -0xcp-16448,
+ -0xcp-16448,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0xc.000000000004p-16448,
+ -0xcp-16448,
+ -0xcp-16448,
+ -0xcp-16448),
+ TEST ("5.4677992978237119037926089004291297245985762235403450155814"
+ "707305425575329500966052143410629387408077958710210208052966"
+ "529504784489330482549602621133847135082257338717668975178538"
+ "378957084503396349323438489751160934104796903302909028868611"
+ "999312592165232778075745690821530731336739429587895774023213"
+ "939331012985331912661021188896306095323395084578542200319963"
+ "179359407180003251440084380484161504585462684082946932782829"
+ "488183829817567452314437076943950532707791252404699268678810"
+ "198502871250235796855577909830559749628817599194837522029036"
+ "891995648803056846354520653635957919882905363521007017169741"
+ "463296044392266269433408052686419017699718627761948763856040"
+ "592690841721239300491445991666051031755802326720329666454066"
+ "568630314348735511753639418257984253319063825247065727664852"
+ "328745422305642626091617823968872438962470092440688372515677"
+ "832232712866924800106797113478024083516199991991274936894113"
+ "006233377518471389394984262004503058455485659100090665241525"
+ "454803628182902241401701783637353179296850056973639305945938"
+ "813428953287892593620291195986011128990061888798763718548789"
+ "025717537674780281005583347165047846045925077914824515331335"
+ "131286063574407181821236377907693209224423490663289916878620"
+ "725507793163931390372011875799729330162278748985052557432333"
+ "005334989519381566364065326138465761456173231416844807264090"
+ "741841972247545424908843928136253653308813487994328446248389"
+ "608261444391573619177442907290731163188581917588219420107047"
+ "265367485141413919810885909689112244064797106324295291545892"
+ "937991321479061743491490060940946128274533657682130125169586"
+ "930571899403551122506297763180795732325134340989331155893724"
+ "289358918212707392997768032299997207208451112971425779939507"
+ "837165263255764268971211819536322993221774123134726665579460"
+ "265871378186589562858761835613344584269098062275786969729830"
+ "545786485401407774313414954958161677096004701941411411592755"
+ "485864471870515173326244464631295701572087440183178339987662"
+ "926763241220698078822661709054601073523477544653542795020468"
+ "256078409306409100874886828781860529824879343987945751252081"
+ "314345990313550683792348814627862441324030155730592166581251"
+ "009922787324590431548734575328663628650380722603024383412564"
+ "651446272117561042207738413114131099731016728935023152239431"
+ "311619533848376583687509108453086730196255111695352464186678"
+ "221927564757730319825223049341618853631333478241227227268084"
+ "583396688436229936266854011427192767039363517491659523133852"
+ "472534104124441112346615696891097070121463652258681270378076"
+ "538381697594264658479637863087159293838880752928175545408262"
+ "813403793568695416998388572304528748824756265665683890518422"
+ "696169422338806137532304784682662448207928681740476188343739"
+ "117833525916386815135793034906806117413105008719197882837614"
+ "738262050320291539494104952056471606645482046176634075459021"
+ "552555959590354956262127809953013679512507451424271839221946"
+ "794056861055980558363033732905772356986051180966474116423192"
+ "194741572438649215204229781279620370445373851348786918527399"
+ "785630808242657122705381806661616271132182017797793661244078"
+ "445747547535623384548769818529655539279036503234072455810991"
+ "588075181817695975173110136482659854557506203058080551018873"
+ "203138260451109855100526720073566126209666125604482413705611"
+ "996796777927332827103568863352291499261312290355143742018042"
+ "254470707107847293593205234049774839191754781030496978091006"
+ "099559675240966730110167624903610656473267105556155633783594"
+ "089546261107653110531808279445757724399186120387548675148632"
+ "176049190701680305210224388072261974806791922636412897526952"
+ "793677946622674149577084803568051242934076450942927092705684"
+ "547042915490323112457971853658760725588190377666477106903106"
+ "693847278847646032201293023329503348730723947218797410452333"
+ "910847913892827195814551858335519518939031446093385329182820"
+ "714173657946661746005901866885589732922652604573972842197231"
+ "187365263381958925227970038358064987248233271706462687651143"
+ "350472018043321314534759819524203308490914358596886150053406"
+ "629512434788155355109100540319857813535695923273426256911552"
+ "977539394209918630668466632881929661971212772444625151371953"
+ "428875491139683919687008724010475217255347915698820960215217"
+ "257390308560235323463096946442080548018754166369706161589705"
+ "215873687166365628787796501470056870127729464714362172216802"
+ "441045276911597009443281135389729130222603185665646434661947"
+ "627628077723219376892727386120519287577405410510114936151502"
+ "752997122750262781911372625997223415283516995479265631485799"
+ "456782561734766648462849641064097181818204279498552827825384"
+ "186202065516999362573388136163077477126602169410435905014077"
+ "049808497409025369325795765272066650278004200357878990911374"
+ "982857977108488482528354406313893864211497105765030504600982"
+ "253488805474531798742143374465080240030582370086699167937651"
+ "038307909706139327119325418854546478285735654541635477790346"
+ "964782617354265050767878335230272194896680141986745074630225"
+ "893106573559558843545841186025169531604151588481389164948914"
+ "823593944287133336263680358191369540321930649824471425485137"
+ "777984823525402115151171093313613251350685343824859052220126"
+ "891551966018355920872775724807128769003243129486808733796350"
+ "497668255116485157191011858830643898323628223472099280243583"
+ "164434348347014910398004439821970508280440872759395827943270"
+ "985008769143562351938091476215083548164137333541883808870019"
+ "116234099013452929807950151652297436436006149684939775781234"
+ "660954156154478642694176038524277810483833149798681345708089"
+ "152179193979463169402340611793486272301808073267534612685593"
+ "859596787866884211031341417903391749825320454663508370385251"
+ "831778477311017089729361152161928815389818579983544490982891"
+ "734081131312309744330960666031291451740885503458543884956367"
+ "654943799264600314531815427932691107874782328654759293575803"
+ "481929361961781073958502075438499070633193799699311694287183"
+ "299423475339817655608058724723221867087563064557636112380829"
+ "514501382073257737022472866608244164310385205213523702910787"
+ "182472517125030106491031844871593141759729773907719510044049"
+ "352857426592936763727969496103940591601975078602859660478614"
+ "119405428212830134490731706220583788265344728818766885126977"
+ "588151111984290444321648931907188080336064713873288834096229"
+ "203276676119810521851726133377700616341304257822975788967472"
+ "152742255041912584197045423031298506219011800240120182445838"
+ "590696647416285334515631019799007515682004250060857020904012"
+ "215375170479800482680554499806010766109655061507421747722461"
+ "180617361402575082294678925605271083587897845390768226405648"
+ "508518103525778638618195775128516073959272990148239415346263"
+ "486966573934577450787243667063244378381883115827207605856174"
+ "876350045086885320626669331311880593775916269643646395423220"
+ "549940790476989709243027420158390806135690975149384714684219"
+ "964938182719962913931464979458639185519531490009437619838306"
+ "362365453754807654884704163490469296444427144778593725687358"
+ "437087390151990694667516279202024332494828210657618261952038"
+ "597230263799412584275851667403910657370879707181053365818502"
+ "680037431560091209982641738995652793235851569372314130107647"
+ "166085235615697257094269133100914135783178856280392139325001"
+ "352841718610484616627448189556913621837791650699820323059708"
+ "766420810133584841826718631681683381743511974264126250984214"
+ "812397119978273917903889865891718836792263377888052458189238"
+ "746074986456016681098722869419588274020181430652732817858728"
+ "473849369539367463917171317324882099804999043054467247785592"
+ "038464723442276239896066431580123756428540074945472427752568"
+ "981171400621705853374875885943072600692576914790467205905272"
+ "372594740187988081900317493185005142913607163380720069786786"
+ "782095331840893694073778325119471833528492917081008547303414"
+ "509381563617864195257751546539575461435803625993888325647883"
+ "541039192368366987400263049681218831477776345118518503709588"
+ "840859023379762456561030683928115349942393963185677123055324"
+ "771693784214924931737043793679546051454845624150270955450608"
+ "318747395755728950832754611277041359602301205138509175543313"
+ "522772786504141007552691902249572375175731740923618769197304"
+ "652898352694386665448260033458575323252814233868098279476166"
+ "764258284911434288072243178941698347365985427696983129579496"
+ "059032032841281149923518087084876885114369033227736521245740"
+ "554711771423492719899982357711910225545480424688322195336240"
+ "492253136281857837808491795993788199125205555222116581071134"
+ "476787468430539307909617442106685159519071053844987343666452"
+ "494280317720153567054364117244775141336558406098548803924509"
+ "496052261825198043140272655303625315605326569530252885854991"
+ "822289219201218313590745412010446642247111703901991591338062"
+ "693320157180618736569439969283245279430312651192668788340033"
+ "626825194260296262959884258597703584888770801961209652822982"
+ "322376122303586169861685106043820510444293432856251210395693"
+ "261264867823980172683352796141772210301725997652373804152525"
+ "037162852291403804455997331367378463632437773242905518075065"
+ "414724295857460288225400061608664961649196400079359622673770"
+ "607898395269075056596627116148289491042491764170924014885106"
+ "158235482774778418134123293974436877051995673618683751115353"
+ "808771434984204447736174758316063096245047311279841579995578"
+ "186609402864244042751443128536278453430633423118662852688374"
+ "229600894418958824842459450540826176452145829389286103522774"
+ "101195556029650753254244433565937938526828990893149766298997"
+ "738359913887178888607190765709867052470880785937935110091424"
+ "743449966353497865681753841380246075612094033617488674676296"
+ "822570077027076266879557913673839341012099558043806442348798"
+ "053951239274913334631522409564461770434875790402230022872647"
+ "568436177018658068697071731879399180374560963492726714528729"
+ "224208938589940272515747888379118461617702271694075087419634"
+ "147298076764775745707026934442908236664400557265527951453482"
+ "191684597674273691978253678690951178777239573925410438679099"
+ "374700609973920128201422381329108236575369403675960765238333"
+ "778127017096574296148321075566959285042221837159799800133563"
+ "239963969638610872680393210300180152020613051613414547163713"
+ "772512617757277955979895866367571776456268564191092477027650"
+ "135832200376440239783726540552694851717269598489288851529660"
+ "975027775639565229734596726205832668434979354541943345062977"
+ "891187146561050118118108223323735210843681128615413601091222"
+ "007912350536959777114306541514511332368936078560929788143798"
+ "814391221507522370648646767364209132147312407014953113532379"
+ "838195728491128536978285918066991040993153064356179903885952"
+ "027952713749653604502053512355449916680887234238773855581636"
+ "172479594866871765094513940103284167914110196720261110812716"
+ "776424260154507395050380575452850420730818412994731079307343"
+ "538376880280124019321040198038723558784544408584344466090982"
+ "802067326529000931562048932875469079874956595180595395347093"
+ "285140279165467965596318365749701535812384333240968283640721"
+ "344003442002691613772056762099098025739332715913970186225176"
+ "459563484134139746647940170537900275350480490468851439300771"
+ "949915194703080576611022590670399844931867609777417528903454"
+ "731922206378932141464755402629420074293816349270038351339419"
+ "146768473851353171629153912238797141905920143036064131705230"
+ "421762305232861503856799511155936565169005916711845389135580"
+ "928162511912438531204156138447775120789548666143600293412065"
+ "767167106888509172568003530668539460588248316513392652567856"
+ "224602697296203328920073354425994044956624831346979458846837"
+ "597950064151867164583749203433942592178528868981311575331848"
+ "941597492470436782387502687532649093096498315347403977436001"
+ "399982102030846763698994785054617523241463186980898394504211"
+ "430763617825306895065661536045431497903759118007934839122881"
+ "885863091769469883539876840543521295706315919855784493235603"
+ "866268925981702690270202829595794350800918257913991744455922"
+ "683343374046671669930219650268554687499e-4951",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x8p-16448,
+ 0x8p-16448,
+ 0x8p-16448,
+ 0x1p-16444,
+ false,
+ 0x8p-16448,
+ 0xcp-16448,
+ 0x8p-16448,
+ 0xcp-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0xb.fffffffffffcp-16448,
+ 0xcp-16448,
+ 0xb.fffffffffffcp-16448,
+ 0xcp-16448),
+ TEST ("5.4677992978237119037926089004291297245985762235403450155814"
+ "707305425575329500966052143410629387408077958710210208052966"
+ "529504784489330482549602621133847135082257338717668975178538"
+ "378957084503396349323438489751160934104796903302909028868611"
+ "999312592165232778075745690821530731336739429587895774023213"
+ "939331012985331912661021188896306095323395084578542200319963"
+ "179359407180003251440084380484161504585462684082946932782829"
+ "488183829817567452314437076943950532707791252404699268678810"
+ "198502871250235796855577909830559749628817599194837522029036"
+ "891995648803056846354520653635957919882905363521007017169741"
+ "463296044392266269433408052686419017699718627761948763856040"
+ "592690841721239300491445991666051031755802326720329666454066"
+ "568630314348735511753639418257984253319063825247065727664852"
+ "328745422305642626091617823968872438962470092440688372515677"
+ "832232712866924800106797113478024083516199991991274936894113"
+ "006233377518471389394984262004503058455485659100090665241525"
+ "454803628182902241401701783637353179296850056973639305945938"
+ "813428953287892593620291195986011128990061888798763718548789"
+ "025717537674780281005583347165047846045925077914824515331335"
+ "131286063574407181821236377907693209224423490663289916878620"
+ "725507793163931390372011875799729330162278748985052557432333"
+ "005334989519381566364065326138465761456173231416844807264090"
+ "741841972247545424908843928136253653308813487994328446248389"
+ "608261444391573619177442907290731163188581917588219420107047"
+ "265367485141413919810885909689112244064797106324295291545892"
+ "937991321479061743491490060940946128274533657682130125169586"
+ "930571899403551122506297763180795732325134340989331155893724"
+ "289358918212707392997768032299997207208451112971425779939507"
+ "837165263255764268971211819536322993221774123134726665579460"
+ "265871378186589562858761835613344584269098062275786969729830"
+ "545786485401407774313414954958161677096004701941411411592755"
+ "485864471870515173326244464631295701572087440183178339987662"
+ "926763241220698078822661709054601073523477544653542795020468"
+ "256078409306409100874886828781860529824879343987945751252081"
+ "314345990313550683792348814627862441324030155730592166581251"
+ "009922787324590431548734575328663628650380722603024383412564"
+ "651446272117561042207738413114131099731016728935023152239431"
+ "311619533848376583687509108453086730196255111695352464186678"
+ "221927564757730319825223049341618853631333478241227227268084"
+ "583396688436229936266854011427192767039363517491659523133852"
+ "472534104124441112346615696891097070121463652258681270378076"
+ "538381697594264658479637863087159293838880752928175545408262"
+ "813403793568695416998388572304528748824756265665683890518422"
+ "696169422338806137532304784682662448207928681740476188343739"
+ "117833525916386815135793034906806117413105008719197882837614"
+ "738262050320291539494104952056471606645482046176634075459021"
+ "552555959590354956262127809953013679512507451424271839221946"
+ "794056861055980558363033732905772356986051180966474116423192"
+ "194741572438649215204229781279620370445373851348786918527399"
+ "785630808242657122705381806661616271132182017797793661244078"
+ "445747547535623384548769818529655539279036503234072455810991"
+ "588075181817695975173110136482659854557506203058080551018873"
+ "203138260451109855100526720073566126209666125604482413705611"
+ "996796777927332827103568863352291499261312290355143742018042"
+ "254470707107847293593205234049774839191754781030496978091006"
+ "099559675240966730110167624903610656473267105556155633783594"
+ "089546261107653110531808279445757724399186120387548675148632"
+ "176049190701680305210224388072261974806791922636412897526952"
+ "793677946622674149577084803568051242934076450942927092705684"
+ "547042915490323112457971853658760725588190377666477106903106"
+ "693847278847646032201293023329503348730723947218797410452333"
+ "910847913892827195814551858335519518939031446093385329182820"
+ "714173657946661746005901866885589732922652604573972842197231"
+ "187365263381958925227970038358064987248233271706462687651143"
+ "350472018043321314534759819524203308490914358596886150053406"
+ "629512434788155355109100540319857813535695923273426256911552"
+ "977539394209918630668466632881929661971212772444625151371953"
+ "428875491139683919687008724010475217255347915698820960215217"
+ "257390308560235323463096946442080548018754166369706161589705"
+ "215873687166365628787796501470056870127729464714362172216802"
+ "441045276911597009443281135389729130222603185665646434661947"
+ "627628077723219376892727386120519287577405410510114936151502"
+ "752997122750262781911372625997223415283516995479265631485799"
+ "456782561734766648462849641064097181818204279498552827825384"
+ "186202065516999362573388136163077477126602169410435905014077"
+ "049808497409025369325795765272066650278004200357878990911374"
+ "982857977108488482528354406313893864211497105765030504600982"
+ "253488805474531798742143374465080240030582370086699167937651"
+ "038307909706139327119325418854546478285735654541635477790346"
+ "964782617354265050767878335230272194896680141986745074630225"
+ "893106573559558843545841186025169531604151588481389164948914"
+ "823593944287133336263680358191369540321930649824471425485137"
+ "777984823525402115151171093313613251350685343824859052220126"
+ "891551966018355920872775724807128769003243129486808733796350"
+ "497668255116485157191011858830643898323628223472099280243583"
+ "164434348347014910398004439821970508280440872759395827943270"
+ "985008769143562351938091476215083548164137333541883808870019"
+ "116234099013452929807950151652297436436006149684939775781234"
+ "660954156154478642694176038524277810483833149798681345708089"
+ "152179193979463169402340611793486272301808073267534612685593"
+ "859596787866884211031341417903391749825320454663508370385251"
+ "831778477311017089729361152161928815389818579983544490982891"
+ "734081131312309744330960666031291451740885503458543884956367"
+ "654943799264600314531815427932691107874782328654759293575803"
+ "481929361961781073958502075438499070633193799699311694287183"
+ "299423475339817655608058724723221867087563064557636112380829"
+ "514501382073257737022472866608244164310385205213523702910787"
+ "182472517125030106491031844871593141759729773907719510044049"
+ "352857426592936763727969496103940591601975078602859660478614"
+ "119405428212830134490731706220583788265344728818766885126977"
+ "588151111984290444321648931907188080336064713873288834096229"
+ "203276676119810521851726133377700616341304257822975788967472"
+ "152742255041912584197045423031298506219011800240120182445838"
+ "590696647416285334515631019799007515682004250060857020904012"
+ "215375170479800482680554499806010766109655061507421747722461"
+ "180617361402575082294678925605271083587897845390768226405648"
+ "508518103525778638618195775128516073959272990148239415346263"
+ "486966573934577450787243667063244378381883115827207605856174"
+ "876350045086885320626669331311880593775916269643646395423220"
+ "549940790476989709243027420158390806135690975149384714684219"
+ "964938182719962913931464979458639185519531490009437619838306"
+ "362365453754807654884704163490469296444427144778593725687358"
+ "437087390151990694667516279202024332494828210657618261952038"
+ "597230263799412584275851667403910657370879707181053365818502"
+ "680037431560091209982641738995652793235851569372314130107647"
+ "166085235615697257094269133100914135783178856280392139325001"
+ "352841718610484616627448189556913621837791650699820323059708"
+ "766420810133584841826718631681683381743511974264126250984214"
+ "812397119978273917903889865891718836792263377888052458189238"
+ "746074986456016681098722869419588274020181430652732817858728"
+ "473849369539367463917171317324882099804999043054467247785592"
+ "038464723442276239896066431580123756428540074945472427752568"
+ "981171400621705853374875885943072600692576914790467205905272"
+ "372594740187988081900317493185005142913607163380720069786786"
+ "782095331840893694073778325119471833528492917081008547303414"
+ "509381563617864195257751546539575461435803625993888325647883"
+ "541039192368366987400263049681218831477776345118518503709588"
+ "840859023379762456561030683928115349942393963185677123055324"
+ "771693784214924931737043793679546051454845624150270955450608"
+ "318747395755728950832754611277041359602301205138509175543313"
+ "522772786504141007552691902249572375175731740923618769197304"
+ "652898352694386665448260033458575323252814233868098279476166"
+ "764258284911434288072243178941698347365985427696983129579496"
+ "059032032841281149923518087084876885114369033227736521245740"
+ "554711771423492719899982357711910225545480424688322195336240"
+ "492253136281857837808491795993788199125205555222116581071134"
+ "476787468430539307909617442106685159519071053844987343666452"
+ "494280317720153567054364117244775141336558406098548803924509"
+ "496052261825198043140272655303625315605326569530252885854991"
+ "822289219201218313590745412010446642247111703901991591338062"
+ "693320157180618736569439969283245279430312651192668788340033"
+ "626825194260296262959884258597703584888770801961209652822982"
+ "322376122303586169861685106043820510444293432856251210395693"
+ "261264867823980172683352796141772210301725997652373804152525"
+ "037162852291403804455997331367378463632437773242905518075065"
+ "414724295857460288225400061608664961649196400079359622673770"
+ "607898395269075056596627116148289491042491764170924014885106"
+ "158235482774778418134123293974436877051995673618683751115353"
+ "808771434984204447736174758316063096245047311279841579995578"
+ "186609402864244042751443128536278453430633423118662852688374"
+ "229600894418958824842459450540826176452145829389286103522774"
+ "101195556029650753254244433565937938526828990893149766298997"
+ "738359913887178888607190765709867052470880785937935110091424"
+ "743449966353497865681753841380246075612094033617488674676296"
+ "822570077027076266879557913673839341012099558043806442348798"
+ "053951239274913334631522409564461770434875790402230022872647"
+ "568436177018658068697071731879399180374560963492726714528729"
+ "224208938589940272515747888379118461617702271694075087419634"
+ "147298076764775745707026934442908236664400557265527951453482"
+ "191684597674273691978253678690951178777239573925410438679099"
+ "374700609973920128201422381329108236575369403675960765238333"
+ "778127017096574296148321075566959285042221837159799800133563"
+ "239963969638610872680393210300180152020613051613414547163713"
+ "772512617757277955979895866367571776456268564191092477027650"
+ "135832200376440239783726540552694851717269598489288851529660"
+ "975027775639565229734596726205832668434979354541943345062977"
+ "891187146561050118118108223323735210843681128615413601091222"
+ "007912350536959777114306541514511332368936078560929788143798"
+ "814391221507522370648646767364209132147312407014953113532379"
+ "838195728491128536978285918066991040993153064356179903885952"
+ "027952713749653604502053512355449916680887234238773855581636"
+ "172479594866871765094513940103284167914110196720261110812716"
+ "776424260154507395050380575452850420730818412994731079307343"
+ "538376880280124019321040198038723558784544408584344466090982"
+ "802067326529000931562048932875469079874956595180595395347093"
+ "285140279165467965596318365749701535812384333240968283640721"
+ "344003442002691613772056762099098025739332715913970186225176"
+ "459563484134139746647940170537900275350480490468851439300771"
+ "949915194703080576611022590670399844931867609777417528903454"
+ "731922206378932141464755402629420074293816349270038351339419"
+ "146768473851353171629153912238797141905920143036064131705230"
+ "421762305232861503856799511155936565169005916711845389135580"
+ "928162511912438531204156138447775120789548666143600293412065"
+ "767167106888509172568003530668539460588248316513392652567856"
+ "224602697296203328920073354425994044956624831346979458846837"
+ "597950064151867164583749203433942592178528868981311575331848"
+ "941597492470436782387502687532649093096498315347403977436001"
+ "399982102030846763698994785054617523241463186980898394504211"
+ "430763617825306895065661536045431497903759118007934839122881"
+ "885863091769469883539876840543521295706315919855784493235603"
+ "866268925981702690270202829595794350800918257913991744455922"
+ "6833433740466716699302196502685546875e-4951",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x8p-16448,
+ 0x1p-16444,
+ 0x8p-16448,
+ 0x1p-16444,
+ true,
+ 0xcp-16448,
+ 0xcp-16448,
+ 0xcp-16448,
+ 0xcp-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ true,
+ 0xcp-16448,
+ 0xcp-16448,
+ 0xcp-16448,
+ 0xcp-16448),
+ TEST ("5.4677992978237119037926089004291297245985762235403450155814"
+ "707305425575329500966052143410629387408077958710210208052966"
+ "529504784489330482549602621133847135082257338717668975178538"
+ "378957084503396349323438489751160934104796903302909028868611"
+ "999312592165232778075745690821530731336739429587895774023213"
+ "939331012985331912661021188896306095323395084578542200319963"
+ "179359407180003251440084380484161504585462684082946932782829"
+ "488183829817567452314437076943950532707791252404699268678810"
+ "198502871250235796855577909830559749628817599194837522029036"
+ "891995648803056846354520653635957919882905363521007017169741"
+ "463296044392266269433408052686419017699718627761948763856040"
+ "592690841721239300491445991666051031755802326720329666454066"
+ "568630314348735511753639418257984253319063825247065727664852"
+ "328745422305642626091617823968872438962470092440688372515677"
+ "832232712866924800106797113478024083516199991991274936894113"
+ "006233377518471389394984262004503058455485659100090665241525"
+ "454803628182902241401701783637353179296850056973639305945938"
+ "813428953287892593620291195986011128990061888798763718548789"
+ "025717537674780281005583347165047846045925077914824515331335"
+ "131286063574407181821236377907693209224423490663289916878620"
+ "725507793163931390372011875799729330162278748985052557432333"
+ "005334989519381566364065326138465761456173231416844807264090"
+ "741841972247545424908843928136253653308813487994328446248389"
+ "608261444391573619177442907290731163188581917588219420107047"
+ "265367485141413919810885909689112244064797106324295291545892"
+ "937991321479061743491490060940946128274533657682130125169586"
+ "930571899403551122506297763180795732325134340989331155893724"
+ "289358918212707392997768032299997207208451112971425779939507"
+ "837165263255764268971211819536322993221774123134726665579460"
+ "265871378186589562858761835613344584269098062275786969729830"
+ "545786485401407774313414954958161677096004701941411411592755"
+ "485864471870515173326244464631295701572087440183178339987662"
+ "926763241220698078822661709054601073523477544653542795020468"
+ "256078409306409100874886828781860529824879343987945751252081"
+ "314345990313550683792348814627862441324030155730592166581251"
+ "009922787324590431548734575328663628650380722603024383412564"
+ "651446272117561042207738413114131099731016728935023152239431"
+ "311619533848376583687509108453086730196255111695352464186678"
+ "221927564757730319825223049341618853631333478241227227268084"
+ "583396688436229936266854011427192767039363517491659523133852"
+ "472534104124441112346615696891097070121463652258681270378076"
+ "538381697594264658479637863087159293838880752928175545408262"
+ "813403793568695416998388572304528748824756265665683890518422"
+ "696169422338806137532304784682662448207928681740476188343739"
+ "117833525916386815135793034906806117413105008719197882837614"
+ "738262050320291539494104952056471606645482046176634075459021"
+ "552555959590354956262127809953013679512507451424271839221946"
+ "794056861055980558363033732905772356986051180966474116423192"
+ "194741572438649215204229781279620370445373851348786918527399"
+ "785630808242657122705381806661616271132182017797793661244078"
+ "445747547535623384548769818529655539279036503234072455810991"
+ "588075181817695975173110136482659854557506203058080551018873"
+ "203138260451109855100526720073566126209666125604482413705611"
+ "996796777927332827103568863352291499261312290355143742018042"
+ "254470707107847293593205234049774839191754781030496978091006"
+ "099559675240966730110167624903610656473267105556155633783594"
+ "089546261107653110531808279445757724399186120387548675148632"
+ "176049190701680305210224388072261974806791922636412897526952"
+ "793677946622674149577084803568051242934076450942927092705684"
+ "547042915490323112457971853658760725588190377666477106903106"
+ "693847278847646032201293023329503348730723947218797410452333"
+ "910847913892827195814551858335519518939031446093385329182820"
+ "714173657946661746005901866885589732922652604573972842197231"
+ "187365263381958925227970038358064987248233271706462687651143"
+ "350472018043321314534759819524203308490914358596886150053406"
+ "629512434788155355109100540319857813535695923273426256911552"
+ "977539394209918630668466632881929661971212772444625151371953"
+ "428875491139683919687008724010475217255347915698820960215217"
+ "257390308560235323463096946442080548018754166369706161589705"
+ "215873687166365628787796501470056870127729464714362172216802"
+ "441045276911597009443281135389729130222603185665646434661947"
+ "627628077723219376892727386120519287577405410510114936151502"
+ "752997122750262781911372625997223415283516995479265631485799"
+ "456782561734766648462849641064097181818204279498552827825384"
+ "186202065516999362573388136163077477126602169410435905014077"
+ "049808497409025369325795765272066650278004200357878990911374"
+ "982857977108488482528354406313893864211497105765030504600982"
+ "253488805474531798742143374465080240030582370086699167937651"
+ "038307909706139327119325418854546478285735654541635477790346"
+ "964782617354265050767878335230272194896680141986745074630225"
+ "893106573559558843545841186025169531604151588481389164948914"
+ "823593944287133336263680358191369540321930649824471425485137"
+ "777984823525402115151171093313613251350685343824859052220126"
+ "891551966018355920872775724807128769003243129486808733796350"
+ "497668255116485157191011858830643898323628223472099280243583"
+ "164434348347014910398004439821970508280440872759395827943270"
+ "985008769143562351938091476215083548164137333541883808870019"
+ "116234099013452929807950151652297436436006149684939775781234"
+ "660954156154478642694176038524277810483833149798681345708089"
+ "152179193979463169402340611793486272301808073267534612685593"
+ "859596787866884211031341417903391749825320454663508370385251"
+ "831778477311017089729361152161928815389818579983544490982891"
+ "734081131312309744330960666031291451740885503458543884956367"
+ "654943799264600314531815427932691107874782328654759293575803"
+ "481929361961781073958502075438499070633193799699311694287183"
+ "299423475339817655608058724723221867087563064557636112380829"
+ "514501382073257737022472866608244164310385205213523702910787"
+ "182472517125030106491031844871593141759729773907719510044049"
+ "352857426592936763727969496103940591601975078602859660478614"
+ "119405428212830134490731706220583788265344728818766885126977"
+ "588151111984290444321648931907188080336064713873288834096229"
+ "203276676119810521851726133377700616341304257822975788967472"
+ "152742255041912584197045423031298506219011800240120182445838"
+ "590696647416285334515631019799007515682004250060857020904012"
+ "215375170479800482680554499806010766109655061507421747722461"
+ "180617361402575082294678925605271083587897845390768226405648"
+ "508518103525778638618195775128516073959272990148239415346263"
+ "486966573934577450787243667063244378381883115827207605856174"
+ "876350045086885320626669331311880593775916269643646395423220"
+ "549940790476989709243027420158390806135690975149384714684219"
+ "964938182719962913931464979458639185519531490009437619838306"
+ "362365453754807654884704163490469296444427144778593725687358"
+ "437087390151990694667516279202024332494828210657618261952038"
+ "597230263799412584275851667403910657370879707181053365818502"
+ "680037431560091209982641738995652793235851569372314130107647"
+ "166085235615697257094269133100914135783178856280392139325001"
+ "352841718610484616627448189556913621837791650699820323059708"
+ "766420810133584841826718631681683381743511974264126250984214"
+ "812397119978273917903889865891718836792263377888052458189238"
+ "746074986456016681098722869419588274020181430652732817858728"
+ "473849369539367463917171317324882099804999043054467247785592"
+ "038464723442276239896066431580123756428540074945472427752568"
+ "981171400621705853374875885943072600692576914790467205905272"
+ "372594740187988081900317493185005142913607163380720069786786"
+ "782095331840893694073778325119471833528492917081008547303414"
+ "509381563617864195257751546539575461435803625993888325647883"
+ "541039192368366987400263049681218831477776345118518503709588"
+ "840859023379762456561030683928115349942393963185677123055324"
+ "771693784214924931737043793679546051454845624150270955450608"
+ "318747395755728950832754611277041359602301205138509175543313"
+ "522772786504141007552691902249572375175731740923618769197304"
+ "652898352694386665448260033458575323252814233868098279476166"
+ "764258284911434288072243178941698347365985427696983129579496"
+ "059032032841281149923518087084876885114369033227736521245740"
+ "554711771423492719899982357711910225545480424688322195336240"
+ "492253136281857837808491795993788199125205555222116581071134"
+ "476787468430539307909617442106685159519071053844987343666452"
+ "494280317720153567054364117244775141336558406098548803924509"
+ "496052261825198043140272655303625315605326569530252885854991"
+ "822289219201218313590745412010446642247111703901991591338062"
+ "693320157180618736569439969283245279430312651192668788340033"
+ "626825194260296262959884258597703584888770801961209652822982"
+ "322376122303586169861685106043820510444293432856251210395693"
+ "261264867823980172683352796141772210301725997652373804152525"
+ "037162852291403804455997331367378463632437773242905518075065"
+ "414724295857460288225400061608664961649196400079359622673770"
+ "607898395269075056596627116148289491042491764170924014885106"
+ "158235482774778418134123293974436877051995673618683751115353"
+ "808771434984204447736174758316063096245047311279841579995578"
+ "186609402864244042751443128536278453430633423118662852688374"
+ "229600894418958824842459450540826176452145829389286103522774"
+ "101195556029650753254244433565937938526828990893149766298997"
+ "738359913887178888607190765709867052470880785937935110091424"
+ "743449966353497865681753841380246075612094033617488674676296"
+ "822570077027076266879557913673839341012099558043806442348798"
+ "053951239274913334631522409564461770434875790402230022872647"
+ "568436177018658068697071731879399180374560963492726714528729"
+ "224208938589940272515747888379118461617702271694075087419634"
+ "147298076764775745707026934442908236664400557265527951453482"
+ "191684597674273691978253678690951178777239573925410438679099"
+ "374700609973920128201422381329108236575369403675960765238333"
+ "778127017096574296148321075566959285042221837159799800133563"
+ "239963969638610872680393210300180152020613051613414547163713"
+ "772512617757277955979895866367571776456268564191092477027650"
+ "135832200376440239783726540552694851717269598489288851529660"
+ "975027775639565229734596726205832668434979354541943345062977"
+ "891187146561050118118108223323735210843681128615413601091222"
+ "007912350536959777114306541514511332368936078560929788143798"
+ "814391221507522370648646767364209132147312407014953113532379"
+ "838195728491128536978285918066991040993153064356179903885952"
+ "027952713749653604502053512355449916680887234238773855581636"
+ "172479594866871765094513940103284167914110196720261110812716"
+ "776424260154507395050380575452850420730818412994731079307343"
+ "538376880280124019321040198038723558784544408584344466090982"
+ "802067326529000931562048932875469079874956595180595395347093"
+ "285140279165467965596318365749701535812384333240968283640721"
+ "344003442002691613772056762099098025739332715913970186225176"
+ "459563484134139746647940170537900275350480490468851439300771"
+ "949915194703080576611022590670399844931867609777417528903454"
+ "731922206378932141464755402629420074293816349270038351339419"
+ "146768473851353171629153912238797141905920143036064131705230"
+ "421762305232861503856799511155936565169005916711845389135580"
+ "928162511912438531204156138447775120789548666143600293412065"
+ "767167106888509172568003530668539460588248316513392652567856"
+ "224602697296203328920073354425994044956624831346979458846837"
+ "597950064151867164583749203433942592178528868981311575331848"
+ "941597492470436782387502687532649093096498315347403977436001"
+ "399982102030846763698994785054617523241463186980898394504211"
+ "430763617825306895065661536045431497903759118007934839122881"
+ "885863091769469883539876840543521295706315919855784493235603"
+ "866268925981702690270202829595794350800918257913991744455922"
+ "683343374046671669930219650268554687501e-4951",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x8p-16448,
+ 0x1p-16444,
+ 0x8p-16448,
+ 0x1p-16444,
+ false,
+ 0xcp-16448,
+ 0xcp-16448,
+ 0xcp-16448,
+ 0x1p-16444,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0xcp-16448,
+ 0xcp-16448,
+ 0xcp-16448,
+ 0xc.000000000004p-16448),
+ TEST ("-5.467799297823711903792608900429129724598576223540345015581"
+ "470730542557532950096605214341062938740807795871021020805296"
+ "652950478448933048254960262113384713508225733871766897517853"
+ "837895708450339634932343848975116093410479690330290902886861"
+ "199931259216523277807574569082153073133673942958789577402321"
+ "393933101298533191266102118889630609532339508457854220031996"
+ "317935940718000325144008438048416150458546268408294693278282"
+ "948818382981756745231443707694395053270779125240469926867881"
+ "019850287125023579685557790983055974962881759919483752202903"
+ "689199564880305684635452065363595791988290536352100701716974"
+ "146329604439226626943340805268641901769971862776194876385604"
+ "059269084172123930049144599166605103175580232672032966645406"
+ "656863031434873551175363941825798425331906382524706572766485"
+ "232874542230564262609161782396887243896247009244068837251567"
+ "783223271286692480010679711347802408351619999199127493689411"
+ "300623337751847138939498426200450305845548565910009066524152"
+ "545480362818290224140170178363735317929685005697363930594593"
+ "881342895328789259362029119598601112899006188879876371854878"
+ "902571753767478028100558334716504784604592507791482451533133"
+ "513128606357440718182123637790769320922442349066328991687862"
+ "072550779316393139037201187579972933016227874898505255743233"
+ "300533498951938156636406532613846576145617323141684480726409"
+ "074184197224754542490884392813625365330881348799432844624838"
+ "960826144439157361917744290729073116318858191758821942010704"
+ "726536748514141391981088590968911224406479710632429529154589"
+ "293799132147906174349149006094094612827453365768213012516958"
+ "693057189940355112250629776318079573232513434098933115589372"
+ "428935891821270739299776803229999720720845111297142577993950"
+ "783716526325576426897121181953632299322177412313472666557946"
+ "026587137818658956285876183561334458426909806227578696972983"
+ "054578648540140777431341495495816167709600470194141141159275"
+ "548586447187051517332624446463129570157208744018317833998766"
+ "292676324122069807882266170905460107352347754465354279502046"
+ "825607840930640910087488682878186052982487934398794575125208"
+ "131434599031355068379234881462786244132403015573059216658125"
+ "100992278732459043154873457532866362865038072260302438341256"
+ "465144627211756104220773841311413109973101672893502315223943"
+ "131161953384837658368750910845308673019625511169535246418667"
+ "822192756475773031982522304934161885363133347824122722726808"
+ "458339668843622993626685401142719276703936351749165952313385"
+ "247253410412444111234661569689109707012146365225868127037807"
+ "653838169759426465847963786308715929383888075292817554540826"
+ "281340379356869541699838857230452874882475626566568389051842"
+ "269616942233880613753230478468266244820792868174047618834373"
+ "911783352591638681513579303490680611741310500871919788283761"
+ "473826205032029153949410495205647160664548204617663407545902"
+ "155255595959035495626212780995301367951250745142427183922194"
+ "679405686105598055836303373290577235698605118096647411642319"
+ "219474157243864921520422978127962037044537385134878691852739"
+ "978563080824265712270538180666161627113218201779779366124407"
+ "844574754753562338454876981852965553927903650323407245581099"
+ "158807518181769597517311013648265985455750620305808055101887"
+ "320313826045110985510052672007356612620966612560448241370561"
+ "199679677792733282710356886335229149926131229035514374201804"
+ "225447070710784729359320523404977483919175478103049697809100"
+ "609955967524096673011016762490361065647326710555615563378359"
+ "408954626110765311053180827944575772439918612038754867514863"
+ "217604919070168030521022438807226197480679192263641289752695"
+ "279367794662267414957708480356805124293407645094292709270568"
+ "454704291549032311245797185365876072558819037766647710690310"
+ "669384727884764603220129302332950334873072394721879741045233"
+ "391084791389282719581455185833551951893903144609338532918282"
+ "071417365794666174600590186688558973292265260457397284219723"
+ "118736526338195892522797003835806498724823327170646268765114"
+ "335047201804332131453475981952420330849091435859688615005340"
+ "662951243478815535510910054031985781353569592327342625691155"
+ "297753939420991863066846663288192966197121277244462515137195"
+ "342887549113968391968700872401047521725534791569882096021521"
+ "725739030856023532346309694644208054801875416636970616158970"
+ "521587368716636562878779650147005687012772946471436217221680"
+ "244104527691159700944328113538972913022260318566564643466194"
+ "762762807772321937689272738612051928757740541051011493615150"
+ "275299712275026278191137262599722341528351699547926563148579"
+ "945678256173476664846284964106409718181820427949855282782538"
+ "418620206551699936257338813616307747712660216941043590501407"
+ "704980849740902536932579576527206665027800420035787899091137"
+ "498285797710848848252835440631389386421149710576503050460098"
+ "225348880547453179874214337446508024003058237008669916793765"
+ "103830790970613932711932541885454647828573565454163547779034"
+ "696478261735426505076787833523027219489668014198674507463022"
+ "589310657355955884354584118602516953160415158848138916494891"
+ "482359394428713333626368035819136954032193064982447142548513"
+ "777798482352540211515117109331361325135068534382485905222012"
+ "689155196601835592087277572480712876900324312948680873379635"
+ "049766825511648515719101185883064389832362822347209928024358"
+ "316443434834701491039800443982197050828044087275939582794327"
+ "098500876914356235193809147621508354816413733354188380887001"
+ "911623409901345292980795015165229743643600614968493977578123"
+ "466095415615447864269417603852427781048383314979868134570808"
+ "915217919397946316940234061179348627230180807326753461268559"
+ "385959678786688421103134141790339174982532045466350837038525"
+ "183177847731101708972936115216192881538981857998354449098289"
+ "173408113131230974433096066603129145174088550345854388495636"
+ "765494379926460031453181542793269110787478232865475929357580"
+ "348192936196178107395850207543849907063319379969931169428718"
+ "329942347533981765560805872472322186708756306455763611238082"
+ "951450138207325773702247286660824416431038520521352370291078"
+ "718247251712503010649103184487159314175972977390771951004404"
+ "935285742659293676372796949610394059160197507860285966047861"
+ "411940542821283013449073170622058378826534472881876688512697"
+ "758815111198429044432164893190718808033606471387328883409622"
+ "920327667611981052185172613337770061634130425782297578896747"
+ "215274225504191258419704542303129850621901180024012018244583"
+ "859069664741628533451563101979900751568200425006085702090401"
+ "221537517047980048268055449980601076610965506150742174772246"
+ "118061736140257508229467892560527108358789784539076822640564"
+ "850851810352577863861819577512851607395927299014823941534626"
+ "348696657393457745078724366706324437838188311582720760585617"
+ "487635004508688532062666933131188059377591626964364639542322"
+ "054994079047698970924302742015839080613569097514938471468421"
+ "996493818271996291393146497945863918551953149000943761983830"
+ "636236545375480765488470416349046929644442714477859372568735"
+ "843708739015199069466751627920202433249482821065761826195203"
+ "859723026379941258427585166740391065737087970718105336581850"
+ "268003743156009120998264173899565279323585156937231413010764"
+ "716608523561569725709426913310091413578317885628039213932500"
+ "135284171861048461662744818955691362183779165069982032305970"
+ "876642081013358484182671863168168338174351197426412625098421"
+ "481239711997827391790388986589171883679226337788805245818923"
+ "874607498645601668109872286941958827402018143065273281785872"
+ "847384936953936746391717131732488209980499904305446724778559"
+ "203846472344227623989606643158012375642854007494547242775256"
+ "898117140062170585337487588594307260069257691479046720590527"
+ "237259474018798808190031749318500514291360716338072006978678"
+ "678209533184089369407377832511947183352849291708100854730341"
+ "450938156361786419525775154653957546143580362599388832564788"
+ "354103919236836698740026304968121883147777634511851850370958"
+ "884085902337976245656103068392811534994239396318567712305532"
+ "477169378421492493173704379367954605145484562415027095545060"
+ "831874739575572895083275461127704135960230120513850917554331"
+ "352277278650414100755269190224957237517573174092361876919730"
+ "465289835269438666544826003345857532325281423386809827947616"
+ "676425828491143428807224317894169834736598542769698312957949"
+ "605903203284128114992351808708487688511436903322773652124574"
+ "055471177142349271989998235771191022554548042468832219533624"
+ "049225313628185783780849179599378819912520555522211658107113"
+ "447678746843053930790961744210668515951907105384498734366645"
+ "249428031772015356705436411724477514133655840609854880392450"
+ "949605226182519804314027265530362531560532656953025288585499"
+ "182228921920121831359074541201044664224711170390199159133806"
+ "269332015718061873656943996928324527943031265119266878834003"
+ "362682519426029626295988425859770358488877080196120965282298"
+ "232237612230358616986168510604382051044429343285625121039569"
+ "326126486782398017268335279614177221030172599765237380415252"
+ "503716285229140380445599733136737846363243777324290551807506"
+ "541472429585746028822540006160866496164919640007935962267377"
+ "060789839526907505659662711614828949104249176417092401488510"
+ "615823548277477841813412329397443687705199567361868375111535"
+ "380877143498420444773617475831606309624504731127984157999557"
+ "818660940286424404275144312853627845343063342311866285268837"
+ "422960089441895882484245945054082617645214582938928610352277"
+ "410119555602965075325424443356593793852682899089314976629899"
+ "773835991388717888860719076570986705247088078593793511009142"
+ "474344996635349786568175384138024607561209403361748867467629"
+ "682257007702707626687955791367383934101209955804380644234879"
+ "805395123927491333463152240956446177043487579040223002287264"
+ "756843617701865806869707173187939918037456096349272671452872"
+ "922420893858994027251574788837911846161770227169407508741963"
+ "414729807676477574570702693444290823666440055726552795145348"
+ "219168459767427369197825367869095117877723957392541043867909"
+ "937470060997392012820142238132910823657536940367596076523833"
+ "377812701709657429614832107556695928504222183715979980013356"
+ "323996396963861087268039321030018015202061305161341454716371"
+ "377251261775727795597989586636757177645626856419109247702765"
+ "013583220037644023978372654055269485171726959848928885152966"
+ "097502777563956522973459672620583266843497935454194334506297"
+ "789118714656105011811810822332373521084368112861541360109122"
+ "200791235053695977711430654151451133236893607856092978814379"
+ "881439122150752237064864676736420913214731240701495311353237"
+ "983819572849112853697828591806699104099315306435617990388595"
+ "202795271374965360450205351235544991668088723423877385558163"
+ "617247959486687176509451394010328416791411019672026111081271"
+ "677642426015450739505038057545285042073081841299473107930734"
+ "353837688028012401932104019803872355878454440858434446609098"
+ "280206732652900093156204893287546907987495659518059539534709"
+ "328514027916546796559631836574970153581238433324096828364072"
+ "134400344200269161377205676209909802573933271591397018622517"
+ "645956348413413974664794017053790027535048049046885143930077"
+ "194991519470308057661102259067039984493186760977741752890345"
+ "473192220637893214146475540262942007429381634927003835133941"
+ "914676847385135317162915391223879714190592014303606413170523"
+ "042176230523286150385679951115593656516900591671184538913558"
+ "092816251191243853120415613844777512078954866614360029341206"
+ "576716710688850917256800353066853946058824831651339265256785"
+ "622460269729620332892007335442599404495662483134697945884683"
+ "759795006415186716458374920343394259217852886898131157533184"
+ "894159749247043678238750268753264909309649831534740397743600"
+ "139998210203084676369899478505461752324146318698089839450421"
+ "143076361782530689506566153604543149790375911800793483912288"
+ "188586309176946988353987684054352129570631591985578449323560"
+ "386626892598170269027020282959579435080091825791399174445592"
+ "2683343374046671669930219650268554687499e-4951",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x1p-16444,
+ -0x8p-16448,
+ -0x8p-16448,
+ -0x8p-16448,
+ false,
+ -0xcp-16448,
+ -0xcp-16448,
+ -0x8p-16448,
+ -0x8p-16448,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0xcp-16448,
+ -0xcp-16448,
+ -0xb.fffffffffffcp-16448,
+ -0xb.fffffffffffcp-16448),
+ TEST ("-5.467799297823711903792608900429129724598576223540345015581"
+ "470730542557532950096605214341062938740807795871021020805296"
+ "652950478448933048254960262113384713508225733871766897517853"
+ "837895708450339634932343848975116093410479690330290902886861"
+ "199931259216523277807574569082153073133673942958789577402321"
+ "393933101298533191266102118889630609532339508457854220031996"
+ "317935940718000325144008438048416150458546268408294693278282"
+ "948818382981756745231443707694395053270779125240469926867881"
+ "019850287125023579685557790983055974962881759919483752202903"
+ "689199564880305684635452065363595791988290536352100701716974"
+ "146329604439226626943340805268641901769971862776194876385604"
+ "059269084172123930049144599166605103175580232672032966645406"
+ "656863031434873551175363941825798425331906382524706572766485"
+ "232874542230564262609161782396887243896247009244068837251567"
+ "783223271286692480010679711347802408351619999199127493689411"
+ "300623337751847138939498426200450305845548565910009066524152"
+ "545480362818290224140170178363735317929685005697363930594593"
+ "881342895328789259362029119598601112899006188879876371854878"
+ "902571753767478028100558334716504784604592507791482451533133"
+ "513128606357440718182123637790769320922442349066328991687862"
+ "072550779316393139037201187579972933016227874898505255743233"
+ "300533498951938156636406532613846576145617323141684480726409"
+ "074184197224754542490884392813625365330881348799432844624838"
+ "960826144439157361917744290729073116318858191758821942010704"
+ "726536748514141391981088590968911224406479710632429529154589"
+ "293799132147906174349149006094094612827453365768213012516958"
+ "693057189940355112250629776318079573232513434098933115589372"
+ "428935891821270739299776803229999720720845111297142577993950"
+ "783716526325576426897121181953632299322177412313472666557946"
+ "026587137818658956285876183561334458426909806227578696972983"
+ "054578648540140777431341495495816167709600470194141141159275"
+ "548586447187051517332624446463129570157208744018317833998766"
+ "292676324122069807882266170905460107352347754465354279502046"
+ "825607840930640910087488682878186052982487934398794575125208"
+ "131434599031355068379234881462786244132403015573059216658125"
+ "100992278732459043154873457532866362865038072260302438341256"
+ "465144627211756104220773841311413109973101672893502315223943"
+ "131161953384837658368750910845308673019625511169535246418667"
+ "822192756475773031982522304934161885363133347824122722726808"
+ "458339668843622993626685401142719276703936351749165952313385"
+ "247253410412444111234661569689109707012146365225868127037807"
+ "653838169759426465847963786308715929383888075292817554540826"
+ "281340379356869541699838857230452874882475626566568389051842"
+ "269616942233880613753230478468266244820792868174047618834373"
+ "911783352591638681513579303490680611741310500871919788283761"
+ "473826205032029153949410495205647160664548204617663407545902"
+ "155255595959035495626212780995301367951250745142427183922194"
+ "679405686105598055836303373290577235698605118096647411642319"
+ "219474157243864921520422978127962037044537385134878691852739"
+ "978563080824265712270538180666161627113218201779779366124407"
+ "844574754753562338454876981852965553927903650323407245581099"
+ "158807518181769597517311013648265985455750620305808055101887"
+ "320313826045110985510052672007356612620966612560448241370561"
+ "199679677792733282710356886335229149926131229035514374201804"
+ "225447070710784729359320523404977483919175478103049697809100"
+ "609955967524096673011016762490361065647326710555615563378359"
+ "408954626110765311053180827944575772439918612038754867514863"
+ "217604919070168030521022438807226197480679192263641289752695"
+ "279367794662267414957708480356805124293407645094292709270568"
+ "454704291549032311245797185365876072558819037766647710690310"
+ "669384727884764603220129302332950334873072394721879741045233"
+ "391084791389282719581455185833551951893903144609338532918282"
+ "071417365794666174600590186688558973292265260457397284219723"
+ "118736526338195892522797003835806498724823327170646268765114"
+ "335047201804332131453475981952420330849091435859688615005340"
+ "662951243478815535510910054031985781353569592327342625691155"
+ "297753939420991863066846663288192966197121277244462515137195"
+ "342887549113968391968700872401047521725534791569882096021521"
+ "725739030856023532346309694644208054801875416636970616158970"
+ "521587368716636562878779650147005687012772946471436217221680"
+ "244104527691159700944328113538972913022260318566564643466194"
+ "762762807772321937689272738612051928757740541051011493615150"
+ "275299712275026278191137262599722341528351699547926563148579"
+ "945678256173476664846284964106409718181820427949855282782538"
+ "418620206551699936257338813616307747712660216941043590501407"
+ "704980849740902536932579576527206665027800420035787899091137"
+ "498285797710848848252835440631389386421149710576503050460098"
+ "225348880547453179874214337446508024003058237008669916793765"
+ "103830790970613932711932541885454647828573565454163547779034"
+ "696478261735426505076787833523027219489668014198674507463022"
+ "589310657355955884354584118602516953160415158848138916494891"
+ "482359394428713333626368035819136954032193064982447142548513"
+ "777798482352540211515117109331361325135068534382485905222012"
+ "689155196601835592087277572480712876900324312948680873379635"
+ "049766825511648515719101185883064389832362822347209928024358"
+ "316443434834701491039800443982197050828044087275939582794327"
+ "098500876914356235193809147621508354816413733354188380887001"
+ "911623409901345292980795015165229743643600614968493977578123"
+ "466095415615447864269417603852427781048383314979868134570808"
+ "915217919397946316940234061179348627230180807326753461268559"
+ "385959678786688421103134141790339174982532045466350837038525"
+ "183177847731101708972936115216192881538981857998354449098289"
+ "173408113131230974433096066603129145174088550345854388495636"
+ "765494379926460031453181542793269110787478232865475929357580"
+ "348192936196178107395850207543849907063319379969931169428718"
+ "329942347533981765560805872472322186708756306455763611238082"
+ "951450138207325773702247286660824416431038520521352370291078"
+ "718247251712503010649103184487159314175972977390771951004404"
+ "935285742659293676372796949610394059160197507860285966047861"
+ "411940542821283013449073170622058378826534472881876688512697"
+ "758815111198429044432164893190718808033606471387328883409622"
+ "920327667611981052185172613337770061634130425782297578896747"
+ "215274225504191258419704542303129850621901180024012018244583"
+ "859069664741628533451563101979900751568200425006085702090401"
+ "221537517047980048268055449980601076610965506150742174772246"
+ "118061736140257508229467892560527108358789784539076822640564"
+ "850851810352577863861819577512851607395927299014823941534626"
+ "348696657393457745078724366706324437838188311582720760585617"
+ "487635004508688532062666933131188059377591626964364639542322"
+ "054994079047698970924302742015839080613569097514938471468421"
+ "996493818271996291393146497945863918551953149000943761983830"
+ "636236545375480765488470416349046929644442714477859372568735"
+ "843708739015199069466751627920202433249482821065761826195203"
+ "859723026379941258427585166740391065737087970718105336581850"
+ "268003743156009120998264173899565279323585156937231413010764"
+ "716608523561569725709426913310091413578317885628039213932500"
+ "135284171861048461662744818955691362183779165069982032305970"
+ "876642081013358484182671863168168338174351197426412625098421"
+ "481239711997827391790388986589171883679226337788805245818923"
+ "874607498645601668109872286941958827402018143065273281785872"
+ "847384936953936746391717131732488209980499904305446724778559"
+ "203846472344227623989606643158012375642854007494547242775256"
+ "898117140062170585337487588594307260069257691479046720590527"
+ "237259474018798808190031749318500514291360716338072006978678"
+ "678209533184089369407377832511947183352849291708100854730341"
+ "450938156361786419525775154653957546143580362599388832564788"
+ "354103919236836698740026304968121883147777634511851850370958"
+ "884085902337976245656103068392811534994239396318567712305532"
+ "477169378421492493173704379367954605145484562415027095545060"
+ "831874739575572895083275461127704135960230120513850917554331"
+ "352277278650414100755269190224957237517573174092361876919730"
+ "465289835269438666544826003345857532325281423386809827947616"
+ "676425828491143428807224317894169834736598542769698312957949"
+ "605903203284128114992351808708487688511436903322773652124574"
+ "055471177142349271989998235771191022554548042468832219533624"
+ "049225313628185783780849179599378819912520555522211658107113"
+ "447678746843053930790961744210668515951907105384498734366645"
+ "249428031772015356705436411724477514133655840609854880392450"
+ "949605226182519804314027265530362531560532656953025288585499"
+ "182228921920121831359074541201044664224711170390199159133806"
+ "269332015718061873656943996928324527943031265119266878834003"
+ "362682519426029626295988425859770358488877080196120965282298"
+ "232237612230358616986168510604382051044429343285625121039569"
+ "326126486782398017268335279614177221030172599765237380415252"
+ "503716285229140380445599733136737846363243777324290551807506"
+ "541472429585746028822540006160866496164919640007935962267377"
+ "060789839526907505659662711614828949104249176417092401488510"
+ "615823548277477841813412329397443687705199567361868375111535"
+ "380877143498420444773617475831606309624504731127984157999557"
+ "818660940286424404275144312853627845343063342311866285268837"
+ "422960089441895882484245945054082617645214582938928610352277"
+ "410119555602965075325424443356593793852682899089314976629899"
+ "773835991388717888860719076570986705247088078593793511009142"
+ "474344996635349786568175384138024607561209403361748867467629"
+ "682257007702707626687955791367383934101209955804380644234879"
+ "805395123927491333463152240956446177043487579040223002287264"
+ "756843617701865806869707173187939918037456096349272671452872"
+ "922420893858994027251574788837911846161770227169407508741963"
+ "414729807676477574570702693444290823666440055726552795145348"
+ "219168459767427369197825367869095117877723957392541043867909"
+ "937470060997392012820142238132910823657536940367596076523833"
+ "377812701709657429614832107556695928504222183715979980013356"
+ "323996396963861087268039321030018015202061305161341454716371"
+ "377251261775727795597989586636757177645626856419109247702765"
+ "013583220037644023978372654055269485171726959848928885152966"
+ "097502777563956522973459672620583266843497935454194334506297"
+ "789118714656105011811810822332373521084368112861541360109122"
+ "200791235053695977711430654151451133236893607856092978814379"
+ "881439122150752237064864676736420913214731240701495311353237"
+ "983819572849112853697828591806699104099315306435617990388595"
+ "202795271374965360450205351235544991668088723423877385558163"
+ "617247959486687176509451394010328416791411019672026111081271"
+ "677642426015450739505038057545285042073081841299473107930734"
+ "353837688028012401932104019803872355878454440858434446609098"
+ "280206732652900093156204893287546907987495659518059539534709"
+ "328514027916546796559631836574970153581238433324096828364072"
+ "134400344200269161377205676209909802573933271591397018622517"
+ "645956348413413974664794017053790027535048049046885143930077"
+ "194991519470308057661102259067039984493186760977741752890345"
+ "473192220637893214146475540262942007429381634927003835133941"
+ "914676847385135317162915391223879714190592014303606413170523"
+ "042176230523286150385679951115593656516900591671184538913558"
+ "092816251191243853120415613844777512078954866614360029341206"
+ "576716710688850917256800353066853946058824831651339265256785"
+ "622460269729620332892007335442599404495662483134697945884683"
+ "759795006415186716458374920343394259217852886898131157533184"
+ "894159749247043678238750268753264909309649831534740397743600"
+ "139998210203084676369899478505461752324146318698089839450421"
+ "143076361782530689506566153604543149790375911800793483912288"
+ "188586309176946988353987684054352129570631591985578449323560"
+ "386626892598170269027020282959579435080091825791399174445592"
+ "26833433740466716699302196502685546875e-4951",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x1p-16444,
+ -0x1p-16444,
+ -0x8p-16448,
+ -0x8p-16448,
+ true,
+ -0xcp-16448,
+ -0xcp-16448,
+ -0xcp-16448,
+ -0xcp-16448,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ true,
+ -0xcp-16448,
+ -0xcp-16448,
+ -0xcp-16448,
+ -0xcp-16448),
+ TEST ("-5.467799297823711903792608900429129724598576223540345015581"
+ "470730542557532950096605214341062938740807795871021020805296"
+ "652950478448933048254960262113384713508225733871766897517853"
+ "837895708450339634932343848975116093410479690330290902886861"
+ "199931259216523277807574569082153073133673942958789577402321"
+ "393933101298533191266102118889630609532339508457854220031996"
+ "317935940718000325144008438048416150458546268408294693278282"
+ "948818382981756745231443707694395053270779125240469926867881"
+ "019850287125023579685557790983055974962881759919483752202903"
+ "689199564880305684635452065363595791988290536352100701716974"
+ "146329604439226626943340805268641901769971862776194876385604"
+ "059269084172123930049144599166605103175580232672032966645406"
+ "656863031434873551175363941825798425331906382524706572766485"
+ "232874542230564262609161782396887243896247009244068837251567"
+ "783223271286692480010679711347802408351619999199127493689411"
+ "300623337751847138939498426200450305845548565910009066524152"
+ "545480362818290224140170178363735317929685005697363930594593"
+ "881342895328789259362029119598601112899006188879876371854878"
+ "902571753767478028100558334716504784604592507791482451533133"
+ "513128606357440718182123637790769320922442349066328991687862"
+ "072550779316393139037201187579972933016227874898505255743233"
+ "300533498951938156636406532613846576145617323141684480726409"
+ "074184197224754542490884392813625365330881348799432844624838"
+ "960826144439157361917744290729073116318858191758821942010704"
+ "726536748514141391981088590968911224406479710632429529154589"
+ "293799132147906174349149006094094612827453365768213012516958"
+ "693057189940355112250629776318079573232513434098933115589372"
+ "428935891821270739299776803229999720720845111297142577993950"
+ "783716526325576426897121181953632299322177412313472666557946"
+ "026587137818658956285876183561334458426909806227578696972983"
+ "054578648540140777431341495495816167709600470194141141159275"
+ "548586447187051517332624446463129570157208744018317833998766"
+ "292676324122069807882266170905460107352347754465354279502046"
+ "825607840930640910087488682878186052982487934398794575125208"
+ "131434599031355068379234881462786244132403015573059216658125"
+ "100992278732459043154873457532866362865038072260302438341256"
+ "465144627211756104220773841311413109973101672893502315223943"
+ "131161953384837658368750910845308673019625511169535246418667"
+ "822192756475773031982522304934161885363133347824122722726808"
+ "458339668843622993626685401142719276703936351749165952313385"
+ "247253410412444111234661569689109707012146365225868127037807"
+ "653838169759426465847963786308715929383888075292817554540826"
+ "281340379356869541699838857230452874882475626566568389051842"
+ "269616942233880613753230478468266244820792868174047618834373"
+ "911783352591638681513579303490680611741310500871919788283761"
+ "473826205032029153949410495205647160664548204617663407545902"
+ "155255595959035495626212780995301367951250745142427183922194"
+ "679405686105598055836303373290577235698605118096647411642319"
+ "219474157243864921520422978127962037044537385134878691852739"
+ "978563080824265712270538180666161627113218201779779366124407"
+ "844574754753562338454876981852965553927903650323407245581099"
+ "158807518181769597517311013648265985455750620305808055101887"
+ "320313826045110985510052672007356612620966612560448241370561"
+ "199679677792733282710356886335229149926131229035514374201804"
+ "225447070710784729359320523404977483919175478103049697809100"
+ "609955967524096673011016762490361065647326710555615563378359"
+ "408954626110765311053180827944575772439918612038754867514863"
+ "217604919070168030521022438807226197480679192263641289752695"
+ "279367794662267414957708480356805124293407645094292709270568"
+ "454704291549032311245797185365876072558819037766647710690310"
+ "669384727884764603220129302332950334873072394721879741045233"
+ "391084791389282719581455185833551951893903144609338532918282"
+ "071417365794666174600590186688558973292265260457397284219723"
+ "118736526338195892522797003835806498724823327170646268765114"
+ "335047201804332131453475981952420330849091435859688615005340"
+ "662951243478815535510910054031985781353569592327342625691155"
+ "297753939420991863066846663288192966197121277244462515137195"
+ "342887549113968391968700872401047521725534791569882096021521"
+ "725739030856023532346309694644208054801875416636970616158970"
+ "521587368716636562878779650147005687012772946471436217221680"
+ "244104527691159700944328113538972913022260318566564643466194"
+ "762762807772321937689272738612051928757740541051011493615150"
+ "275299712275026278191137262599722341528351699547926563148579"
+ "945678256173476664846284964106409718181820427949855282782538"
+ "418620206551699936257338813616307747712660216941043590501407"
+ "704980849740902536932579576527206665027800420035787899091137"
+ "498285797710848848252835440631389386421149710576503050460098"
+ "225348880547453179874214337446508024003058237008669916793765"
+ "103830790970613932711932541885454647828573565454163547779034"
+ "696478261735426505076787833523027219489668014198674507463022"
+ "589310657355955884354584118602516953160415158848138916494891"
+ "482359394428713333626368035819136954032193064982447142548513"
+ "777798482352540211515117109331361325135068534382485905222012"
+ "689155196601835592087277572480712876900324312948680873379635"
+ "049766825511648515719101185883064389832362822347209928024358"
+ "316443434834701491039800443982197050828044087275939582794327"
+ "098500876914356235193809147621508354816413733354188380887001"
+ "911623409901345292980795015165229743643600614968493977578123"
+ "466095415615447864269417603852427781048383314979868134570808"
+ "915217919397946316940234061179348627230180807326753461268559"
+ "385959678786688421103134141790339174982532045466350837038525"
+ "183177847731101708972936115216192881538981857998354449098289"
+ "173408113131230974433096066603129145174088550345854388495636"
+ "765494379926460031453181542793269110787478232865475929357580"
+ "348192936196178107395850207543849907063319379969931169428718"
+ "329942347533981765560805872472322186708756306455763611238082"
+ "951450138207325773702247286660824416431038520521352370291078"
+ "718247251712503010649103184487159314175972977390771951004404"
+ "935285742659293676372796949610394059160197507860285966047861"
+ "411940542821283013449073170622058378826534472881876688512697"
+ "758815111198429044432164893190718808033606471387328883409622"
+ "920327667611981052185172613337770061634130425782297578896747"
+ "215274225504191258419704542303129850621901180024012018244583"
+ "859069664741628533451563101979900751568200425006085702090401"
+ "221537517047980048268055449980601076610965506150742174772246"
+ "118061736140257508229467892560527108358789784539076822640564"
+ "850851810352577863861819577512851607395927299014823941534626"
+ "348696657393457745078724366706324437838188311582720760585617"
+ "487635004508688532062666933131188059377591626964364639542322"
+ "054994079047698970924302742015839080613569097514938471468421"
+ "996493818271996291393146497945863918551953149000943761983830"
+ "636236545375480765488470416349046929644442714477859372568735"
+ "843708739015199069466751627920202433249482821065761826195203"
+ "859723026379941258427585166740391065737087970718105336581850"
+ "268003743156009120998264173899565279323585156937231413010764"
+ "716608523561569725709426913310091413578317885628039213932500"
+ "135284171861048461662744818955691362183779165069982032305970"
+ "876642081013358484182671863168168338174351197426412625098421"
+ "481239711997827391790388986589171883679226337788805245818923"
+ "874607498645601668109872286941958827402018143065273281785872"
+ "847384936953936746391717131732488209980499904305446724778559"
+ "203846472344227623989606643158012375642854007494547242775256"
+ "898117140062170585337487588594307260069257691479046720590527"
+ "237259474018798808190031749318500514291360716338072006978678"
+ "678209533184089369407377832511947183352849291708100854730341"
+ "450938156361786419525775154653957546143580362599388832564788"
+ "354103919236836698740026304968121883147777634511851850370958"
+ "884085902337976245656103068392811534994239396318567712305532"
+ "477169378421492493173704379367954605145484562415027095545060"
+ "831874739575572895083275461127704135960230120513850917554331"
+ "352277278650414100755269190224957237517573174092361876919730"
+ "465289835269438666544826003345857532325281423386809827947616"
+ "676425828491143428807224317894169834736598542769698312957949"
+ "605903203284128114992351808708487688511436903322773652124574"
+ "055471177142349271989998235771191022554548042468832219533624"
+ "049225313628185783780849179599378819912520555522211658107113"
+ "447678746843053930790961744210668515951907105384498734366645"
+ "249428031772015356705436411724477514133655840609854880392450"
+ "949605226182519804314027265530362531560532656953025288585499"
+ "182228921920121831359074541201044664224711170390199159133806"
+ "269332015718061873656943996928324527943031265119266878834003"
+ "362682519426029626295988425859770358488877080196120965282298"
+ "232237612230358616986168510604382051044429343285625121039569"
+ "326126486782398017268335279614177221030172599765237380415252"
+ "503716285229140380445599733136737846363243777324290551807506"
+ "541472429585746028822540006160866496164919640007935962267377"
+ "060789839526907505659662711614828949104249176417092401488510"
+ "615823548277477841813412329397443687705199567361868375111535"
+ "380877143498420444773617475831606309624504731127984157999557"
+ "818660940286424404275144312853627845343063342311866285268837"
+ "422960089441895882484245945054082617645214582938928610352277"
+ "410119555602965075325424443356593793852682899089314976629899"
+ "773835991388717888860719076570986705247088078593793511009142"
+ "474344996635349786568175384138024607561209403361748867467629"
+ "682257007702707626687955791367383934101209955804380644234879"
+ "805395123927491333463152240956446177043487579040223002287264"
+ "756843617701865806869707173187939918037456096349272671452872"
+ "922420893858994027251574788837911846161770227169407508741963"
+ "414729807676477574570702693444290823666440055726552795145348"
+ "219168459767427369197825367869095117877723957392541043867909"
+ "937470060997392012820142238132910823657536940367596076523833"
+ "377812701709657429614832107556695928504222183715979980013356"
+ "323996396963861087268039321030018015202061305161341454716371"
+ "377251261775727795597989586636757177645626856419109247702765"
+ "013583220037644023978372654055269485171726959848928885152966"
+ "097502777563956522973459672620583266843497935454194334506297"
+ "789118714656105011811810822332373521084368112861541360109122"
+ "200791235053695977711430654151451133236893607856092978814379"
+ "881439122150752237064864676736420913214731240701495311353237"
+ "983819572849112853697828591806699104099315306435617990388595"
+ "202795271374965360450205351235544991668088723423877385558163"
+ "617247959486687176509451394010328416791411019672026111081271"
+ "677642426015450739505038057545285042073081841299473107930734"
+ "353837688028012401932104019803872355878454440858434446609098"
+ "280206732652900093156204893287546907987495659518059539534709"
+ "328514027916546796559631836574970153581238433324096828364072"
+ "134400344200269161377205676209909802573933271591397018622517"
+ "645956348413413974664794017053790027535048049046885143930077"
+ "194991519470308057661102259067039984493186760977741752890345"
+ "473192220637893214146475540262942007429381634927003835133941"
+ "914676847385135317162915391223879714190592014303606413170523"
+ "042176230523286150385679951115593656516900591671184538913558"
+ "092816251191243853120415613844777512078954866614360029341206"
+ "576716710688850917256800353066853946058824831651339265256785"
+ "622460269729620332892007335442599404495662483134697945884683"
+ "759795006415186716458374920343394259217852886898131157533184"
+ "894159749247043678238750268753264909309649831534740397743600"
+ "139998210203084676369899478505461752324146318698089839450421"
+ "143076361782530689506566153604543149790375911800793483912288"
+ "188586309176946988353987684054352129570631591985578449323560"
+ "386626892598170269027020282959579435080091825791399174445592"
+ "2683343374046671669930219650268554687501e-4951",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x1p-16444,
+ -0x1p-16444,
+ -0x8p-16448,
+ -0x8p-16448,
+ false,
+ -0x1p-16444,
+ -0xcp-16448,
+ -0xcp-16448,
+ -0xcp-16448,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0xc.000000000004p-16448,
+ -0xcp-16448,
+ -0xcp-16448,
+ -0xcp-16448),
+ TEST ("-0x0.7p-149",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ true,
+ -0x3.8p-152,
+ -0x3.8p-152,
+ -0x3.8p-152,
+ -0x3.8p-152,
+ true,
+ -0x3.8p-152,
+ -0x3.8p-152,
+ -0x3.8p-152,
+ -0x3.8p-152,
+ true,
+ -0x3.8p-152,
+ -0x3.8p-152,
+ -0x3.8p-152,
+ -0x3.8p-152,
+ true,
+ -0x3.8p-152,
+ -0x3.8p-152,
+ -0x3.8p-152,
+ -0x3.8p-152,
+ true,
+ -0x3.8p-152,
+ -0x3.8p-152,
+ -0x3.8p-152,
+ -0x3.8p-152),
+ TEST ("-0x0.7p-1074",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ true,
+ -0x1.cp-1076,
+ -0x1.cp-1076,
+ -0x1.cp-1076,
+ -0x1.cp-1076,
+ true,
+ -0x1.cp-1076,
+ -0x1.cp-1076,
+ -0x1.cp-1076,
+ -0x1.cp-1076,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ true,
+ -0x1.cp-1076,
+ -0x1.cp-1076,
+ -0x1.cp-1076,
+ -0x1.cp-1076),
+ TEST ("-0x0.7p-16445",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x8p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-16448,
+ -0x4p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ true,
+ -0x3.8p-16448,
+ -0x3.8p-16448,
+ -0x3.8p-16448,
+ -0x3.8p-16448),
+ TEST ("-0x0.7p-16494",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x8p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-16496,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0),
+ TEST ("0x1p-150",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ true,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ true,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ true,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ true,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ true,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152),
+ TEST ("0x1p-1075",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ true,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2p-1076,
+ true,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2p-1076,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ true,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2p-1076),
+ TEST ("0x1p-16446",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-16448,
+ true,
+ 0x4p-16448,
+ 0x4p-16448,
+ 0x4p-16448,
+ 0x4p-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ true,
+ 0x4p-16448,
+ 0x4p-16448,
+ 0x4p-16448,
+ 0x4p-16448),
+ TEST ("0x1p-16495",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-16496),
+ TEST ("-0x1p-150",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ true,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ true,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ true,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ true,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ true,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152),
+ TEST ("-0x1p-1075",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ true,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x2p-1076,
+ true,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x2p-1076,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ true,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x2p-1076),
+ TEST ("-0x1p-16446",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x8p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ true,
+ -0x4p-16448,
+ -0x4p-16448,
+ -0x4p-16448,
+ -0x4p-16448,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ true,
+ -0x4p-16448,
+ -0x4p-16448,
+ -0x4p-16448,
+ -0x4p-16448),
+ TEST ("-0x1p-16495",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x8p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-16496,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0),
+ TEST (".70064923216240853546186479164495807e-45",
+ false,
+ 0x0p+0,
+ 0x8p-152,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4.0000000000004p-152,
+ false,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4.0000000000000008p-152,
+ false,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4.0000000000000008p-152,
+ false,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4.00000000000000000000000002p-152,
+ false,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4.0000000000000000000000000004p-152),
+ TEST ("7.0064923216240853546186479164495806564013097093825788587853"
+ "4141944895541342930300743319094181060791015624e-46",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x3.ffffffffffffep-152,
+ 0x4p-152,
+ 0x3.ffffffffffffep-152,
+ 0x4p-152,
+ false,
+ 0x3.fffffffffffffffcp-152,
+ 0x4p-152,
+ 0x3.fffffffffffffffcp-152,
+ 0x4p-152,
+ false,
+ 0x3.fffffffffffffffcp-152,
+ 0x4p-152,
+ 0x3.fffffffffffffffcp-152,
+ 0x4p-152,
+ false,
+ 0x3.ffffffffffffffffffffffffffp-152,
+ 0x4p-152,
+ 0x3.ffffffffffffffffffffffffffp-152,
+ 0x4p-152,
+ false,
+ 0x3.fffffffffffffffffffffffffffep-152,
+ 0x4p-152,
+ 0x3.fffffffffffffffffffffffffffep-152,
+ 0x4p-152),
+ TEST ("7.0064923216240853546186479164495806564013097093825788587853"
+ "4141944895541342930300743319094181060791015625e-46",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ true,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ true,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ true,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ true,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ true,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152),
+ TEST ("7.0064923216240853546186479164495806564013097093825788587853"
+ "4141944895541342930300743319094181060791015626e-46",
+ false,
+ 0x0p+0,
+ 0x8p-152,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4.0000000000004p-152,
+ false,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4.0000000000000008p-152,
+ false,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4.0000000000000008p-152,
+ false,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4.00000000000000000000000002p-152,
+ false,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4p-152,
+ 0x4.0000000000000000000000000004p-152),
+ TEST ("-7.006492321624085354618647916449580656401309709382578858785"
+ "34141944895541342930300743319094181060791015624e-46",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-152,
+ -0x4p-152,
+ -0x3.ffffffffffffep-152,
+ -0x3.ffffffffffffep-152,
+ false,
+ -0x4p-152,
+ -0x4p-152,
+ -0x3.fffffffffffffffcp-152,
+ -0x3.fffffffffffffffcp-152,
+ false,
+ -0x4p-152,
+ -0x4p-152,
+ -0x3.fffffffffffffffcp-152,
+ -0x3.fffffffffffffffcp-152,
+ false,
+ -0x4p-152,
+ -0x4p-152,
+ -0x3.ffffffffffffffffffffffffffp-152,
+ -0x3.ffffffffffffffffffffffffffp-152,
+ false,
+ -0x4p-152,
+ -0x4p-152,
+ -0x3.fffffffffffffffffffffffffffep-152,
+ -0x3.fffffffffffffffffffffffffffep-152),
+ TEST ("-7.006492321624085354618647916449580656401309709382578858785"
+ "34141944895541342930300743319094181060791015625e-46",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ true,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ true,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ true,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ true,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ true,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152),
+ TEST ("-7.006492321624085354618647916449580656401309709382578858785"
+ "34141944895541342930300743319094181060791015626e-46",
+ false,
+ -0x8p-152,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4.0000000000004p-152,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ false,
+ -0x4.0000000000000008p-152,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ false,
+ -0x4.0000000000000008p-152,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ false,
+ -0x4.00000000000000000000000002p-152,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152,
+ false,
+ -0x4.0000000000000000000000000004p-152,
+ -0x4p-152,
+ -0x4p-152,
+ -0x4p-152),
+ TEST ("2.4703282292062327208828439643411068618252990130716238221279"
+ "284125033775363510437593264991818081799618989828234772285886"
+ "546332835517796989819938739800539093906315035659515570226392"
+ "290858392449105184435931802849936536152500319370457678249219"
+ "365623669863658480757001585769269903706311928279558551332927"
+ "834338409351978015531246597263579574622766465272827220056374"
+ "006485499977096599470454020828166226237857393450736339007967"
+ "761930577506740176324673600968951340535537458516661134223766"
+ "678604162159680461914467291840300530057530849048765391711386"
+ "591646239524912623653881879636239373280423891018672348497668"
+ "235089863388587925628302755995657524455507255189313690836254"
+ "779186948667994968324049705821028513185451396213837722826145"
+ "437693412532098591327667236328124e-324",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x1.fffffffffffffffep-1076,
+ 0x2p-1076,
+ 0x1.fffffffffffffffep-1076,
+ 0x2p-1076,
+ false,
+ 0x1.fffffffffffffffep-1076,
+ 0x2p-1076,
+ 0x1.fffffffffffffffep-1076,
+ 0x2p-1076,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x1.ffffffffffffffffffffffffffffp-1076,
+ 0x2p-1076,
+ 0x1.ffffffffffffffffffffffffffffp-1076,
+ 0x2p-1076),
+ TEST ("2.4703282292062327208828439643411068618252990130716238221279"
+ "284125033775363510437593264991818081799618989828234772285886"
+ "546332835517796989819938739800539093906315035659515570226392"
+ "290858392449105184435931802849936536152500319370457678249219"
+ "365623669863658480757001585769269903706311928279558551332927"
+ "834338409351978015531246597263579574622766465272827220056374"
+ "006485499977096599470454020828166226237857393450736339007967"
+ "761930577506740176324673600968951340535537458516661134223766"
+ "678604162159680461914467291840300530057530849048765391711386"
+ "591646239524912623653881879636239373280423891018672348497668"
+ "235089863388587925628302755995657524455507255189313690836254"
+ "779186948667994968324049705821028513185451396213837722826145"
+ "437693412532098591327667236328125e-324",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ true,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2p-1076,
+ true,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2p-1076,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ true,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2p-1076),
+ TEST ("2.4703282292062327208828439643411068618252990130716238221279"
+ "284125033775363510437593264991818081799618989828234772285886"
+ "546332835517796989819938739800539093906315035659515570226392"
+ "290858392449105184435931802849936536152500319370457678249219"
+ "365623669863658480757001585769269903706311928279558551332927"
+ "834338409351978015531246597263579574622766465272827220056374"
+ "006485499977096599470454020828166226237857393450736339007967"
+ "761930577506740176324673600968951340535537458516661134223766"
+ "678604162159680461914467291840300530057530849048765391711386"
+ "591646239524912623653881879636239373280423891018672348497668"
+ "235089863388587925628302755995657524455507255189313690836254"
+ "779186948667994968324049705821028513185451396213837722826145"
+ "437693412532098591327667236328126e-324",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x4p-1076,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2.0000000000000004p-1076,
+ false,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2.0000000000000004p-1076,
+ false,
+ 0x0p+0,
+ 0x4p-1076,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2p-1076,
+ 0x2.0000000000000000000000000002p-1076),
+ TEST ("-2.470328229206232720882843964341106861825299013071623822127"
+ "928412503377536351043759326499181808179961898982823477228588"
+ "654633283551779698981993873980053909390631503565951557022639"
+ "229085839244910518443593180284993653615250031937045767824921"
+ "936562366986365848075700158576926990370631192827955855133292"
+ "783433840935197801553124659726357957462276646527282722005637"
+ "400648549997709659947045402082816622623785739345073633900796"
+ "776193057750674017632467360096895134053553745851666113422376"
+ "667860416215968046191446729184030053005753084904876539171138"
+ "659164623952491262365388187963623937328042389101867234849766"
+ "823508986338858792562830275599565752445550725518931369083625"
+ "477918694866799496832404970582102851318545139621383772282614"
+ "5437693412532098591327667236328124e-324",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x1.fffffffffffffffep-1076,
+ -0x1.fffffffffffffffep-1076,
+ false,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x1.fffffffffffffffep-1076,
+ -0x1.fffffffffffffffep-1076,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x1.ffffffffffffffffffffffffffffp-1076,
+ -0x1.ffffffffffffffffffffffffffffp-1076),
+ TEST ("-2.470328229206232720882843964341106861825299013071623822127"
+ "928412503377536351043759326499181808179961898982823477228588"
+ "654633283551779698981993873980053909390631503565951557022639"
+ "229085839244910518443593180284993653615250031937045767824921"
+ "936562366986365848075700158576926990370631192827955855133292"
+ "783433840935197801553124659726357957462276646527282722005637"
+ "400648549997709659947045402082816622623785739345073633900796"
+ "776193057750674017632467360096895134053553745851666113422376"
+ "667860416215968046191446729184030053005753084904876539171138"
+ "659164623952491262365388187963623937328042389101867234849766"
+ "823508986338858792562830275599565752445550725518931369083625"
+ "477918694866799496832404970582102851318545139621383772282614"
+ "5437693412532098591327667236328125e-324",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ true,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x2p-1076,
+ true,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x2p-1076,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ true,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x2p-1076),
+ TEST ("-2.470328229206232720882843964341106861825299013071623822127"
+ "928412503377536351043759326499181808179961898982823477228588"
+ "654633283551779698981993873980053909390631503565951557022639"
+ "229085839244910518443593180284993653615250031937045767824921"
+ "936562366986365848075700158576926990370631192827955855133292"
+ "783433840935197801553124659726357957462276646527282722005637"
+ "400648549997709659947045402082816622623785739345073633900796"
+ "776193057750674017632467360096895134053553745851666113422376"
+ "667860416215968046191446729184030053005753084904876539171138"
+ "659164623952491262365388187963623937328042389101867234849766"
+ "823508986338858792562830275599565752445550725518931369083625"
+ "477918694866799496832404970582102851318545139621383772282614"
+ "5437693412532098591327667236328126e-324",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x2.0000000000000004p-1076,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x2p-1076,
+ false,
+ -0x2.0000000000000004p-1076,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x2p-1076,
+ false,
+ -0x4p-1076,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x2.0000000000000000000000000002p-1076,
+ -0x2p-1076,
+ -0x2p-1076,
+ -0x2p-1076),
+ TEST ("1.8225997659412373012642029668097099081995254078467816718604"
+ "902435141858443166988684047803543129136025986236736736017655"
+ "509834928163110160849867540377949045027419112905889658392846"
+ "126319028167798783107812829917053644701598967767636342956203"
+ "999770864055077592691915230273843577112246476529298591341071"
+ "313110337661777304220340396298768698441131694859514066773321"
+ "059786469060001083813361460161387168195154228027648977594276"
+ "496061276605855817438145692314650177569263750801566422892936"
+ "732834290416745265618525969943519916542939199731612507343012"
+ "297331882934352282118173551211985973294301787840335672389913"
+ "821098681464088756477802684228806339233239542587316254618680"
+ "197563613907079766830481997222017010585267442240109888818022"
+ "189543438116245170584546472752661417773021275082355242554950"
+ "776248474101880875363872607989624146320823364146896124171892"
+ "610744237622308266702265704492674694505399997330424978964704"
+ "335411125839490463131661420668167686151828553033363555080508"
+ "484934542727634080467233927879117726432283352324546435315312"
+ "937809651095964197873430398662003709663353962932921239516263"
+ "008572512558260093668527782388349282015308359304941505110445"
+ "043762021191469060607078792635897736408141163554429972292873"
+ "575169264387977130124003958599909776720759582995017519144111"
+ "001778329839793855454688442046155253818724410472281602421363"
+ "580613990749181808302947976045417884436271162664776148749463"
+ "202753814797191206392480969096910387729527305862739806702349"
+ "088455828380471306603628636563037414688265702108098430515297"
+ "645997107159687247830496686980315376091511219227376708389862"
+ "310190633134517040835432587726931910775044780329777051964574"
+ "763119639404235797665922677433332402402817037657141926646502"
+ "612388421085254756323737273178774331073924707711575555193153"
+ "421957126062196520952920611871114861423032687425262323243276"
+ "848595495133802591437804984986053892365334900647137137197585"
+ "161954823956838391108748154877098567190695813394392779995887"
+ "642254413740232692940887236351533691174492514884514265006822"
+ "752026136435469700291628942927286843274959781329315250417360"
+ "438115330104516894597449604875954147108010051910197388860417"
+ "003307595774863477182911525109554542883460240867674794470854"
+ "883815424039187014069246137704710366577005576311674384079810"
+ "437206511282792194562503036151028910065418370565117488062226"
+ "073975854919243439941741016447206284543777826080409075756028"
+ "194465562812076645422284670475730922346454505830553174377950"
+ "824178034708147037448871898963699023373821217419560423459358"
+ "846127232531421552826545954362386431279626917642725181802754"
+ "271134597856231805666129524101509582941585421888561296839474"
+ "232056474112935379177434928227554149402642893913492062781246"
+ "372611175305462271711931011635602039137701669573065960945871"
+ "579420683440097179831368317352157202215160682058878025153007"
+ "184185319863451652087375936651004559837502483808090613073982"
+ "264685620351993519454344577635257452328683726988824705474397"
+ "398247190812883071734743260426540123481791283782928972842466"
+ "595210269414219040901793935553872090377394005932597887081359"
+ "481915849178541128182923272843218513093012167744690818603663"
+ "862691727272565325057703378827553284852502067686026850339624"
+ "401046086817036618366842240024522042069888708534827471235203"
+ "998932259309110942367856287784097166420437430118381247339347"
+ "418156902369282431197735078016591613063918260343498992697002"
+ "033186558413655576703389208301203552157755701852051877927864"
+ "696515420369217703510602759815252574799728706795849558382877"
+ "392016396900560101736741462690753991602263974212137632508984"
+ "264559315540891383192361601189350414311358816980975697568561"
+ "515680971830107704152657284552920241862730125888825702301035"
+ "564615759615882010733764341109834449576907982406265803484111"
+ "303615971297609065271517286111839839646343815364461776394273"
+ "571391219315553915335300622295196577640884201524657614065743"
+ "729121754460652975075990012786021662416077757235487562550381"
+ "116824006014440438178253273174734436163638119532295383351135"
+ "543170811596051785036366846773285937845231974424475418970517"
+ "659179798069972876889488877627309887323737590814875050457317"
+ "809625163713227973229002908003491739085115971899606986738405"
+ "752463436186745107821032315480693516006251388789902053863235"
+ "071957895722121876262598833823352290042576488238120724072267"
+ "480348425637199003147760378463243043407534395221882144887315"
+ "875876025907739792297575795373506429192468470170038312050500"
+ "917665707583420927303790875332407805094505665159755210495266"
+ "485594187244922216154283213688032393939401426499517609275128"
+ "062067355172333120857796045387692492375534056470145301671359"
+ "016602832469675123108598588424022216759334733452626330303791"
+ "660952659036162827509451468771297954737165701921676834866994"
+ "084496268491510599580714458155026746676860790028899722645883"
+ "679435969902046442373108472951515492761911884847211825930115"
+ "654927539118088350255959445076757398298893380662248358210075"
+ "297702191186519614515280395341723177201383862827129721649638"
+ "274531314762377778754560119397123180107310216608157141828379"
+ "259328274508467371717057031104537750450228447941619684073375"
+ "630517322006118640290925241602376256334414376495602911265450"
+ "165889418372161719063670619610214632774542741157366426747861"
+ "054811449449004970132668146607323502760146957586465275981090"
+ "328336256381187450646030492071694516054712444513961269623339"
+ "705411366337817643269316717217432478812002049894979925260411"
+ "553651385384826214231392012841425936827944383266227115236029"
+ "717393064659821056467446870597828757433936024422511537561864"
+ "619865595955628070343780472634463916608440151554502790128417"
+ "277259492437005696576453717387309605129939526661181496994297"
+ "244693710437436581443653555343763817246961834486181294985455"
+ "884981266421533438177271809310897035958260776218253097858601"
+ "160643120653927024652834025146166356877731266566437231429061"
+ "099807825113272551869352908241073955695854354852545370793609"
+ "838167127357752579007490955536081388103461735071174567636929"
+ "060824172375010035497010614957197713919909924635906503348016"
+ "450952475530978921242656498701313530533991692867619886826204"
+ "706468476070943378163577235406861262755114909606255628375659"
+ "196050370661430148107216310635729360112021571291096278032076"
+ "401092225373270173950575377792566872113768085940991929655824"
+ "050914085013970861399015141010432835406337266746706727481946"
+ "196898882472095111505210339933002505227334750020285673634670"
+ "738458390159933494226851499935336922036551687169140582574153"
+ "726872453800858360764892975201757027862632615130256075468549"
+ "502839367841926212872731925042838691319757663382746471782087"
+ "828988857978192483595747889021081459460627705275735868618724"
+ "958783348362295106875556443770626864591972089881215465141073"
+ "516646930158996569747675806719463602045230325049794904894739"
+ "988312727573320971310488326486213061839843830003145873279435"
+ "454121817918269218294901387830156432148142381592864575229119"
+ "479029130050663564889172093067341444164942736885872753984012"
+ "865743421266470861425283889134636885790293235727017788606167"
+ "560012477186697069994213912998550931078617189790771376702549"
+ "055361745205232419031423044366971378594392952093464046441667"
+ "117613906203494872209149396518971207279263883566606774353236"
+ "255473603377861613942239543893894460581170658088042083661404"
+ "937465706659424639301296621963906278930754459296017486063079"
+ "582024995485338893699574289806529424673393810217577605952909"
+ "491283123179789154639057105774960699934999681018155749261864"
+ "012821574480758746632022143860041252142846691648490809250856"
+ "327057133540568617791625295314357533564192304930155735301757"
+ "457531580062662693966772497728335047637869054460240023262262"
+ "260698443946964564691259441706490611176164305693669515767804"
+ "836460521205954731752583848846525153811934541997962775215961"
+ "180346397456122329133421016560406277159258781706172834569862"
+ "946953007793254152187010227976038449980797987728559041018441"
+ "590564594738308310579014597893182017151615208050090318483536"
+ "106249131918576316944251537092347119867433735046169725181104"
+ "507590928834713669184230634083190791725243913641206256399101"
+ "550966117564795555149420011152858441084271411289366093158722"
+ "254752761637144762690747726313899449121995142565661043193165"
+ "353010677613760383307839362361625628371456344409245507081913"
+ "518237257141164239966660785903970075181826808229440731778746"
+ "830751045427285945936163931997929399708401851740705527023711"
+ "492262489476846435969872480702228386506357017948329114555484"
+ "164760105906717855684788039081591713778852802032849601308169"
+ "832017420608399347713424218434541771868442189843417628618330"
+ "607429739733739437863581804003482214082370567967330530446020"
+ "897773385726872912189813323094415093143437550397556262780011"
+ "208941731420098754319961419532567861629590267320403217607660"
+ "774125374101195389953895035347940170148097810952083736798564"
+ "420421622607993390894450932047257403433908665884124601384175"
+ "012387617430467934818665777122459487877479257747635172691688"
+ "471574765285820096075133353869554987216398800026453207557923"
+ "535966131756358352198875705382763163680830588056974671628368"
+ "719411827591592806044707764658145625683998557872894583705117"
+ "936257144994734815912058252772021032081682437093280526665192"
+ "728869800954748014250481042845426151143544474372887617562791"
+ "409866964806319608280819816846942058817381943129762034507591"
+ "367065185343216917751414811188645979508942996964383255432999"
+ "246119971295726296202396921903289017490293595312645036697141"
+ "581149988784499288560584613793415358537364677872496224892098"
+ "940856692342358755626519304557946447004033186014602147449599"
+ "351317079758304444877174136521487256811625263467410007624215"
+ "856145392339552689565690577293133060124853654497575571509576"
+ "408069646196646757505249296126372820539234090564691695806544"
+ "715766025588258581902342311480969412221466852421842650484494"
+ "063894865891424563992751226230317059592413191308470146226366"
+ "458233536657973376067140793776369412191789801225320255079444"
+ "592709005698858098716107025188986428347407279053266600044521"
+ "079987989879536957560131070100060050673537683871138182387904"
+ "590837539252425985326631955455857258818756188063697492342550"
+ "045277400125480079927908846850898283905756532829762950509886"
+ "991675925213188409911532242068610889478326451513981115020992"
+ "630395715520350039372702741107911736947893709538471200363740"
+ "669304116845653259038102180504837110789645359520309929381266"
+ "271463740502507456882882255788069710715770802338317704510793"
+ "279398576163709512326095306022330346997717688118726634628650"
+ "675984237916551201500684504118483305560295744746257951860545"
+ "390826531622290588364837980034428055971370065573420370270905"
+ "592141420051502465016793525150950140243606137664910359769114"
+ "512792293426708006440346732679574519594848136194781488696994"
+ "267355775509666977187349644291823026624985531726865131782364"
+ "428380093055155988532106121916567178604128111080322761213573"
+ "781334480667563871257352254033032675246444238637990062075058"
+ "819854494711379915549313390179300091783493496822950479766923"
+ "983305064901026858870340863556799948310622536592472509634484"
+ "910640735459644047154918467543140024764605449756679450446473"
+ "048922824617117723876384637412932380635306714345354710568410"
+ "140587435077620501285599837051978855056335305570615129711860"
+ "309387503970812843734718712815925040263182888714533431137355"
+ "255722368962836390856001176889513153529416105504464217522618"
+ "741534232432067776306691118141998014985541610448993152948945"
+ "865983354717289054861249734477980864059509622993770525110616"
+ "313865830823478927462500895844216364365499438449134659145333"
+ "799994034010282254566331595018205841080487728993632798168070"
+ "476921205941768965021887178681810499301253039335978279707627"
+ "295287697256489961179958946847840431902105306618594831078534"
+ "622089641993900896756734276531931450266972752637997248151974"
+ "2277811246822238899767398834228515624e-4951",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-16448,
+ false,
+ 0x0p+0,
+ 0x4p-16448,
+ 0x0p+0,
+ 0x4p-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x3.fffffffffffcp-16448,
+ 0x4p-16448,
+ 0x3.fffffffffffcp-16448,
+ 0x4p-16448),
+ TEST ("1.8225997659412373012642029668097099081995254078467816718604"
+ "902435141858443166988684047803543129136025986236736736017655"
+ "509834928163110160849867540377949045027419112905889658392846"
+ "126319028167798783107812829917053644701598967767636342956203"
+ "999770864055077592691915230273843577112246476529298591341071"
+ "313110337661777304220340396298768698441131694859514066773321"
+ "059786469060001083813361460161387168195154228027648977594276"
+ "496061276605855817438145692314650177569263750801566422892936"
+ "732834290416745265618525969943519916542939199731612507343012"
+ "297331882934352282118173551211985973294301787840335672389913"
+ "821098681464088756477802684228806339233239542587316254618680"
+ "197563613907079766830481997222017010585267442240109888818022"
+ "189543438116245170584546472752661417773021275082355242554950"
+ "776248474101880875363872607989624146320823364146896124171892"
+ "610744237622308266702265704492674694505399997330424978964704"
+ "335411125839490463131661420668167686151828553033363555080508"
+ "484934542727634080467233927879117726432283352324546435315312"
+ "937809651095964197873430398662003709663353962932921239516263"
+ "008572512558260093668527782388349282015308359304941505110445"
+ "043762021191469060607078792635897736408141163554429972292873"
+ "575169264387977130124003958599909776720759582995017519144111"
+ "001778329839793855454688442046155253818724410472281602421363"
+ "580613990749181808302947976045417884436271162664776148749463"
+ "202753814797191206392480969096910387729527305862739806702349"
+ "088455828380471306603628636563037414688265702108098430515297"
+ "645997107159687247830496686980315376091511219227376708389862"
+ "310190633134517040835432587726931910775044780329777051964574"
+ "763119639404235797665922677433332402402817037657141926646502"
+ "612388421085254756323737273178774331073924707711575555193153"
+ "421957126062196520952920611871114861423032687425262323243276"
+ "848595495133802591437804984986053892365334900647137137197585"
+ "161954823956838391108748154877098567190695813394392779995887"
+ "642254413740232692940887236351533691174492514884514265006822"
+ "752026136435469700291628942927286843274959781329315250417360"
+ "438115330104516894597449604875954147108010051910197388860417"
+ "003307595774863477182911525109554542883460240867674794470854"
+ "883815424039187014069246137704710366577005576311674384079810"
+ "437206511282792194562503036151028910065418370565117488062226"
+ "073975854919243439941741016447206284543777826080409075756028"
+ "194465562812076645422284670475730922346454505830553174377950"
+ "824178034708147037448871898963699023373821217419560423459358"
+ "846127232531421552826545954362386431279626917642725181802754"
+ "271134597856231805666129524101509582941585421888561296839474"
+ "232056474112935379177434928227554149402642893913492062781246"
+ "372611175305462271711931011635602039137701669573065960945871"
+ "579420683440097179831368317352157202215160682058878025153007"
+ "184185319863451652087375936651004559837502483808090613073982"
+ "264685620351993519454344577635257452328683726988824705474397"
+ "398247190812883071734743260426540123481791283782928972842466"
+ "595210269414219040901793935553872090377394005932597887081359"
+ "481915849178541128182923272843218513093012167744690818603663"
+ "862691727272565325057703378827553284852502067686026850339624"
+ "401046086817036618366842240024522042069888708534827471235203"
+ "998932259309110942367856287784097166420437430118381247339347"
+ "418156902369282431197735078016591613063918260343498992697002"
+ "033186558413655576703389208301203552157755701852051877927864"
+ "696515420369217703510602759815252574799728706795849558382877"
+ "392016396900560101736741462690753991602263974212137632508984"
+ "264559315540891383192361601189350414311358816980975697568561"
+ "515680971830107704152657284552920241862730125888825702301035"
+ "564615759615882010733764341109834449576907982406265803484111"
+ "303615971297609065271517286111839839646343815364461776394273"
+ "571391219315553915335300622295196577640884201524657614065743"
+ "729121754460652975075990012786021662416077757235487562550381"
+ "116824006014440438178253273174734436163638119532295383351135"
+ "543170811596051785036366846773285937845231974424475418970517"
+ "659179798069972876889488877627309887323737590814875050457317"
+ "809625163713227973229002908003491739085115971899606986738405"
+ "752463436186745107821032315480693516006251388789902053863235"
+ "071957895722121876262598833823352290042576488238120724072267"
+ "480348425637199003147760378463243043407534395221882144887315"
+ "875876025907739792297575795373506429192468470170038312050500"
+ "917665707583420927303790875332407805094505665159755210495266"
+ "485594187244922216154283213688032393939401426499517609275128"
+ "062067355172333120857796045387692492375534056470145301671359"
+ "016602832469675123108598588424022216759334733452626330303791"
+ "660952659036162827509451468771297954737165701921676834866994"
+ "084496268491510599580714458155026746676860790028899722645883"
+ "679435969902046442373108472951515492761911884847211825930115"
+ "654927539118088350255959445076757398298893380662248358210075"
+ "297702191186519614515280395341723177201383862827129721649638"
+ "274531314762377778754560119397123180107310216608157141828379"
+ "259328274508467371717057031104537750450228447941619684073375"
+ "630517322006118640290925241602376256334414376495602911265450"
+ "165889418372161719063670619610214632774542741157366426747861"
+ "054811449449004970132668146607323502760146957586465275981090"
+ "328336256381187450646030492071694516054712444513961269623339"
+ "705411366337817643269316717217432478812002049894979925260411"
+ "553651385384826214231392012841425936827944383266227115236029"
+ "717393064659821056467446870597828757433936024422511537561864"
+ "619865595955628070343780472634463916608440151554502790128417"
+ "277259492437005696576453717387309605129939526661181496994297"
+ "244693710437436581443653555343763817246961834486181294985455"
+ "884981266421533438177271809310897035958260776218253097858601"
+ "160643120653927024652834025146166356877731266566437231429061"
+ "099807825113272551869352908241073955695854354852545370793609"
+ "838167127357752579007490955536081388103461735071174567636929"
+ "060824172375010035497010614957197713919909924635906503348016"
+ "450952475530978921242656498701313530533991692867619886826204"
+ "706468476070943378163577235406861262755114909606255628375659"
+ "196050370661430148107216310635729360112021571291096278032076"
+ "401092225373270173950575377792566872113768085940991929655824"
+ "050914085013970861399015141010432835406337266746706727481946"
+ "196898882472095111505210339933002505227334750020285673634670"
+ "738458390159933494226851499935336922036551687169140582574153"
+ "726872453800858360764892975201757027862632615130256075468549"
+ "502839367841926212872731925042838691319757663382746471782087"
+ "828988857978192483595747889021081459460627705275735868618724"
+ "958783348362295106875556443770626864591972089881215465141073"
+ "516646930158996569747675806719463602045230325049794904894739"
+ "988312727573320971310488326486213061839843830003145873279435"
+ "454121817918269218294901387830156432148142381592864575229119"
+ "479029130050663564889172093067341444164942736885872753984012"
+ "865743421266470861425283889134636885790293235727017788606167"
+ "560012477186697069994213912998550931078617189790771376702549"
+ "055361745205232419031423044366971378594392952093464046441667"
+ "117613906203494872209149396518971207279263883566606774353236"
+ "255473603377861613942239543893894460581170658088042083661404"
+ "937465706659424639301296621963906278930754459296017486063079"
+ "582024995485338893699574289806529424673393810217577605952909"
+ "491283123179789154639057105774960699934999681018155749261864"
+ "012821574480758746632022143860041252142846691648490809250856"
+ "327057133540568617791625295314357533564192304930155735301757"
+ "457531580062662693966772497728335047637869054460240023262262"
+ "260698443946964564691259441706490611176164305693669515767804"
+ "836460521205954731752583848846525153811934541997962775215961"
+ "180346397456122329133421016560406277159258781706172834569862"
+ "946953007793254152187010227976038449980797987728559041018441"
+ "590564594738308310579014597893182017151615208050090318483536"
+ "106249131918576316944251537092347119867433735046169725181104"
+ "507590928834713669184230634083190791725243913641206256399101"
+ "550966117564795555149420011152858441084271411289366093158722"
+ "254752761637144762690747726313899449121995142565661043193165"
+ "353010677613760383307839362361625628371456344409245507081913"
+ "518237257141164239966660785903970075181826808229440731778746"
+ "830751045427285945936163931997929399708401851740705527023711"
+ "492262489476846435969872480702228386506357017948329114555484"
+ "164760105906717855684788039081591713778852802032849601308169"
+ "832017420608399347713424218434541771868442189843417628618330"
+ "607429739733739437863581804003482214082370567967330530446020"
+ "897773385726872912189813323094415093143437550397556262780011"
+ "208941731420098754319961419532567861629590267320403217607660"
+ "774125374101195389953895035347940170148097810952083736798564"
+ "420421622607993390894450932047257403433908665884124601384175"
+ "012387617430467934818665777122459487877479257747635172691688"
+ "471574765285820096075133353869554987216398800026453207557923"
+ "535966131756358352198875705382763163680830588056974671628368"
+ "719411827591592806044707764658145625683998557872894583705117"
+ "936257144994734815912058252772021032081682437093280526665192"
+ "728869800954748014250481042845426151143544474372887617562791"
+ "409866964806319608280819816846942058817381943129762034507591"
+ "367065185343216917751414811188645979508942996964383255432999"
+ "246119971295726296202396921903289017490293595312645036697141"
+ "581149988784499288560584613793415358537364677872496224892098"
+ "940856692342358755626519304557946447004033186014602147449599"
+ "351317079758304444877174136521487256811625263467410007624215"
+ "856145392339552689565690577293133060124853654497575571509576"
+ "408069646196646757505249296126372820539234090564691695806544"
+ "715766025588258581902342311480969412221466852421842650484494"
+ "063894865891424563992751226230317059592413191308470146226366"
+ "458233536657973376067140793776369412191789801225320255079444"
+ "592709005698858098716107025188986428347407279053266600044521"
+ "079987989879536957560131070100060050673537683871138182387904"
+ "590837539252425985326631955455857258818756188063697492342550"
+ "045277400125480079927908846850898283905756532829762950509886"
+ "991675925213188409911532242068610889478326451513981115020992"
+ "630395715520350039372702741107911736947893709538471200363740"
+ "669304116845653259038102180504837110789645359520309929381266"
+ "271463740502507456882882255788069710715770802338317704510793"
+ "279398576163709512326095306022330346997717688118726634628650"
+ "675984237916551201500684504118483305560295744746257951860545"
+ "390826531622290588364837980034428055971370065573420370270905"
+ "592141420051502465016793525150950140243606137664910359769114"
+ "512792293426708006440346732679574519594848136194781488696994"
+ "267355775509666977187349644291823026624985531726865131782364"
+ "428380093055155988532106121916567178604128111080322761213573"
+ "781334480667563871257352254033032675246444238637990062075058"
+ "819854494711379915549313390179300091783493496822950479766923"
+ "983305064901026858870340863556799948310622536592472509634484"
+ "910640735459644047154918467543140024764605449756679450446473"
+ "048922824617117723876384637412932380635306714345354710568410"
+ "140587435077620501285599837051978855056335305570615129711860"
+ "309387503970812843734718712815925040263182888714533431137355"
+ "255722368962836390856001176889513153529416105504464217522618"
+ "741534232432067776306691118141998014985541610448993152948945"
+ "865983354717289054861249734477980864059509622993770525110616"
+ "313865830823478927462500895844216364365499438449134659145333"
+ "799994034010282254566331595018205841080487728993632798168070"
+ "476921205941768965021887178681810499301253039335978279707627"
+ "295287697256489961179958946847840431902105306618594831078534"
+ "622089641993900896756734276531931450266972752637997248151974"
+ "2277811246822238899767398834228515625e-4951",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-16448,
+ true,
+ 0x4p-16448,
+ 0x4p-16448,
+ 0x4p-16448,
+ 0x4p-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ true,
+ 0x4p-16448,
+ 0x4p-16448,
+ 0x4p-16448,
+ 0x4p-16448),
+ TEST ("1.8225997659412373012642029668097099081995254078467816718604"
+ "902435141858443166988684047803543129136025986236736736017655"
+ "509834928163110160849867540377949045027419112905889658392846"
+ "126319028167798783107812829917053644701598967767636342956203"
+ "999770864055077592691915230273843577112246476529298591341071"
+ "313110337661777304220340396298768698441131694859514066773321"
+ "059786469060001083813361460161387168195154228027648977594276"
+ "496061276605855817438145692314650177569263750801566422892936"
+ "732834290416745265618525969943519916542939199731612507343012"
+ "297331882934352282118173551211985973294301787840335672389913"
+ "821098681464088756477802684228806339233239542587316254618680"
+ "197563613907079766830481997222017010585267442240109888818022"
+ "189543438116245170584546472752661417773021275082355242554950"
+ "776248474101880875363872607989624146320823364146896124171892"
+ "610744237622308266702265704492674694505399997330424978964704"
+ "335411125839490463131661420668167686151828553033363555080508"
+ "484934542727634080467233927879117726432283352324546435315312"
+ "937809651095964197873430398662003709663353962932921239516263"
+ "008572512558260093668527782388349282015308359304941505110445"
+ "043762021191469060607078792635897736408141163554429972292873"
+ "575169264387977130124003958599909776720759582995017519144111"
+ "001778329839793855454688442046155253818724410472281602421363"
+ "580613990749181808302947976045417884436271162664776148749463"
+ "202753814797191206392480969096910387729527305862739806702349"
+ "088455828380471306603628636563037414688265702108098430515297"
+ "645997107159687247830496686980315376091511219227376708389862"
+ "310190633134517040835432587726931910775044780329777051964574"
+ "763119639404235797665922677433332402402817037657141926646502"
+ "612388421085254756323737273178774331073924707711575555193153"
+ "421957126062196520952920611871114861423032687425262323243276"
+ "848595495133802591437804984986053892365334900647137137197585"
+ "161954823956838391108748154877098567190695813394392779995887"
+ "642254413740232692940887236351533691174492514884514265006822"
+ "752026136435469700291628942927286843274959781329315250417360"
+ "438115330104516894597449604875954147108010051910197388860417"
+ "003307595774863477182911525109554542883460240867674794470854"
+ "883815424039187014069246137704710366577005576311674384079810"
+ "437206511282792194562503036151028910065418370565117488062226"
+ "073975854919243439941741016447206284543777826080409075756028"
+ "194465562812076645422284670475730922346454505830553174377950"
+ "824178034708147037448871898963699023373821217419560423459358"
+ "846127232531421552826545954362386431279626917642725181802754"
+ "271134597856231805666129524101509582941585421888561296839474"
+ "232056474112935379177434928227554149402642893913492062781246"
+ "372611175305462271711931011635602039137701669573065960945871"
+ "579420683440097179831368317352157202215160682058878025153007"
+ "184185319863451652087375936651004559837502483808090613073982"
+ "264685620351993519454344577635257452328683726988824705474397"
+ "398247190812883071734743260426540123481791283782928972842466"
+ "595210269414219040901793935553872090377394005932597887081359"
+ "481915849178541128182923272843218513093012167744690818603663"
+ "862691727272565325057703378827553284852502067686026850339624"
+ "401046086817036618366842240024522042069888708534827471235203"
+ "998932259309110942367856287784097166420437430118381247339347"
+ "418156902369282431197735078016591613063918260343498992697002"
+ "033186558413655576703389208301203552157755701852051877927864"
+ "696515420369217703510602759815252574799728706795849558382877"
+ "392016396900560101736741462690753991602263974212137632508984"
+ "264559315540891383192361601189350414311358816980975697568561"
+ "515680971830107704152657284552920241862730125888825702301035"
+ "564615759615882010733764341109834449576907982406265803484111"
+ "303615971297609065271517286111839839646343815364461776394273"
+ "571391219315553915335300622295196577640884201524657614065743"
+ "729121754460652975075990012786021662416077757235487562550381"
+ "116824006014440438178253273174734436163638119532295383351135"
+ "543170811596051785036366846773285937845231974424475418970517"
+ "659179798069972876889488877627309887323737590814875050457317"
+ "809625163713227973229002908003491739085115971899606986738405"
+ "752463436186745107821032315480693516006251388789902053863235"
+ "071957895722121876262598833823352290042576488238120724072267"
+ "480348425637199003147760378463243043407534395221882144887315"
+ "875876025907739792297575795373506429192468470170038312050500"
+ "917665707583420927303790875332407805094505665159755210495266"
+ "485594187244922216154283213688032393939401426499517609275128"
+ "062067355172333120857796045387692492375534056470145301671359"
+ "016602832469675123108598588424022216759334733452626330303791"
+ "660952659036162827509451468771297954737165701921676834866994"
+ "084496268491510599580714458155026746676860790028899722645883"
+ "679435969902046442373108472951515492761911884847211825930115"
+ "654927539118088350255959445076757398298893380662248358210075"
+ "297702191186519614515280395341723177201383862827129721649638"
+ "274531314762377778754560119397123180107310216608157141828379"
+ "259328274508467371717057031104537750450228447941619684073375"
+ "630517322006118640290925241602376256334414376495602911265450"
+ "165889418372161719063670619610214632774542741157366426747861"
+ "054811449449004970132668146607323502760146957586465275981090"
+ "328336256381187450646030492071694516054712444513961269623339"
+ "705411366337817643269316717217432478812002049894979925260411"
+ "553651385384826214231392012841425936827944383266227115236029"
+ "717393064659821056467446870597828757433936024422511537561864"
+ "619865595955628070343780472634463916608440151554502790128417"
+ "277259492437005696576453717387309605129939526661181496994297"
+ "244693710437436581443653555343763817246961834486181294985455"
+ "884981266421533438177271809310897035958260776218253097858601"
+ "160643120653927024652834025146166356877731266566437231429061"
+ "099807825113272551869352908241073955695854354852545370793609"
+ "838167127357752579007490955536081388103461735071174567636929"
+ "060824172375010035497010614957197713919909924635906503348016"
+ "450952475530978921242656498701313530533991692867619886826204"
+ "706468476070943378163577235406861262755114909606255628375659"
+ "196050370661430148107216310635729360112021571291096278032076"
+ "401092225373270173950575377792566872113768085940991929655824"
+ "050914085013970861399015141010432835406337266746706727481946"
+ "196898882472095111505210339933002505227334750020285673634670"
+ "738458390159933494226851499935336922036551687169140582574153"
+ "726872453800858360764892975201757027862632615130256075468549"
+ "502839367841926212872731925042838691319757663382746471782087"
+ "828988857978192483595747889021081459460627705275735868618724"
+ "958783348362295106875556443770626864591972089881215465141073"
+ "516646930158996569747675806719463602045230325049794904894739"
+ "988312727573320971310488326486213061839843830003145873279435"
+ "454121817918269218294901387830156432148142381592864575229119"
+ "479029130050663564889172093067341444164942736885872753984012"
+ "865743421266470861425283889134636885790293235727017788606167"
+ "560012477186697069994213912998550931078617189790771376702549"
+ "055361745205232419031423044366971378594392952093464046441667"
+ "117613906203494872209149396518971207279263883566606774353236"
+ "255473603377861613942239543893894460581170658088042083661404"
+ "937465706659424639301296621963906278930754459296017486063079"
+ "582024995485338893699574289806529424673393810217577605952909"
+ "491283123179789154639057105774960699934999681018155749261864"
+ "012821574480758746632022143860041252142846691648490809250856"
+ "327057133540568617791625295314357533564192304930155735301757"
+ "457531580062662693966772497728335047637869054460240023262262"
+ "260698443946964564691259441706490611176164305693669515767804"
+ "836460521205954731752583848846525153811934541997962775215961"
+ "180346397456122329133421016560406277159258781706172834569862"
+ "946953007793254152187010227976038449980797987728559041018441"
+ "590564594738308310579014597893182017151615208050090318483536"
+ "106249131918576316944251537092347119867433735046169725181104"
+ "507590928834713669184230634083190791725243913641206256399101"
+ "550966117564795555149420011152858441084271411289366093158722"
+ "254752761637144762690747726313899449121995142565661043193165"
+ "353010677613760383307839362361625628371456344409245507081913"
+ "518237257141164239966660785903970075181826808229440731778746"
+ "830751045427285945936163931997929399708401851740705527023711"
+ "492262489476846435969872480702228386506357017948329114555484"
+ "164760105906717855684788039081591713778852802032849601308169"
+ "832017420608399347713424218434541771868442189843417628618330"
+ "607429739733739437863581804003482214082370567967330530446020"
+ "897773385726872912189813323094415093143437550397556262780011"
+ "208941731420098754319961419532567861629590267320403217607660"
+ "774125374101195389953895035347940170148097810952083736798564"
+ "420421622607993390894450932047257403433908665884124601384175"
+ "012387617430467934818665777122459487877479257747635172691688"
+ "471574765285820096075133353869554987216398800026453207557923"
+ "535966131756358352198875705382763163680830588056974671628368"
+ "719411827591592806044707764658145625683998557872894583705117"
+ "936257144994734815912058252772021032081682437093280526665192"
+ "728869800954748014250481042845426151143544474372887617562791"
+ "409866964806319608280819816846942058817381943129762034507591"
+ "367065185343216917751414811188645979508942996964383255432999"
+ "246119971295726296202396921903289017490293595312645036697141"
+ "581149988784499288560584613793415358537364677872496224892098"
+ "940856692342358755626519304557946447004033186014602147449599"
+ "351317079758304444877174136521487256811625263467410007624215"
+ "856145392339552689565690577293133060124853654497575571509576"
+ "408069646196646757505249296126372820539234090564691695806544"
+ "715766025588258581902342311480969412221466852421842650484494"
+ "063894865891424563992751226230317059592413191308470146226366"
+ "458233536657973376067140793776369412191789801225320255079444"
+ "592709005698858098716107025188986428347407279053266600044521"
+ "079987989879536957560131070100060050673537683871138182387904"
+ "590837539252425985326631955455857258818756188063697492342550"
+ "045277400125480079927908846850898283905756532829762950509886"
+ "991675925213188409911532242068610889478326451513981115020992"
+ "630395715520350039372702741107911736947893709538471200363740"
+ "669304116845653259038102180504837110789645359520309929381266"
+ "271463740502507456882882255788069710715770802338317704510793"
+ "279398576163709512326095306022330346997717688118726634628650"
+ "675984237916551201500684504118483305560295744746257951860545"
+ "390826531622290588364837980034428055971370065573420370270905"
+ "592141420051502465016793525150950140243606137664910359769114"
+ "512792293426708006440346732679574519594848136194781488696994"
+ "267355775509666977187349644291823026624985531726865131782364"
+ "428380093055155988532106121916567178604128111080322761213573"
+ "781334480667563871257352254033032675246444238637990062075058"
+ "819854494711379915549313390179300091783493496822950479766923"
+ "983305064901026858870340863556799948310622536592472509634484"
+ "910640735459644047154918467543140024764605449756679450446473"
+ "048922824617117723876384637412932380635306714345354710568410"
+ "140587435077620501285599837051978855056335305570615129711860"
+ "309387503970812843734718712815925040263182888714533431137355"
+ "255722368962836390856001176889513153529416105504464217522618"
+ "741534232432067776306691118141998014985541610448993152948945"
+ "865983354717289054861249734477980864059509622993770525110616"
+ "313865830823478927462500895844216364365499438449134659145333"
+ "799994034010282254566331595018205841080487728993632798168070"
+ "476921205941768965021887178681810499301253039335978279707627"
+ "295287697256489961179958946847840431902105306618594831078534"
+ "622089641993900896756734276531931450266972752637997248151974"
+ "2277811246822238899767398834228515626e-4951",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x0p+0,
+ 0x8p-16448,
+ 0x0p+0,
+ 0x8p-16448,
+ false,
+ 0x4p-16448,
+ 0x4p-16448,
+ 0x4p-16448,
+ 0x8p-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x4p-16448,
+ 0x4p-16448,
+ 0x4p-16448,
+ 0x4.000000000004p-16448),
+ TEST ("-1.822599765941237301264202966809709908199525407846781671860"
+ "490243514185844316698868404780354312913602598623673673601765"
+ "550983492816311016084986754037794904502741911290588965839284"
+ "612631902816779878310781282991705364470159896776763634295620"
+ "399977086405507759269191523027384357711224647652929859134107"
+ "131311033766177730422034039629876869844113169485951406677332"
+ "105978646906000108381336146016138716819515422802764897759427"
+ "649606127660585581743814569231465017756926375080156642289293"
+ "673283429041674526561852596994351991654293919973161250734301"
+ "229733188293435228211817355121198597329430178784033567238991"
+ "382109868146408875647780268422880633923323954258731625461868"
+ "019756361390707976683048199722201701058526744224010988881802"
+ "218954343811624517058454647275266141777302127508235524255495"
+ "077624847410188087536387260798962414632082336414689612417189"
+ "261074423762230826670226570449267469450539999733042497896470"
+ "433541112583949046313166142066816768615182855303336355508050"
+ "848493454272763408046723392787911772643228335232454643531531"
+ "293780965109596419787343039866200370966335396293292123951626"
+ "300857251255826009366852778238834928201530835930494150511044"
+ "504376202119146906060707879263589773640814116355442997229287"
+ "357516926438797713012400395859990977672075958299501751914411"
+ "100177832983979385545468844204615525381872441047228160242136"
+ "358061399074918180830294797604541788443627116266477614874946"
+ "320275381479719120639248096909691038772952730586273980670234"
+ "908845582838047130660362863656303741468826570210809843051529"
+ "764599710715968724783049668698031537609151121922737670838986"
+ "231019063313451704083543258772693191077504478032977705196457"
+ "476311963940423579766592267743333240240281703765714192664650"
+ "261238842108525475632373727317877433107392470771157555519315"
+ "342195712606219652095292061187111486142303268742526232324327"
+ "684859549513380259143780498498605389236533490064713713719758"
+ "516195482395683839110874815487709856719069581339439277999588"
+ "764225441374023269294088723635153369117449251488451426500682"
+ "275202613643546970029162894292728684327495978132931525041736"
+ "043811533010451689459744960487595414710801005191019738886041"
+ "700330759577486347718291152510955454288346024086767479447085"
+ "488381542403918701406924613770471036657700557631167438407981"
+ "043720651128279219456250303615102891006541837056511748806222"
+ "607397585491924343994174101644720628454377782608040907575602"
+ "819446556281207664542228467047573092234645450583055317437795"
+ "082417803470814703744887189896369902337382121741956042345935"
+ "884612723253142155282654595436238643127962691764272518180275"
+ "427113459785623180566612952410150958294158542188856129683947"
+ "423205647411293537917743492822755414940264289391349206278124"
+ "637261117530546227171193101163560203913770166957306596094587"
+ "157942068344009717983136831735215720221516068205887802515300"
+ "718418531986345165208737593665100455983750248380809061307398"
+ "226468562035199351945434457763525745232868372698882470547439"
+ "739824719081288307173474326042654012348179128378292897284246"
+ "659521026941421904090179393555387209037739400593259788708135"
+ "948191584917854112818292327284321851309301216774469081860366"
+ "386269172727256532505770337882755328485250206768602685033962"
+ "440104608681703661836684224002452204206988870853482747123520"
+ "399893225930911094236785628778409716642043743011838124733934"
+ "741815690236928243119773507801659161306391826034349899269700"
+ "203318655841365557670338920830120355215775570185205187792786"
+ "469651542036921770351060275981525257479972870679584955838287"
+ "739201639690056010173674146269075399160226397421213763250898"
+ "426455931554089138319236160118935041431135881698097569756856"
+ "151568097183010770415265728455292024186273012588882570230103"
+ "556461575961588201073376434110983444957690798240626580348411"
+ "130361597129760906527151728611183983964634381536446177639427"
+ "357139121931555391533530062229519657764088420152465761406574"
+ "372912175446065297507599001278602166241607775723548756255038"
+ "111682400601444043817825327317473443616363811953229538335113"
+ "554317081159605178503636684677328593784523197442447541897051"
+ "765917979806997287688948887762730988732373759081487505045731"
+ "780962516371322797322900290800349173908511597189960698673840"
+ "575246343618674510782103231548069351600625138878990205386323"
+ "507195789572212187626259883382335229004257648823812072407226"
+ "748034842563719900314776037846324304340753439522188214488731"
+ "587587602590773979229757579537350642919246847017003831205050"
+ "091766570758342092730379087533240780509450566515975521049526"
+ "648559418724492221615428321368803239393940142649951760927512"
+ "806206735517233312085779604538769249237553405647014530167135"
+ "901660283246967512310859858842402221675933473345262633030379"
+ "166095265903616282750945146877129795473716570192167683486699"
+ "408449626849151059958071445815502674667686079002889972264588"
+ "367943596990204644237310847295151549276191188484721182593011"
+ "565492753911808835025595944507675739829889338066224835821007"
+ "529770219118651961451528039534172317720138386282712972164963"
+ "827453131476237777875456011939712318010731021660815714182837"
+ "925932827450846737171705703110453775045022844794161968407337"
+ "563051732200611864029092524160237625633441437649560291126545"
+ "016588941837216171906367061961021463277454274115736642674786"
+ "105481144944900497013266814660732350276014695758646527598109"
+ "032833625638118745064603049207169451605471244451396126962333"
+ "970541136633781764326931671721743247881200204989497992526041"
+ "155365138538482621423139201284142593682794438326622711523602"
+ "971739306465982105646744687059782875743393602442251153756186"
+ "461986559595562807034378047263446391660844015155450279012841"
+ "727725949243700569657645371738730960512993952666118149699429"
+ "724469371043743658144365355534376381724696183448618129498545"
+ "588498126642153343817727180931089703595826077621825309785860"
+ "116064312065392702465283402514616635687773126656643723142906"
+ "109980782511327255186935290824107395569585435485254537079360"
+ "983816712735775257900749095553608138810346173507117456763692"
+ "906082417237501003549701061495719771391990992463590650334801"
+ "645095247553097892124265649870131353053399169286761988682620"
+ "470646847607094337816357723540686126275511490960625562837565"
+ "919605037066143014810721631063572936011202157129109627803207"
+ "640109222537327017395057537779256687211376808594099192965582"
+ "405091408501397086139901514101043283540633726674670672748194"
+ "619689888247209511150521033993300250522733475002028567363467"
+ "073845839015993349422685149993533692203655168716914058257415"
+ "372687245380085836076489297520175702786263261513025607546854"
+ "950283936784192621287273192504283869131975766338274647178208"
+ "782898885797819248359574788902108145946062770527573586861872"
+ "495878334836229510687555644377062686459197208988121546514107"
+ "351664693015899656974767580671946360204523032504979490489473"
+ "998831272757332097131048832648621306183984383000314587327943"
+ "545412181791826921829490138783015643214814238159286457522911"
+ "947902913005066356488917209306734144416494273688587275398401"
+ "286574342126647086142528388913463688579029323572701778860616"
+ "756001247718669706999421391299855093107861718979077137670254"
+ "905536174520523241903142304436697137859439295209346404644166"
+ "711761390620349487220914939651897120727926388356660677435323"
+ "625547360337786161394223954389389446058117065808804208366140"
+ "493746570665942463930129662196390627893075445929601748606307"
+ "958202499548533889369957428980652942467339381021757760595290"
+ "949128312317978915463905710577496069993499968101815574926186"
+ "401282157448075874663202214386004125214284669164849080925085"
+ "632705713354056861779162529531435753356419230493015573530175"
+ "745753158006266269396677249772833504763786905446024002326226"
+ "226069844394696456469125944170649061117616430569366951576780"
+ "483646052120595473175258384884652515381193454199796277521596"
+ "118034639745612232913342101656040627715925878170617283456986"
+ "294695300779325415218701022797603844998079798772855904101844"
+ "159056459473830831057901459789318201715161520805009031848353"
+ "610624913191857631694425153709234711986743373504616972518110"
+ "450759092883471366918423063408319079172524391364120625639910"
+ "155096611756479555514942001115285844108427141128936609315872"
+ "225475276163714476269074772631389944912199514256566104319316"
+ "535301067761376038330783936236162562837145634440924550708191"
+ "351823725714116423996666078590397007518182680822944073177874"
+ "683075104542728594593616393199792939970840185174070552702371"
+ "149226248947684643596987248070222838650635701794832911455548"
+ "416476010590671785568478803908159171377885280203284960130816"
+ "983201742060839934771342421843454177186844218984341762861833"
+ "060742973973373943786358180400348221408237056796733053044602"
+ "089777338572687291218981332309441509314343755039755626278001"
+ "120894173142009875431996141953256786162959026732040321760766"
+ "077412537410119538995389503534794017014809781095208373679856"
+ "442042162260799339089445093204725740343390866588412460138417"
+ "501238761743046793481866577712245948787747925774763517269168"
+ "847157476528582009607513335386955498721639880002645320755792"
+ "353596613175635835219887570538276316368083058805697467162836"
+ "871941182759159280604470776465814562568399855787289458370511"
+ "793625714499473481591205825277202103208168243709328052666519"
+ "272886980095474801425048104284542615114354447437288761756279"
+ "140986696480631960828081981684694205881738194312976203450759"
+ "136706518534321691775141481118864597950894299696438325543299"
+ "924611997129572629620239692190328901749029359531264503669714"
+ "158114998878449928856058461379341535853736467787249622489209"
+ "894085669234235875562651930455794644700403318601460214744959"
+ "935131707975830444487717413652148725681162526346741000762421"
+ "585614539233955268956569057729313306012485365449757557150957"
+ "640806964619664675750524929612637282053923409056469169580654"
+ "471576602558825858190234231148096941222146685242184265048449"
+ "406389486589142456399275122623031705959241319130847014622636"
+ "645823353665797337606714079377636941219178980122532025507944"
+ "459270900569885809871610702518898642834740727905326660004452"
+ "107998798987953695756013107010006005067353768387113818238790"
+ "459083753925242598532663195545585725881875618806369749234255"
+ "004527740012548007992790884685089828390575653282976295050988"
+ "699167592521318840991153224206861088947832645151398111502099"
+ "263039571552035003937270274110791173694789370953847120036374"
+ "066930411684565325903810218050483711078964535952030992938126"
+ "627146374050250745688288225578806971071577080233831770451079"
+ "327939857616370951232609530602233034699771768811872663462865"
+ "067598423791655120150068450411848330556029574474625795186054"
+ "539082653162229058836483798003442805597137006557342037027090"
+ "559214142005150246501679352515095014024360613766491035976911"
+ "451279229342670800644034673267957451959484813619478148869699"
+ "426735577550966697718734964429182302662498553172686513178236"
+ "442838009305515598853210612191656717860412811108032276121357"
+ "378133448066756387125735225403303267524644423863799006207505"
+ "881985449471137991554931339017930009178349349682295047976692"
+ "398330506490102685887034086355679994831062253659247250963448"
+ "491064073545964404715491846754314002476460544975667945044647"
+ "304892282461711772387638463741293238063530671434535471056841"
+ "014058743507762050128559983705197885505633530557061512971186"
+ "030938750397081284373471871281592504026318288871453343113735"
+ "525572236896283639085600117688951315352941610550446421752261"
+ "874153423243206777630669111814199801498554161044899315294894"
+ "586598335471728905486124973447798086405950962299377052511061"
+ "631386583082347892746250089584421636436549943844913465914533"
+ "379999403401028225456633159501820584108048772899363279816807"
+ "047692120594176896502188717868181049930125303933597827970762"
+ "729528769725648996117995894684784043190210530661859483107853"
+ "462208964199390089675673427653193145026697275263799724815197"
+ "42277811246822238899767398834228515624e-4951",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x8p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-16448,
+ -0x4p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-16448,
+ -0x4p-16448,
+ -0x3.fffffffffffcp-16448,
+ -0x3.fffffffffffcp-16448),
+ TEST ("-1.822599765941237301264202966809709908199525407846781671860"
+ "490243514185844316698868404780354312913602598623673673601765"
+ "550983492816311016084986754037794904502741911290588965839284"
+ "612631902816779878310781282991705364470159896776763634295620"
+ "399977086405507759269191523027384357711224647652929859134107"
+ "131311033766177730422034039629876869844113169485951406677332"
+ "105978646906000108381336146016138716819515422802764897759427"
+ "649606127660585581743814569231465017756926375080156642289293"
+ "673283429041674526561852596994351991654293919973161250734301"
+ "229733188293435228211817355121198597329430178784033567238991"
+ "382109868146408875647780268422880633923323954258731625461868"
+ "019756361390707976683048199722201701058526744224010988881802"
+ "218954343811624517058454647275266141777302127508235524255495"
+ "077624847410188087536387260798962414632082336414689612417189"
+ "261074423762230826670226570449267469450539999733042497896470"
+ "433541112583949046313166142066816768615182855303336355508050"
+ "848493454272763408046723392787911772643228335232454643531531"
+ "293780965109596419787343039866200370966335396293292123951626"
+ "300857251255826009366852778238834928201530835930494150511044"
+ "504376202119146906060707879263589773640814116355442997229287"
+ "357516926438797713012400395859990977672075958299501751914411"
+ "100177832983979385545468844204615525381872441047228160242136"
+ "358061399074918180830294797604541788443627116266477614874946"
+ "320275381479719120639248096909691038772952730586273980670234"
+ "908845582838047130660362863656303741468826570210809843051529"
+ "764599710715968724783049668698031537609151121922737670838986"
+ "231019063313451704083543258772693191077504478032977705196457"
+ "476311963940423579766592267743333240240281703765714192664650"
+ "261238842108525475632373727317877433107392470771157555519315"
+ "342195712606219652095292061187111486142303268742526232324327"
+ "684859549513380259143780498498605389236533490064713713719758"
+ "516195482395683839110874815487709856719069581339439277999588"
+ "764225441374023269294088723635153369117449251488451426500682"
+ "275202613643546970029162894292728684327495978132931525041736"
+ "043811533010451689459744960487595414710801005191019738886041"
+ "700330759577486347718291152510955454288346024086767479447085"
+ "488381542403918701406924613770471036657700557631167438407981"
+ "043720651128279219456250303615102891006541837056511748806222"
+ "607397585491924343994174101644720628454377782608040907575602"
+ "819446556281207664542228467047573092234645450583055317437795"
+ "082417803470814703744887189896369902337382121741956042345935"
+ "884612723253142155282654595436238643127962691764272518180275"
+ "427113459785623180566612952410150958294158542188856129683947"
+ "423205647411293537917743492822755414940264289391349206278124"
+ "637261117530546227171193101163560203913770166957306596094587"
+ "157942068344009717983136831735215720221516068205887802515300"
+ "718418531986345165208737593665100455983750248380809061307398"
+ "226468562035199351945434457763525745232868372698882470547439"
+ "739824719081288307173474326042654012348179128378292897284246"
+ "659521026941421904090179393555387209037739400593259788708135"
+ "948191584917854112818292327284321851309301216774469081860366"
+ "386269172727256532505770337882755328485250206768602685033962"
+ "440104608681703661836684224002452204206988870853482747123520"
+ "399893225930911094236785628778409716642043743011838124733934"
+ "741815690236928243119773507801659161306391826034349899269700"
+ "203318655841365557670338920830120355215775570185205187792786"
+ "469651542036921770351060275981525257479972870679584955838287"
+ "739201639690056010173674146269075399160226397421213763250898"
+ "426455931554089138319236160118935041431135881698097569756856"
+ "151568097183010770415265728455292024186273012588882570230103"
+ "556461575961588201073376434110983444957690798240626580348411"
+ "130361597129760906527151728611183983964634381536446177639427"
+ "357139121931555391533530062229519657764088420152465761406574"
+ "372912175446065297507599001278602166241607775723548756255038"
+ "111682400601444043817825327317473443616363811953229538335113"
+ "554317081159605178503636684677328593784523197442447541897051"
+ "765917979806997287688948887762730988732373759081487505045731"
+ "780962516371322797322900290800349173908511597189960698673840"
+ "575246343618674510782103231548069351600625138878990205386323"
+ "507195789572212187626259883382335229004257648823812072407226"
+ "748034842563719900314776037846324304340753439522188214488731"
+ "587587602590773979229757579537350642919246847017003831205050"
+ "091766570758342092730379087533240780509450566515975521049526"
+ "648559418724492221615428321368803239393940142649951760927512"
+ "806206735517233312085779604538769249237553405647014530167135"
+ "901660283246967512310859858842402221675933473345262633030379"
+ "166095265903616282750945146877129795473716570192167683486699"
+ "408449626849151059958071445815502674667686079002889972264588"
+ "367943596990204644237310847295151549276191188484721182593011"
+ "565492753911808835025595944507675739829889338066224835821007"
+ "529770219118651961451528039534172317720138386282712972164963"
+ "827453131476237777875456011939712318010731021660815714182837"
+ "925932827450846737171705703110453775045022844794161968407337"
+ "563051732200611864029092524160237625633441437649560291126545"
+ "016588941837216171906367061961021463277454274115736642674786"
+ "105481144944900497013266814660732350276014695758646527598109"
+ "032833625638118745064603049207169451605471244451396126962333"
+ "970541136633781764326931671721743247881200204989497992526041"
+ "155365138538482621423139201284142593682794438326622711523602"
+ "971739306465982105646744687059782875743393602442251153756186"
+ "461986559595562807034378047263446391660844015155450279012841"
+ "727725949243700569657645371738730960512993952666118149699429"
+ "724469371043743658144365355534376381724696183448618129498545"
+ "588498126642153343817727180931089703595826077621825309785860"
+ "116064312065392702465283402514616635687773126656643723142906"
+ "109980782511327255186935290824107395569585435485254537079360"
+ "983816712735775257900749095553608138810346173507117456763692"
+ "906082417237501003549701061495719771391990992463590650334801"
+ "645095247553097892124265649870131353053399169286761988682620"
+ "470646847607094337816357723540686126275511490960625562837565"
+ "919605037066143014810721631063572936011202157129109627803207"
+ "640109222537327017395057537779256687211376808594099192965582"
+ "405091408501397086139901514101043283540633726674670672748194"
+ "619689888247209511150521033993300250522733475002028567363467"
+ "073845839015993349422685149993533692203655168716914058257415"
+ "372687245380085836076489297520175702786263261513025607546854"
+ "950283936784192621287273192504283869131975766338274647178208"
+ "782898885797819248359574788902108145946062770527573586861872"
+ "495878334836229510687555644377062686459197208988121546514107"
+ "351664693015899656974767580671946360204523032504979490489473"
+ "998831272757332097131048832648621306183984383000314587327943"
+ "545412181791826921829490138783015643214814238159286457522911"
+ "947902913005066356488917209306734144416494273688587275398401"
+ "286574342126647086142528388913463688579029323572701778860616"
+ "756001247718669706999421391299855093107861718979077137670254"
+ "905536174520523241903142304436697137859439295209346404644166"
+ "711761390620349487220914939651897120727926388356660677435323"
+ "625547360337786161394223954389389446058117065808804208366140"
+ "493746570665942463930129662196390627893075445929601748606307"
+ "958202499548533889369957428980652942467339381021757760595290"
+ "949128312317978915463905710577496069993499968101815574926186"
+ "401282157448075874663202214386004125214284669164849080925085"
+ "632705713354056861779162529531435753356419230493015573530175"
+ "745753158006266269396677249772833504763786905446024002326226"
+ "226069844394696456469125944170649061117616430569366951576780"
+ "483646052120595473175258384884652515381193454199796277521596"
+ "118034639745612232913342101656040627715925878170617283456986"
+ "294695300779325415218701022797603844998079798772855904101844"
+ "159056459473830831057901459789318201715161520805009031848353"
+ "610624913191857631694425153709234711986743373504616972518110"
+ "450759092883471366918423063408319079172524391364120625639910"
+ "155096611756479555514942001115285844108427141128936609315872"
+ "225475276163714476269074772631389944912199514256566104319316"
+ "535301067761376038330783936236162562837145634440924550708191"
+ "351823725714116423996666078590397007518182680822944073177874"
+ "683075104542728594593616393199792939970840185174070552702371"
+ "149226248947684643596987248070222838650635701794832911455548"
+ "416476010590671785568478803908159171377885280203284960130816"
+ "983201742060839934771342421843454177186844218984341762861833"
+ "060742973973373943786358180400348221408237056796733053044602"
+ "089777338572687291218981332309441509314343755039755626278001"
+ "120894173142009875431996141953256786162959026732040321760766"
+ "077412537410119538995389503534794017014809781095208373679856"
+ "442042162260799339089445093204725740343390866588412460138417"
+ "501238761743046793481866577712245948787747925774763517269168"
+ "847157476528582009607513335386955498721639880002645320755792"
+ "353596613175635835219887570538276316368083058805697467162836"
+ "871941182759159280604470776465814562568399855787289458370511"
+ "793625714499473481591205825277202103208168243709328052666519"
+ "272886980095474801425048104284542615114354447437288761756279"
+ "140986696480631960828081981684694205881738194312976203450759"
+ "136706518534321691775141481118864597950894299696438325543299"
+ "924611997129572629620239692190328901749029359531264503669714"
+ "158114998878449928856058461379341535853736467787249622489209"
+ "894085669234235875562651930455794644700403318601460214744959"
+ "935131707975830444487717413652148725681162526346741000762421"
+ "585614539233955268956569057729313306012485365449757557150957"
+ "640806964619664675750524929612637282053923409056469169580654"
+ "471576602558825858190234231148096941222146685242184265048449"
+ "406389486589142456399275122623031705959241319130847014622636"
+ "645823353665797337606714079377636941219178980122532025507944"
+ "459270900569885809871610702518898642834740727905326660004452"
+ "107998798987953695756013107010006005067353768387113818238790"
+ "459083753925242598532663195545585725881875618806369749234255"
+ "004527740012548007992790884685089828390575653282976295050988"
+ "699167592521318840991153224206861088947832645151398111502099"
+ "263039571552035003937270274110791173694789370953847120036374"
+ "066930411684565325903810218050483711078964535952030992938126"
+ "627146374050250745688288225578806971071577080233831770451079"
+ "327939857616370951232609530602233034699771768811872663462865"
+ "067598423791655120150068450411848330556029574474625795186054"
+ "539082653162229058836483798003442805597137006557342037027090"
+ "559214142005150246501679352515095014024360613766491035976911"
+ "451279229342670800644034673267957451959484813619478148869699"
+ "426735577550966697718734964429182302662498553172686513178236"
+ "442838009305515598853210612191656717860412811108032276121357"
+ "378133448066756387125735225403303267524644423863799006207505"
+ "881985449471137991554931339017930009178349349682295047976692"
+ "398330506490102685887034086355679994831062253659247250963448"
+ "491064073545964404715491846754314002476460544975667945044647"
+ "304892282461711772387638463741293238063530671434535471056841"
+ "014058743507762050128559983705197885505633530557061512971186"
+ "030938750397081284373471871281592504026318288871453343113735"
+ "525572236896283639085600117688951315352941610550446421752261"
+ "874153423243206777630669111814199801498554161044899315294894"
+ "586598335471728905486124973447798086405950962299377052511061"
+ "631386583082347892746250089584421636436549943844913465914533"
+ "379999403401028225456633159501820584108048772899363279816807"
+ "047692120594176896502188717868181049930125303933597827970762"
+ "729528769725648996117995894684784043190210530661859483107853"
+ "462208964199390089675673427653193145026697275263799724815197"
+ "42277811246822238899767398834228515625e-4951",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x8p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ true,
+ -0x4p-16448,
+ -0x4p-16448,
+ -0x4p-16448,
+ -0x4p-16448,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ true,
+ -0x4p-16448,
+ -0x4p-16448,
+ -0x4p-16448,
+ -0x4p-16448),
+ TEST ("-1.822599765941237301264202966809709908199525407846781671860"
+ "490243514185844316698868404780354312913602598623673673601765"
+ "550983492816311016084986754037794904502741911290588965839284"
+ "612631902816779878310781282991705364470159896776763634295620"
+ "399977086405507759269191523027384357711224647652929859134107"
+ "131311033766177730422034039629876869844113169485951406677332"
+ "105978646906000108381336146016138716819515422802764897759427"
+ "649606127660585581743814569231465017756926375080156642289293"
+ "673283429041674526561852596994351991654293919973161250734301"
+ "229733188293435228211817355121198597329430178784033567238991"
+ "382109868146408875647780268422880633923323954258731625461868"
+ "019756361390707976683048199722201701058526744224010988881802"
+ "218954343811624517058454647275266141777302127508235524255495"
+ "077624847410188087536387260798962414632082336414689612417189"
+ "261074423762230826670226570449267469450539999733042497896470"
+ "433541112583949046313166142066816768615182855303336355508050"
+ "848493454272763408046723392787911772643228335232454643531531"
+ "293780965109596419787343039866200370966335396293292123951626"
+ "300857251255826009366852778238834928201530835930494150511044"
+ "504376202119146906060707879263589773640814116355442997229287"
+ "357516926438797713012400395859990977672075958299501751914411"
+ "100177832983979385545468844204615525381872441047228160242136"
+ "358061399074918180830294797604541788443627116266477614874946"
+ "320275381479719120639248096909691038772952730586273980670234"
+ "908845582838047130660362863656303741468826570210809843051529"
+ "764599710715968724783049668698031537609151121922737670838986"
+ "231019063313451704083543258772693191077504478032977705196457"
+ "476311963940423579766592267743333240240281703765714192664650"
+ "261238842108525475632373727317877433107392470771157555519315"
+ "342195712606219652095292061187111486142303268742526232324327"
+ "684859549513380259143780498498605389236533490064713713719758"
+ "516195482395683839110874815487709856719069581339439277999588"
+ "764225441374023269294088723635153369117449251488451426500682"
+ "275202613643546970029162894292728684327495978132931525041736"
+ "043811533010451689459744960487595414710801005191019738886041"
+ "700330759577486347718291152510955454288346024086767479447085"
+ "488381542403918701406924613770471036657700557631167438407981"
+ "043720651128279219456250303615102891006541837056511748806222"
+ "607397585491924343994174101644720628454377782608040907575602"
+ "819446556281207664542228467047573092234645450583055317437795"
+ "082417803470814703744887189896369902337382121741956042345935"
+ "884612723253142155282654595436238643127962691764272518180275"
+ "427113459785623180566612952410150958294158542188856129683947"
+ "423205647411293537917743492822755414940264289391349206278124"
+ "637261117530546227171193101163560203913770166957306596094587"
+ "157942068344009717983136831735215720221516068205887802515300"
+ "718418531986345165208737593665100455983750248380809061307398"
+ "226468562035199351945434457763525745232868372698882470547439"
+ "739824719081288307173474326042654012348179128378292897284246"
+ "659521026941421904090179393555387209037739400593259788708135"
+ "948191584917854112818292327284321851309301216774469081860366"
+ "386269172727256532505770337882755328485250206768602685033962"
+ "440104608681703661836684224002452204206988870853482747123520"
+ "399893225930911094236785628778409716642043743011838124733934"
+ "741815690236928243119773507801659161306391826034349899269700"
+ "203318655841365557670338920830120355215775570185205187792786"
+ "469651542036921770351060275981525257479972870679584955838287"
+ "739201639690056010173674146269075399160226397421213763250898"
+ "426455931554089138319236160118935041431135881698097569756856"
+ "151568097183010770415265728455292024186273012588882570230103"
+ "556461575961588201073376434110983444957690798240626580348411"
+ "130361597129760906527151728611183983964634381536446177639427"
+ "357139121931555391533530062229519657764088420152465761406574"
+ "372912175446065297507599001278602166241607775723548756255038"
+ "111682400601444043817825327317473443616363811953229538335113"
+ "554317081159605178503636684677328593784523197442447541897051"
+ "765917979806997287688948887762730988732373759081487505045731"
+ "780962516371322797322900290800349173908511597189960698673840"
+ "575246343618674510782103231548069351600625138878990205386323"
+ "507195789572212187626259883382335229004257648823812072407226"
+ "748034842563719900314776037846324304340753439522188214488731"
+ "587587602590773979229757579537350642919246847017003831205050"
+ "091766570758342092730379087533240780509450566515975521049526"
+ "648559418724492221615428321368803239393940142649951760927512"
+ "806206735517233312085779604538769249237553405647014530167135"
+ "901660283246967512310859858842402221675933473345262633030379"
+ "166095265903616282750945146877129795473716570192167683486699"
+ "408449626849151059958071445815502674667686079002889972264588"
+ "367943596990204644237310847295151549276191188484721182593011"
+ "565492753911808835025595944507675739829889338066224835821007"
+ "529770219118651961451528039534172317720138386282712972164963"
+ "827453131476237777875456011939712318010731021660815714182837"
+ "925932827450846737171705703110453775045022844794161968407337"
+ "563051732200611864029092524160237625633441437649560291126545"
+ "016588941837216171906367061961021463277454274115736642674786"
+ "105481144944900497013266814660732350276014695758646527598109"
+ "032833625638118745064603049207169451605471244451396126962333"
+ "970541136633781764326931671721743247881200204989497992526041"
+ "155365138538482621423139201284142593682794438326622711523602"
+ "971739306465982105646744687059782875743393602442251153756186"
+ "461986559595562807034378047263446391660844015155450279012841"
+ "727725949243700569657645371738730960512993952666118149699429"
+ "724469371043743658144365355534376381724696183448618129498545"
+ "588498126642153343817727180931089703595826077621825309785860"
+ "116064312065392702465283402514616635687773126656643723142906"
+ "109980782511327255186935290824107395569585435485254537079360"
+ "983816712735775257900749095553608138810346173507117456763692"
+ "906082417237501003549701061495719771391990992463590650334801"
+ "645095247553097892124265649870131353053399169286761988682620"
+ "470646847607094337816357723540686126275511490960625562837565"
+ "919605037066143014810721631063572936011202157129109627803207"
+ "640109222537327017395057537779256687211376808594099192965582"
+ "405091408501397086139901514101043283540633726674670672748194"
+ "619689888247209511150521033993300250522733475002028567363467"
+ "073845839015993349422685149993533692203655168716914058257415"
+ "372687245380085836076489297520175702786263261513025607546854"
+ "950283936784192621287273192504283869131975766338274647178208"
+ "782898885797819248359574788902108145946062770527573586861872"
+ "495878334836229510687555644377062686459197208988121546514107"
+ "351664693015899656974767580671946360204523032504979490489473"
+ "998831272757332097131048832648621306183984383000314587327943"
+ "545412181791826921829490138783015643214814238159286457522911"
+ "947902913005066356488917209306734144416494273688587275398401"
+ "286574342126647086142528388913463688579029323572701778860616"
+ "756001247718669706999421391299855093107861718979077137670254"
+ "905536174520523241903142304436697137859439295209346404644166"
+ "711761390620349487220914939651897120727926388356660677435323"
+ "625547360337786161394223954389389446058117065808804208366140"
+ "493746570665942463930129662196390627893075445929601748606307"
+ "958202499548533889369957428980652942467339381021757760595290"
+ "949128312317978915463905710577496069993499968101815574926186"
+ "401282157448075874663202214386004125214284669164849080925085"
+ "632705713354056861779162529531435753356419230493015573530175"
+ "745753158006266269396677249772833504763786905446024002326226"
+ "226069844394696456469125944170649061117616430569366951576780"
+ "483646052120595473175258384884652515381193454199796277521596"
+ "118034639745612232913342101656040627715925878170617283456986"
+ "294695300779325415218701022797603844998079798772855904101844"
+ "159056459473830831057901459789318201715161520805009031848353"
+ "610624913191857631694425153709234711986743373504616972518110"
+ "450759092883471366918423063408319079172524391364120625639910"
+ "155096611756479555514942001115285844108427141128936609315872"
+ "225475276163714476269074772631389944912199514256566104319316"
+ "535301067761376038330783936236162562837145634440924550708191"
+ "351823725714116423996666078590397007518182680822944073177874"
+ "683075104542728594593616393199792939970840185174070552702371"
+ "149226248947684643596987248070222838650635701794832911455548"
+ "416476010590671785568478803908159171377885280203284960130816"
+ "983201742060839934771342421843454177186844218984341762861833"
+ "060742973973373943786358180400348221408237056796733053044602"
+ "089777338572687291218981332309441509314343755039755626278001"
+ "120894173142009875431996141953256786162959026732040321760766"
+ "077412537410119538995389503534794017014809781095208373679856"
+ "442042162260799339089445093204725740343390866588412460138417"
+ "501238761743046793481866577712245948787747925774763517269168"
+ "847157476528582009607513335386955498721639880002645320755792"
+ "353596613175635835219887570538276316368083058805697467162836"
+ "871941182759159280604470776465814562568399855787289458370511"
+ "793625714499473481591205825277202103208168243709328052666519"
+ "272886980095474801425048104284542615114354447437288761756279"
+ "140986696480631960828081981684694205881738194312976203450759"
+ "136706518534321691775141481118864597950894299696438325543299"
+ "924611997129572629620239692190328901749029359531264503669714"
+ "158114998878449928856058461379341535853736467787249622489209"
+ "894085669234235875562651930455794644700403318601460214744959"
+ "935131707975830444487717413652148725681162526346741000762421"
+ "585614539233955268956569057729313306012485365449757557150957"
+ "640806964619664675750524929612637282053923409056469169580654"
+ "471576602558825858190234231148096941222146685242184265048449"
+ "406389486589142456399275122623031705959241319130847014622636"
+ "645823353665797337606714079377636941219178980122532025507944"
+ "459270900569885809871610702518898642834740727905326660004452"
+ "107998798987953695756013107010006005067353768387113818238790"
+ "459083753925242598532663195545585725881875618806369749234255"
+ "004527740012548007992790884685089828390575653282976295050988"
+ "699167592521318840991153224206861088947832645151398111502099"
+ "263039571552035003937270274110791173694789370953847120036374"
+ "066930411684565325903810218050483711078964535952030992938126"
+ "627146374050250745688288225578806971071577080233831770451079"
+ "327939857616370951232609530602233034699771768811872663462865"
+ "067598423791655120150068450411848330556029574474625795186054"
+ "539082653162229058836483798003442805597137006557342037027090"
+ "559214142005150246501679352515095014024360613766491035976911"
+ "451279229342670800644034673267957451959484813619478148869699"
+ "426735577550966697718734964429182302662498553172686513178236"
+ "442838009305515598853210612191656717860412811108032276121357"
+ "378133448066756387125735225403303267524644423863799006207505"
+ "881985449471137991554931339017930009178349349682295047976692"
+ "398330506490102685887034086355679994831062253659247250963448"
+ "491064073545964404715491846754314002476460544975667945044647"
+ "304892282461711772387638463741293238063530671434535471056841"
+ "014058743507762050128559983705197885505633530557061512971186"
+ "030938750397081284373471871281592504026318288871453343113735"
+ "525572236896283639085600117688951315352941610550446421752261"
+ "874153423243206777630669111814199801498554161044899315294894"
+ "586598335471728905486124973447798086405950962299377052511061"
+ "631386583082347892746250089584421636436549943844913465914533"
+ "379999403401028225456633159501820584108048772899363279816807"
+ "047692120594176896502188717868181049930125303933597827970762"
+ "729528769725648996117995894684784043190210530661859483107853"
+ "462208964199390089675673427653193145026697275263799724815197"
+ "42277811246822238899767398834228515626e-4951",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x8p-16448,
+ -0x8p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x8p-16448,
+ -0x4p-16448,
+ -0x4p-16448,
+ -0x4p-16448,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4.000000000004p-16448,
+ -0x4p-16448,
+ -0x4p-16448,
+ -0x4p-16448),
+ TEST ("9.1129988297061865063210148340485495409976270392339083593024"
+ "512175709292215834943420239017715645680129931183683680088277"
+ "549174640815550804249337701889745225137095564529448291964230"
+ "631595140838993915539064149585268223507994838838181714781019"
+ "998854320275387963459576151369217885561232382646492956705356"
+ "565551688308886521101701981493843492205658474297570333866605"
+ "298932345300005419066807300806935840975771140138244887971382"
+ "480306383029279087190728461573250887846318754007832114464683"
+ "664171452083726328092629849717599582714695998658062536715061"
+ "486659414671761410590867756059929866471508939201678361949569"
+ "105493407320443782389013421144031696166197712936581273093400"
+ "987818069535398834152409986110085052926337211200549444090110"
+ "947717190581225852922732363763307088865106375411776212774753"
+ "881242370509404376819363039948120731604116820734480620859463"
+ "053721188111541333511328522463373472526999986652124894823521"
+ "677055629197452315658307103340838430759142765166817775402542"
+ "424672713638170402336169639395588632161416761622732176576564"
+ "689048255479820989367151993310018548316769814664606197581315"
+ "042862562791300468342638911941746410076541796524707525552225"
+ "218810105957345303035393963179488682040705817772149861464367"
+ "875846321939885650620019792999548883603797914975087595720555"
+ "008891649198969277273442210230776269093622052361408012106817"
+ "903069953745909041514739880227089422181355813323880743747316"
+ "013769073985956031962404845484551938647636529313699033511745"
+ "442279141902356533018143182815187073441328510540492152576488"
+ "229985535798436239152483434901576880457556096136883541949311"
+ "550953165672585204177162938634659553875223901648885259822873"
+ "815598197021178988329613387166662012014085188285709633232513"
+ "061942105426273781618686365893871655369623538557877775965767"
+ "109785630310982604764603059355574307115163437126311616216384"
+ "242977475669012957189024924930269461826674503235685685987925"
+ "809774119784191955543740774385492835953479066971963899979438"
+ "211272068701163464704436181757668455872462574422571325034113"
+ "760130682177348501458144714636434216374798906646576252086802"
+ "190576650522584472987248024379770735540050259550986944302085"
+ "016537978874317385914557625547772714417301204338373972354274"
+ "419077120195935070346230688523551832885027881558371920399052"
+ "186032556413960972812515180755144550327091852825587440311130"
+ "369879274596217199708705082236031422718889130402045378780140"
+ "972327814060383227111423352378654611732272529152765871889754"
+ "120890173540735187244359494818495116869106087097802117296794"
+ "230636162657107764132729771811932156398134588213625909013771"
+ "355672989281159028330647620507547914707927109442806484197371"
+ "160282370564676895887174641137770747013214469567460313906231"
+ "863055876527311358559655058178010195688508347865329804729357"
+ "897103417200485899156841586760786011075803410294390125765035"
+ "920926599317258260436879683255022799187512419040453065369911"
+ "323428101759967597271722888176287261643418634944123527371986"
+ "991235954064415358673716302132700617408956418914644864212332"
+ "976051347071095204508969677769360451886970029662989435406797"
+ "409579245892705640914616364216092565465060838723454093018319"
+ "313458636362826625288516894137766424262510338430134251698122"
+ "005230434085183091834211200122610210349443542674137356176019"
+ "994661296545554711839281438920485832102187150591906236696737"
+ "090784511846412155988675390082958065319591301717494963485010"
+ "165932792068277883516946041506017760788778509260259389639323"
+ "482577101846088517553013799076262873998643533979247791914386"
+ "960081984502800508683707313453769958011319871060688162544921"
+ "322796577704456915961808005946752071556794084904878487842807"
+ "578404859150538520763286422764601209313650629444128511505177"
+ "823078798079410053668821705549172247884539912031329017420556"
+ "518079856488045326357586430559199198231719076822308881971367"
+ "856956096577769576676503111475982888204421007623288070328718"
+ "645608772303264875379950063930108312080388786177437812751905"
+ "584120030072202190891266365873672180818190597661476916755677"
+ "715854057980258925181834233866429689226159872122377094852588"
+ "295898990349864384447444388136549436618687954074375252286589"
+ "048125818566139866145014540017458695425579859498034933692028"
+ "762317180933725539105161577403467580031256943949510269316175"
+ "359789478610609381312994169116761450212882441190603620361337"
+ "401742128185995015738801892316215217037671976109410724436579"
+ "379380129538698961487878976867532145962342350850191560252504"
+ "588328537917104636518954376662039025472528325798776052476332"
+ "427970936224611080771416068440161969697007132497588046375640"
+ "310336775861665604288980226938462461877670282350726508356795"
+ "083014162348375615542992942120111083796673667263131651518958"
+ "304763295180814137547257343856489773685828509608384174334970"
+ "422481342457552997903572290775133733384303950144498613229418"
+ "397179849510232211865542364757577463809559424236059129650578"
+ "274637695590441751279797225383786991494466903311241791050376"
+ "488510955932598072576401976708615886006919314135648608248191"
+ "372656573811888893772800596985615900536551083040785709141896"
+ "296641372542336858585285155522688752251142239708098420366878"
+ "152586610030593201454626208011881281672071882478014556327250"
+ "829447091860808595318353098051073163872713705786832133739305"
+ "274057247245024850663340733036617513800734787932326379905451"
+ "641681281905937253230152460358472580273562222569806348116698"
+ "527056831689088216346583586087162394060010249474899626302057"
+ "768256926924131071156960064207129684139721916331135576180148"
+ "586965323299105282337234352989143787169680122112557687809323"
+ "099327979778140351718902363172319583042200757772513950642086"
+ "386297462185028482882268586936548025649697633305907484971486"
+ "223468552187182907218267776718819086234809172430906474927279"
+ "424906332107667190886359046554485179791303881091265489293005"
+ "803215603269635123264170125730831784388656332832186157145305"
+ "499039125566362759346764541205369778479271774262726853968049"
+ "190835636788762895037454777680406940517308675355872838184645"
+ "304120861875050177485053074785988569599549623179532516740082"
+ "254762377654894606213282493506567652669958464338099434131023"
+ "532342380354716890817886177034306313775574548031278141878295"
+ "980251853307150740536081553178646800560107856455481390160382"
+ "005461126866350869752876888962834360568840429704959648279120"
+ "254570425069854306995075705052164177031686333733533637409730"
+ "984494412360475557526051699665012526136673750101428368173353"
+ "692291950799667471134257499676684610182758435845702912870768"
+ "634362269004291803824464876008785139313163075651280377342747"
+ "514196839209631064363659625214193456598788316913732358910439"
+ "144944289890962417978739445105407297303138526378679343093624"
+ "793916741811475534377782218853134322959860449406077325705367"
+ "583234650794982848738379033597318010226151625248974524473699"
+ "941563637866604856552441632431065309199219150015729366397177"
+ "270609089591346091474506939150782160740711907964322876145597"
+ "395145650253317824445860465336707220824713684429363769920064"
+ "328717106332354307126419445673184428951466178635088943030837"
+ "800062385933485349971069564992754655393085948953856883512745"
+ "276808726026162095157115221834856892971964760467320232208335"
+ "588069531017474361045746982594856036396319417833033871766181"
+ "277368016889308069711197719469472302905853290440210418307024"
+ "687328533297123196506483109819531394653772296480087430315397"
+ "910124977426694468497871449032647123366969051087888029764547"
+ "456415615898945773195285528874803499674998405090778746309320"
+ "064107872403793733160110719300206260714233458242454046254281"
+ "635285667702843088958126476571787667820961524650778676508787"
+ "287657900313313469833862488641675238189345272301200116311311"
+ "303492219734822823456297208532453055880821528468347578839024"
+ "182302606029773658762919244232625769059672709989813876079805"
+ "901731987280611645667105082802031385796293908530864172849314"
+ "734765038966270760935051139880192249903989938642795205092207"
+ "952822973691541552895072989465910085758076040250451592417680"
+ "531245659592881584721257685461735599337168675230848625905522"
+ "537954644173568345921153170415953958626219568206031281995507"
+ "754830587823977775747100055764292205421357056446830465793611"
+ "273763808185723813453738631569497245609975712828305215965826"
+ "765053388068801916539196811808128141857281722046227535409567"
+ "591186285705821199833303929519850375909134041147203658893734"
+ "153755227136429729680819659989646998542009258703527635118557"
+ "461312447384232179849362403511141932531785089741645572777420"
+ "823800529533589278423940195407958568894264010164248006540849"
+ "160087103041996738567121092172708859342210949217088143091653"
+ "037148698668697189317909020017411070411852839836652652230104"
+ "488866928634364560949066615472075465717187751987781313900056"
+ "044708657100493771599807097662839308147951336602016088038303"
+ "870626870505976949769475176739700850740489054760418683992822"
+ "102108113039966954472254660236287017169543329420623006920875"
+ "061938087152339674093328885612297439387396288738175863458442"
+ "357873826429100480375666769347774936081994000132266037789617"
+ "679830658781791760994378526913815818404152940284873358141843"
+ "597059137957964030223538823290728128419992789364472918525589"
+ "681285724973674079560291263860105160408412185466402633325963"
+ "644349004773740071252405214227130755717722371864438087813957"
+ "049334824031598041404099084234710294086909715648810172537956"
+ "835325926716084588757074055943229897544714984821916277164996"
+ "230599856478631481011984609516445087451467976563225183485707"
+ "905749943922496442802923068967076792686823389362481124460494"
+ "704283461711793778132596522789732235020165930073010737247996"
+ "756585398791522224385870682607436284058126317337050038121079"
+ "280726961697763447828452886465665300624268272487877857547882"
+ "040348230983233787526246480631864102696170452823458479032723"
+ "578830127941292909511711557404847061107334262109213252422470"
+ "319474329457122819963756131151585297962065956542350731131832"
+ "291167683289866880335703968881847060958949006126601275397222"
+ "963545028494290493580535125944932141737036395266333000222605"
+ "399939949397684787800655350500300253367688419355690911939522"
+ "954187696262129926633159777279286294093780940318487461712750"
+ "226387000627400399639544234254491419528782664148814752549434"
+ "958379626065942049557661210343054447391632257569905575104963"
+ "151978577601750196863513705539558684739468547692356001818703"
+ "346520584228266295190510902524185553948226797601549646906331"
+ "357318702512537284414411278940348553578854011691588522553966"
+ "396992880818547561630476530111651734988588440593633173143253"
+ "379921189582756007503422520592416527801478723731289759302726"
+ "954132658111452941824189900172140279856850327867101851354527"
+ "960707100257512325083967625754750701218030688324551798845572"
+ "563961467133540032201733663397872597974240680973907443484971"
+ "336778877548334885936748221459115133124927658634325658911822"
+ "141900465275779942660530609582835893020640555401613806067868"
+ "906672403337819356286761270165163376232221193189950310375294"
+ "099272473556899577746566950896500458917467484114752398834619"
+ "916525324505134294351704317783999741553112682962362548172424"
+ "553203677298220235774592337715700123823027248783397252232365"
+ "244614123085588619381923187064661903176533571726773552842050"
+ "702937175388102506427999185259894275281676527853075648559301"
+ "546937519854064218673593564079625201315914443572667155686776"
+ "278611844814181954280005884447565767647080527522321087613093"
+ "707671162160338881533455590709990074927708052244965764744729"
+ "329916773586445274306248672389904320297548114968852625553081"
+ "569329154117394637312504479221081821827497192245673295726668"
+ "999970170051411272831657975091029205402438644968163990840352"
+ "384606029708844825109435893409052496506265196679891398538136"
+ "476438486282449805899794734239202159510526533092974155392673"
+ "110448209969504483783671382659657251334863763189986240759871"
+ "1389056234111194498836994171142578124e-4952",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x1.fffffffffffcp-16448,
+ 0x2p-16448,
+ 0x1.fffffffffffcp-16448,
+ 0x2p-16448),
+ TEST ("9.1129988297061865063210148340485495409976270392339083593024"
+ "512175709292215834943420239017715645680129931183683680088277"
+ "549174640815550804249337701889745225137095564529448291964230"
+ "631595140838993915539064149585268223507994838838181714781019"
+ "998854320275387963459576151369217885561232382646492956705356"
+ "565551688308886521101701981493843492205658474297570333866605"
+ "298932345300005419066807300806935840975771140138244887971382"
+ "480306383029279087190728461573250887846318754007832114464683"
+ "664171452083726328092629849717599582714695998658062536715061"
+ "486659414671761410590867756059929866471508939201678361949569"
+ "105493407320443782389013421144031696166197712936581273093400"
+ "987818069535398834152409986110085052926337211200549444090110"
+ "947717190581225852922732363763307088865106375411776212774753"
+ "881242370509404376819363039948120731604116820734480620859463"
+ "053721188111541333511328522463373472526999986652124894823521"
+ "677055629197452315658307103340838430759142765166817775402542"
+ "424672713638170402336169639395588632161416761622732176576564"
+ "689048255479820989367151993310018548316769814664606197581315"
+ "042862562791300468342638911941746410076541796524707525552225"
+ "218810105957345303035393963179488682040705817772149861464367"
+ "875846321939885650620019792999548883603797914975087595720555"
+ "008891649198969277273442210230776269093622052361408012106817"
+ "903069953745909041514739880227089422181355813323880743747316"
+ "013769073985956031962404845484551938647636529313699033511745"
+ "442279141902356533018143182815187073441328510540492152576488"
+ "229985535798436239152483434901576880457556096136883541949311"
+ "550953165672585204177162938634659553875223901648885259822873"
+ "815598197021178988329613387166662012014085188285709633232513"
+ "061942105426273781618686365893871655369623538557877775965767"
+ "109785630310982604764603059355574307115163437126311616216384"
+ "242977475669012957189024924930269461826674503235685685987925"
+ "809774119784191955543740774385492835953479066971963899979438"
+ "211272068701163464704436181757668455872462574422571325034113"
+ "760130682177348501458144714636434216374798906646576252086802"
+ "190576650522584472987248024379770735540050259550986944302085"
+ "016537978874317385914557625547772714417301204338373972354274"
+ "419077120195935070346230688523551832885027881558371920399052"
+ "186032556413960972812515180755144550327091852825587440311130"
+ "369879274596217199708705082236031422718889130402045378780140"
+ "972327814060383227111423352378654611732272529152765871889754"
+ "120890173540735187244359494818495116869106087097802117296794"
+ "230636162657107764132729771811932156398134588213625909013771"
+ "355672989281159028330647620507547914707927109442806484197371"
+ "160282370564676895887174641137770747013214469567460313906231"
+ "863055876527311358559655058178010195688508347865329804729357"
+ "897103417200485899156841586760786011075803410294390125765035"
+ "920926599317258260436879683255022799187512419040453065369911"
+ "323428101759967597271722888176287261643418634944123527371986"
+ "991235954064415358673716302132700617408956418914644864212332"
+ "976051347071095204508969677769360451886970029662989435406797"
+ "409579245892705640914616364216092565465060838723454093018319"
+ "313458636362826625288516894137766424262510338430134251698122"
+ "005230434085183091834211200122610210349443542674137356176019"
+ "994661296545554711839281438920485832102187150591906236696737"
+ "090784511846412155988675390082958065319591301717494963485010"
+ "165932792068277883516946041506017760788778509260259389639323"
+ "482577101846088517553013799076262873998643533979247791914386"
+ "960081984502800508683707313453769958011319871060688162544921"
+ "322796577704456915961808005946752071556794084904878487842807"
+ "578404859150538520763286422764601209313650629444128511505177"
+ "823078798079410053668821705549172247884539912031329017420556"
+ "518079856488045326357586430559199198231719076822308881971367"
+ "856956096577769576676503111475982888204421007623288070328718"
+ "645608772303264875379950063930108312080388786177437812751905"
+ "584120030072202190891266365873672180818190597661476916755677"
+ "715854057980258925181834233866429689226159872122377094852588"
+ "295898990349864384447444388136549436618687954074375252286589"
+ "048125818566139866145014540017458695425579859498034933692028"
+ "762317180933725539105161577403467580031256943949510269316175"
+ "359789478610609381312994169116761450212882441190603620361337"
+ "401742128185995015738801892316215217037671976109410724436579"
+ "379380129538698961487878976867532145962342350850191560252504"
+ "588328537917104636518954376662039025472528325798776052476332"
+ "427970936224611080771416068440161969697007132497588046375640"
+ "310336775861665604288980226938462461877670282350726508356795"
+ "083014162348375615542992942120111083796673667263131651518958"
+ "304763295180814137547257343856489773685828509608384174334970"
+ "422481342457552997903572290775133733384303950144498613229418"
+ "397179849510232211865542364757577463809559424236059129650578"
+ "274637695590441751279797225383786991494466903311241791050376"
+ "488510955932598072576401976708615886006919314135648608248191"
+ "372656573811888893772800596985615900536551083040785709141896"
+ "296641372542336858585285155522688752251142239708098420366878"
+ "152586610030593201454626208011881281672071882478014556327250"
+ "829447091860808595318353098051073163872713705786832133739305"
+ "274057247245024850663340733036617513800734787932326379905451"
+ "641681281905937253230152460358472580273562222569806348116698"
+ "527056831689088216346583586087162394060010249474899626302057"
+ "768256926924131071156960064207129684139721916331135576180148"
+ "586965323299105282337234352989143787169680122112557687809323"
+ "099327979778140351718902363172319583042200757772513950642086"
+ "386297462185028482882268586936548025649697633305907484971486"
+ "223468552187182907218267776718819086234809172430906474927279"
+ "424906332107667190886359046554485179791303881091265489293005"
+ "803215603269635123264170125730831784388656332832186157145305"
+ "499039125566362759346764541205369778479271774262726853968049"
+ "190835636788762895037454777680406940517308675355872838184645"
+ "304120861875050177485053074785988569599549623179532516740082"
+ "254762377654894606213282493506567652669958464338099434131023"
+ "532342380354716890817886177034306313775574548031278141878295"
+ "980251853307150740536081553178646800560107856455481390160382"
+ "005461126866350869752876888962834360568840429704959648279120"
+ "254570425069854306995075705052164177031686333733533637409730"
+ "984494412360475557526051699665012526136673750101428368173353"
+ "692291950799667471134257499676684610182758435845702912870768"
+ "634362269004291803824464876008785139313163075651280377342747"
+ "514196839209631064363659625214193456598788316913732358910439"
+ "144944289890962417978739445105407297303138526378679343093624"
+ "793916741811475534377782218853134322959860449406077325705367"
+ "583234650794982848738379033597318010226151625248974524473699"
+ "941563637866604856552441632431065309199219150015729366397177"
+ "270609089591346091474506939150782160740711907964322876145597"
+ "395145650253317824445860465336707220824713684429363769920064"
+ "328717106332354307126419445673184428951466178635088943030837"
+ "800062385933485349971069564992754655393085948953856883512745"
+ "276808726026162095157115221834856892971964760467320232208335"
+ "588069531017474361045746982594856036396319417833033871766181"
+ "277368016889308069711197719469472302905853290440210418307024"
+ "687328533297123196506483109819531394653772296480087430315397"
+ "910124977426694468497871449032647123366969051087888029764547"
+ "456415615898945773195285528874803499674998405090778746309320"
+ "064107872403793733160110719300206260714233458242454046254281"
+ "635285667702843088958126476571787667820961524650778676508787"
+ "287657900313313469833862488641675238189345272301200116311311"
+ "303492219734822823456297208532453055880821528468347578839024"
+ "182302606029773658762919244232625769059672709989813876079805"
+ "901731987280611645667105082802031385796293908530864172849314"
+ "734765038966270760935051139880192249903989938642795205092207"
+ "952822973691541552895072989465910085758076040250451592417680"
+ "531245659592881584721257685461735599337168675230848625905522"
+ "537954644173568345921153170415953958626219568206031281995507"
+ "754830587823977775747100055764292205421357056446830465793611"
+ "273763808185723813453738631569497245609975712828305215965826"
+ "765053388068801916539196811808128141857281722046227535409567"
+ "591186285705821199833303929519850375909134041147203658893734"
+ "153755227136429729680819659989646998542009258703527635118557"
+ "461312447384232179849362403511141932531785089741645572777420"
+ "823800529533589278423940195407958568894264010164248006540849"
+ "160087103041996738567121092172708859342210949217088143091653"
+ "037148698668697189317909020017411070411852839836652652230104"
+ "488866928634364560949066615472075465717187751987781313900056"
+ "044708657100493771599807097662839308147951336602016088038303"
+ "870626870505976949769475176739700850740489054760418683992822"
+ "102108113039966954472254660236287017169543329420623006920875"
+ "061938087152339674093328885612297439387396288738175863458442"
+ "357873826429100480375666769347774936081994000132266037789617"
+ "679830658781791760994378526913815818404152940284873358141843"
+ "597059137957964030223538823290728128419992789364472918525589"
+ "681285724973674079560291263860105160408412185466402633325963"
+ "644349004773740071252405214227130755717722371864438087813957"
+ "049334824031598041404099084234710294086909715648810172537956"
+ "835325926716084588757074055943229897544714984821916277164996"
+ "230599856478631481011984609516445087451467976563225183485707"
+ "905749943922496442802923068967076792686823389362481124460494"
+ "704283461711793778132596522789732235020165930073010737247996"
+ "756585398791522224385870682607436284058126317337050038121079"
+ "280726961697763447828452886465665300624268272487877857547882"
+ "040348230983233787526246480631864102696170452823458479032723"
+ "578830127941292909511711557404847061107334262109213252422470"
+ "319474329457122819963756131151585297962065956542350731131832"
+ "291167683289866880335703968881847060958949006126601275397222"
+ "963545028494290493580535125944932141737036395266333000222605"
+ "399939949397684787800655350500300253367688419355690911939522"
+ "954187696262129926633159777279286294093780940318487461712750"
+ "226387000627400399639544234254491419528782664148814752549434"
+ "958379626065942049557661210343054447391632257569905575104963"
+ "151978577601750196863513705539558684739468547692356001818703"
+ "346520584228266295190510902524185553948226797601549646906331"
+ "357318702512537284414411278940348553578854011691588522553966"
+ "396992880818547561630476530111651734988588440593633173143253"
+ "379921189582756007503422520592416527801478723731289759302726"
+ "954132658111452941824189900172140279856850327867101851354527"
+ "960707100257512325083967625754750701218030688324551798845572"
+ "563961467133540032201733663397872597974240680973907443484971"
+ "336778877548334885936748221459115133124927658634325658911822"
+ "141900465275779942660530609582835893020640555401613806067868"
+ "906672403337819356286761270165163376232221193189950310375294"
+ "099272473556899577746566950896500458917467484114752398834619"
+ "916525324505134294351704317783999741553112682962362548172424"
+ "553203677298220235774592337715700123823027248783397252232365"
+ "244614123085588619381923187064661903176533571726773552842050"
+ "702937175388102506427999185259894275281676527853075648559301"
+ "546937519854064218673593564079625201315914443572667155686776"
+ "278611844814181954280005884447565767647080527522321087613093"
+ "707671162160338881533455590709990074927708052244965764744729"
+ "329916773586445274306248672389904320297548114968852625553081"
+ "569329154117394637312504479221081821827497192245673295726668"
+ "999970170051411272831657975091029205402438644968163990840352"
+ "384606029708844825109435893409052496506265196679891398538136"
+ "476438486282449805899794734239202159510526533092974155392673"
+ "110448209969504483783671382659657251334863763189986240759871"
+ "1389056234111194498836994171142578125e-4952",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ true,
+ 0x2p-16448,
+ 0x2p-16448,
+ 0x2p-16448,
+ 0x2p-16448),
+ TEST ("9.1129988297061865063210148340485495409976270392339083593024"
+ "512175709292215834943420239017715645680129931183683680088277"
+ "549174640815550804249337701889745225137095564529448291964230"
+ "631595140838993915539064149585268223507994838838181714781019"
+ "998854320275387963459576151369217885561232382646492956705356"
+ "565551688308886521101701981493843492205658474297570333866605"
+ "298932345300005419066807300806935840975771140138244887971382"
+ "480306383029279087190728461573250887846318754007832114464683"
+ "664171452083726328092629849717599582714695998658062536715061"
+ "486659414671761410590867756059929866471508939201678361949569"
+ "105493407320443782389013421144031696166197712936581273093400"
+ "987818069535398834152409986110085052926337211200549444090110"
+ "947717190581225852922732363763307088865106375411776212774753"
+ "881242370509404376819363039948120731604116820734480620859463"
+ "053721188111541333511328522463373472526999986652124894823521"
+ "677055629197452315658307103340838430759142765166817775402542"
+ "424672713638170402336169639395588632161416761622732176576564"
+ "689048255479820989367151993310018548316769814664606197581315"
+ "042862562791300468342638911941746410076541796524707525552225"
+ "218810105957345303035393963179488682040705817772149861464367"
+ "875846321939885650620019792999548883603797914975087595720555"
+ "008891649198969277273442210230776269093622052361408012106817"
+ "903069953745909041514739880227089422181355813323880743747316"
+ "013769073985956031962404845484551938647636529313699033511745"
+ "442279141902356533018143182815187073441328510540492152576488"
+ "229985535798436239152483434901576880457556096136883541949311"
+ "550953165672585204177162938634659553875223901648885259822873"
+ "815598197021178988329613387166662012014085188285709633232513"
+ "061942105426273781618686365893871655369623538557877775965767"
+ "109785630310982604764603059355574307115163437126311616216384"
+ "242977475669012957189024924930269461826674503235685685987925"
+ "809774119784191955543740774385492835953479066971963899979438"
+ "211272068701163464704436181757668455872462574422571325034113"
+ "760130682177348501458144714636434216374798906646576252086802"
+ "190576650522584472987248024379770735540050259550986944302085"
+ "016537978874317385914557625547772714417301204338373972354274"
+ "419077120195935070346230688523551832885027881558371920399052"
+ "186032556413960972812515180755144550327091852825587440311130"
+ "369879274596217199708705082236031422718889130402045378780140"
+ "972327814060383227111423352378654611732272529152765871889754"
+ "120890173540735187244359494818495116869106087097802117296794"
+ "230636162657107764132729771811932156398134588213625909013771"
+ "355672989281159028330647620507547914707927109442806484197371"
+ "160282370564676895887174641137770747013214469567460313906231"
+ "863055876527311358559655058178010195688508347865329804729357"
+ "897103417200485899156841586760786011075803410294390125765035"
+ "920926599317258260436879683255022799187512419040453065369911"
+ "323428101759967597271722888176287261643418634944123527371986"
+ "991235954064415358673716302132700617408956418914644864212332"
+ "976051347071095204508969677769360451886970029662989435406797"
+ "409579245892705640914616364216092565465060838723454093018319"
+ "313458636362826625288516894137766424262510338430134251698122"
+ "005230434085183091834211200122610210349443542674137356176019"
+ "994661296545554711839281438920485832102187150591906236696737"
+ "090784511846412155988675390082958065319591301717494963485010"
+ "165932792068277883516946041506017760788778509260259389639323"
+ "482577101846088517553013799076262873998643533979247791914386"
+ "960081984502800508683707313453769958011319871060688162544921"
+ "322796577704456915961808005946752071556794084904878487842807"
+ "578404859150538520763286422764601209313650629444128511505177"
+ "823078798079410053668821705549172247884539912031329017420556"
+ "518079856488045326357586430559199198231719076822308881971367"
+ "856956096577769576676503111475982888204421007623288070328718"
+ "645608772303264875379950063930108312080388786177437812751905"
+ "584120030072202190891266365873672180818190597661476916755677"
+ "715854057980258925181834233866429689226159872122377094852588"
+ "295898990349864384447444388136549436618687954074375252286589"
+ "048125818566139866145014540017458695425579859498034933692028"
+ "762317180933725539105161577403467580031256943949510269316175"
+ "359789478610609381312994169116761450212882441190603620361337"
+ "401742128185995015738801892316215217037671976109410724436579"
+ "379380129538698961487878976867532145962342350850191560252504"
+ "588328537917104636518954376662039025472528325798776052476332"
+ "427970936224611080771416068440161969697007132497588046375640"
+ "310336775861665604288980226938462461877670282350726508356795"
+ "083014162348375615542992942120111083796673667263131651518958"
+ "304763295180814137547257343856489773685828509608384174334970"
+ "422481342457552997903572290775133733384303950144498613229418"
+ "397179849510232211865542364757577463809559424236059129650578"
+ "274637695590441751279797225383786991494466903311241791050376"
+ "488510955932598072576401976708615886006919314135648608248191"
+ "372656573811888893772800596985615900536551083040785709141896"
+ "296641372542336858585285155522688752251142239708098420366878"
+ "152586610030593201454626208011881281672071882478014556327250"
+ "829447091860808595318353098051073163872713705786832133739305"
+ "274057247245024850663340733036617513800734787932326379905451"
+ "641681281905937253230152460358472580273562222569806348116698"
+ "527056831689088216346583586087162394060010249474899626302057"
+ "768256926924131071156960064207129684139721916331135576180148"
+ "586965323299105282337234352989143787169680122112557687809323"
+ "099327979778140351718902363172319583042200757772513950642086"
+ "386297462185028482882268586936548025649697633305907484971486"
+ "223468552187182907218267776718819086234809172430906474927279"
+ "424906332107667190886359046554485179791303881091265489293005"
+ "803215603269635123264170125730831784388656332832186157145305"
+ "499039125566362759346764541205369778479271774262726853968049"
+ "190835636788762895037454777680406940517308675355872838184645"
+ "304120861875050177485053074785988569599549623179532516740082"
+ "254762377654894606213282493506567652669958464338099434131023"
+ "532342380354716890817886177034306313775574548031278141878295"
+ "980251853307150740536081553178646800560107856455481390160382"
+ "005461126866350869752876888962834360568840429704959648279120"
+ "254570425069854306995075705052164177031686333733533637409730"
+ "984494412360475557526051699665012526136673750101428368173353"
+ "692291950799667471134257499676684610182758435845702912870768"
+ "634362269004291803824464876008785139313163075651280377342747"
+ "514196839209631064363659625214193456598788316913732358910439"
+ "144944289890962417978739445105407297303138526378679343093624"
+ "793916741811475534377782218853134322959860449406077325705367"
+ "583234650794982848738379033597318010226151625248974524473699"
+ "941563637866604856552441632431065309199219150015729366397177"
+ "270609089591346091474506939150782160740711907964322876145597"
+ "395145650253317824445860465336707220824713684429363769920064"
+ "328717106332354307126419445673184428951466178635088943030837"
+ "800062385933485349971069564992754655393085948953856883512745"
+ "276808726026162095157115221834856892971964760467320232208335"
+ "588069531017474361045746982594856036396319417833033871766181"
+ "277368016889308069711197719469472302905853290440210418307024"
+ "687328533297123196506483109819531394653772296480087430315397"
+ "910124977426694468497871449032647123366969051087888029764547"
+ "456415615898945773195285528874803499674998405090778746309320"
+ "064107872403793733160110719300206260714233458242454046254281"
+ "635285667702843088958126476571787667820961524650778676508787"
+ "287657900313313469833862488641675238189345272301200116311311"
+ "303492219734822823456297208532453055880821528468347578839024"
+ "182302606029773658762919244232625769059672709989813876079805"
+ "901731987280611645667105082802031385796293908530864172849314"
+ "734765038966270760935051139880192249903989938642795205092207"
+ "952822973691541552895072989465910085758076040250451592417680"
+ "531245659592881584721257685461735599337168675230848625905522"
+ "537954644173568345921153170415953958626219568206031281995507"
+ "754830587823977775747100055764292205421357056446830465793611"
+ "273763808185723813453738631569497245609975712828305215965826"
+ "765053388068801916539196811808128141857281722046227535409567"
+ "591186285705821199833303929519850375909134041147203658893734"
+ "153755227136429729680819659989646998542009258703527635118557"
+ "461312447384232179849362403511141932531785089741645572777420"
+ "823800529533589278423940195407958568894264010164248006540849"
+ "160087103041996738567121092172708859342210949217088143091653"
+ "037148698668697189317909020017411070411852839836652652230104"
+ "488866928634364560949066615472075465717187751987781313900056"
+ "044708657100493771599807097662839308147951336602016088038303"
+ "870626870505976949769475176739700850740489054760418683992822"
+ "102108113039966954472254660236287017169543329420623006920875"
+ "061938087152339674093328885612297439387396288738175863458442"
+ "357873826429100480375666769347774936081994000132266037789617"
+ "679830658781791760994378526913815818404152940284873358141843"
+ "597059137957964030223538823290728128419992789364472918525589"
+ "681285724973674079560291263860105160408412185466402633325963"
+ "644349004773740071252405214227130755717722371864438087813957"
+ "049334824031598041404099084234710294086909715648810172537956"
+ "835325926716084588757074055943229897544714984821916277164996"
+ "230599856478631481011984609516445087451467976563225183485707"
+ "905749943922496442802923068967076792686823389362481124460494"
+ "704283461711793778132596522789732235020165930073010737247996"
+ "756585398791522224385870682607436284058126317337050038121079"
+ "280726961697763447828452886465665300624268272487877857547882"
+ "040348230983233787526246480631864102696170452823458479032723"
+ "578830127941292909511711557404847061107334262109213252422470"
+ "319474329457122819963756131151585297962065956542350731131832"
+ "291167683289866880335703968881847060958949006126601275397222"
+ "963545028494290493580535125944932141737036395266333000222605"
+ "399939949397684787800655350500300253367688419355690911939522"
+ "954187696262129926633159777279286294093780940318487461712750"
+ "226387000627400399639544234254491419528782664148814752549434"
+ "958379626065942049557661210343054447391632257569905575104963"
+ "151978577601750196863513705539558684739468547692356001818703"
+ "346520584228266295190510902524185553948226797601549646906331"
+ "357318702512537284414411278940348553578854011691588522553966"
+ "396992880818547561630476530111651734988588440593633173143253"
+ "379921189582756007503422520592416527801478723731289759302726"
+ "954132658111452941824189900172140279856850327867101851354527"
+ "960707100257512325083967625754750701218030688324551798845572"
+ "563961467133540032201733663397872597974240680973907443484971"
+ "336778877548334885936748221459115133124927658634325658911822"
+ "141900465275779942660530609582835893020640555401613806067868"
+ "906672403337819356286761270165163376232221193189950310375294"
+ "099272473556899577746566950896500458917467484114752398834619"
+ "916525324505134294351704317783999741553112682962362548172424"
+ "553203677298220235774592337715700123823027248783397252232365"
+ "244614123085588619381923187064661903176533571726773552842050"
+ "702937175388102506427999185259894275281676527853075648559301"
+ "546937519854064218673593564079625201315914443572667155686776"
+ "278611844814181954280005884447565767647080527522321087613093"
+ "707671162160338881533455590709990074927708052244965764744729"
+ "329916773586445274306248672389904320297548114968852625553081"
+ "569329154117394637312504479221081821827497192245673295726668"
+ "999970170051411272831657975091029205402438644968163990840352"
+ "384606029708844825109435893409052496506265196679891398538136"
+ "476438486282449805899794734239202159510526533092974155392673"
+ "110448209969504483783671382659657251334863763189986240759871"
+ "1389056234111194498836994171142578126e-4952",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-16448,
+ false,
+ 0x0p+0,
+ 0x4p-16448,
+ 0x0p+0,
+ 0x4p-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x2p-16448,
+ 0x2p-16448,
+ 0x2p-16448,
+ 0x2.000000000004p-16448),
+ TEST ("-9.112998829706186506321014834048549540997627039233908359302"
+ "451217570929221583494342023901771564568012993118368368008827"
+ "754917464081555080424933770188974522513709556452944829196423"
+ "063159514083899391553906414958526822350799483883818171478101"
+ "999885432027538796345957615136921788556123238264649295670535"
+ "656555168830888652110170198149384349220565847429757033386660"
+ "529893234530000541906680730080693584097577114013824488797138"
+ "248030638302927908719072846157325088784631875400783211446468"
+ "366417145208372632809262984971759958271469599865806253671506"
+ "148665941467176141059086775605992986647150893920167836194956"
+ "910549340732044378238901342114403169616619771293658127309340"
+ "098781806953539883415240998611008505292633721120054944409011"
+ "094771719058122585292273236376330708886510637541177621277475"
+ "388124237050940437681936303994812073160411682073448062085946"
+ "305372118811154133351132852246337347252699998665212489482352"
+ "167705562919745231565830710334083843075914276516681777540254"
+ "242467271363817040233616963939558863216141676162273217657656"
+ "468904825547982098936715199331001854831676981466460619758131"
+ "504286256279130046834263891194174641007654179652470752555222"
+ "521881010595734530303539396317948868204070581777214986146436"
+ "787584632193988565062001979299954888360379791497508759572055"
+ "500889164919896927727344221023077626909362205236140801210681"
+ "790306995374590904151473988022708942218135581332388074374731"
+ "601376907398595603196240484548455193864763652931369903351174"
+ "544227914190235653301814318281518707344132851054049215257648"
+ "822998553579843623915248343490157688045755609613688354194931"
+ "155095316567258520417716293863465955387522390164888525982287"
+ "381559819702117898832961338716666201201408518828570963323251"
+ "306194210542627378161868636589387165536962353855787777596576"
+ "710978563031098260476460305935557430711516343712631161621638"
+ "424297747566901295718902492493026946182667450323568568598792"
+ "580977411978419195554374077438549283595347906697196389997943"
+ "821127206870116346470443618175766845587246257442257132503411"
+ "376013068217734850145814471463643421637479890664657625208680"
+ "219057665052258447298724802437977073554005025955098694430208"
+ "501653797887431738591455762554777271441730120433837397235427"
+ "441907712019593507034623068852355183288502788155837192039905"
+ "218603255641396097281251518075514455032709185282558744031113"
+ "036987927459621719970870508223603142271888913040204537878014"
+ "097232781406038322711142335237865461173227252915276587188975"
+ "412089017354073518724435949481849511686910608709780211729679"
+ "423063616265710776413272977181193215639813458821362590901377"
+ "135567298928115902833064762050754791470792710944280648419737"
+ "116028237056467689588717464113777074701321446956746031390623"
+ "186305587652731135855965505817801019568850834786532980472935"
+ "789710341720048589915684158676078601107580341029439012576503"
+ "592092659931725826043687968325502279918751241904045306536991"
+ "132342810175996759727172288817628726164341863494412352737198"
+ "699123595406441535867371630213270061740895641891464486421233"
+ "297605134707109520450896967776936045188697002966298943540679"
+ "740957924589270564091461636421609256546506083872345409301831"
+ "931345863636282662528851689413776642426251033843013425169812"
+ "200523043408518309183421120012261021034944354267413735617601"
+ "999466129654555471183928143892048583210218715059190623669673"
+ "709078451184641215598867539008295806531959130171749496348501"
+ "016593279206827788351694604150601776078877850926025938963932"
+ "348257710184608851755301379907626287399864353397924779191438"
+ "696008198450280050868370731345376995801131987106068816254492"
+ "132279657770445691596180800594675207155679408490487848784280"
+ "757840485915053852076328642276460120931365062944412851150517"
+ "782307879807941005366882170554917224788453991203132901742055"
+ "651807985648804532635758643055919919823171907682230888197136"
+ "785695609657776957667650311147598288820442100762328807032871"
+ "864560877230326487537995006393010831208038878617743781275190"
+ "558412003007220219089126636587367218081819059766147691675567"
+ "771585405798025892518183423386642968922615987212237709485258"
+ "829589899034986438444744438813654943661868795407437525228658"
+ "904812581856613986614501454001745869542557985949803493369202"
+ "876231718093372553910516157740346758003125694394951026931617"
+ "535978947861060938131299416911676145021288244119060362036133"
+ "740174212818599501573880189231621521703767197610941072443657"
+ "937938012953869896148787897686753214596234235085019156025250"
+ "458832853791710463651895437666203902547252832579877605247633"
+ "242797093622461108077141606844016196969700713249758804637564"
+ "031033677586166560428898022693846246187767028235072650835679"
+ "508301416234837561554299294212011108379667366726313165151895"
+ "830476329518081413754725734385648977368582850960838417433497"
+ "042248134245755299790357229077513373338430395014449861322941"
+ "839717984951023221186554236475757746380955942423605912965057"
+ "827463769559044175127979722538378699149446690331124179105037"
+ "648851095593259807257640197670861588600691931413564860824819"
+ "137265657381188889377280059698561590053655108304078570914189"
+ "629664137254233685858528515552268875225114223970809842036687"
+ "815258661003059320145462620801188128167207188247801455632725"
+ "082944709186080859531835309805107316387271370578683213373930"
+ "527405724724502485066334073303661751380073478793232637990545"
+ "164168128190593725323015246035847258027356222256980634811669"
+ "852705683168908821634658358608716239406001024947489962630205"
+ "776825692692413107115696006420712968413972191633113557618014"
+ "858696532329910528233723435298914378716968012211255768780932"
+ "309932797977814035171890236317231958304220075777251395064208"
+ "638629746218502848288226858693654802564969763330590748497148"
+ "622346855218718290721826777671881908623480917243090647492727"
+ "942490633210766719088635904655448517979130388109126548929300"
+ "580321560326963512326417012573083178438865633283218615714530"
+ "549903912556636275934676454120536977847927177426272685396804"
+ "919083563678876289503745477768040694051730867535587283818464"
+ "530412086187505017748505307478598856959954962317953251674008"
+ "225476237765489460621328249350656765266995846433809943413102"
+ "353234238035471689081788617703430631377557454803127814187829"
+ "598025185330715074053608155317864680056010785645548139016038"
+ "200546112686635086975287688896283436056884042970495964827912"
+ "025457042506985430699507570505216417703168633373353363740973"
+ "098449441236047555752605169966501252613667375010142836817335"
+ "369229195079966747113425749967668461018275843584570291287076"
+ "863436226900429180382446487600878513931316307565128037734274"
+ "751419683920963106436365962521419345659878831691373235891043"
+ "914494428989096241797873944510540729730313852637867934309362"
+ "479391674181147553437778221885313432295986044940607732570536"
+ "758323465079498284873837903359731801022615162524897452447369"
+ "994156363786660485655244163243106530919921915001572936639717"
+ "727060908959134609147450693915078216074071190796432287614559"
+ "739514565025331782444586046533670722082471368442936376992006"
+ "432871710633235430712641944567318442895146617863508894303083"
+ "780006238593348534997106956499275465539308594895385688351274"
+ "527680872602616209515711522183485689297196476046732023220833"
+ "558806953101747436104574698259485603639631941783303387176618"
+ "127736801688930806971119771946947230290585329044021041830702"
+ "468732853329712319650648310981953139465377229648008743031539"
+ "791012497742669446849787144903264712336696905108788802976454"
+ "745641561589894577319528552887480349967499840509077874630932"
+ "006410787240379373316011071930020626071423345824245404625428"
+ "163528566770284308895812647657178766782096152465077867650878"
+ "728765790031331346983386248864167523818934527230120011631131"
+ "130349221973482282345629720853245305588082152846834757883902"
+ "418230260602977365876291924423262576905967270998981387607980"
+ "590173198728061164566710508280203138579629390853086417284931"
+ "473476503896627076093505113988019224990398993864279520509220"
+ "795282297369154155289507298946591008575807604025045159241768"
+ "053124565959288158472125768546173559933716867523084862590552"
+ "253795464417356834592115317041595395862621956820603128199550"
+ "775483058782397777574710005576429220542135705644683046579361"
+ "127376380818572381345373863156949724560997571282830521596582"
+ "676505338806880191653919681180812814185728172204622753540956"
+ "759118628570582119983330392951985037590913404114720365889373"
+ "415375522713642972968081965998964699854200925870352763511855"
+ "746131244738423217984936240351114193253178508974164557277742"
+ "082380052953358927842394019540795856889426401016424800654084"
+ "916008710304199673856712109217270885934221094921708814309165"
+ "303714869866869718931790902001741107041185283983665265223010"
+ "448886692863436456094906661547207546571718775198778131390005"
+ "604470865710049377159980709766283930814795133660201608803830"
+ "387062687050597694976947517673970085074048905476041868399282"
+ "210210811303996695447225466023628701716954332942062300692087"
+ "506193808715233967409332888561229743938739628873817586345844"
+ "235787382642910048037566676934777493608199400013226603778961"
+ "767983065878179176099437852691381581840415294028487335814184"
+ "359705913795796403022353882329072812841999278936447291852558"
+ "968128572497367407956029126386010516040841218546640263332596"
+ "364434900477374007125240521422713075571772237186443808781395"
+ "704933482403159804140409908423471029408690971564881017253795"
+ "683532592671608458875707405594322989754471498482191627716499"
+ "623059985647863148101198460951644508745146797656322518348570"
+ "790574994392249644280292306896707679268682338936248112446049"
+ "470428346171179377813259652278973223502016593007301073724799"
+ "675658539879152222438587068260743628405812631733705003812107"
+ "928072696169776344782845288646566530062426827248787785754788"
+ "204034823098323378752624648063186410269617045282345847903272"
+ "357883012794129290951171155740484706110733426210921325242247"
+ "031947432945712281996375613115158529796206595654235073113183"
+ "229116768328986688033570396888184706095894900612660127539722"
+ "296354502849429049358053512594493214173703639526633300022260"
+ "539993994939768478780065535050030025336768841935569091193952"
+ "295418769626212992663315977727928629409378094031848746171275"
+ "022638700062740039963954423425449141952878266414881475254943"
+ "495837962606594204955766121034305444739163225756990557510496"
+ "315197857760175019686351370553955868473946854769235600181870"
+ "334652058422826629519051090252418555394822679760154964690633"
+ "135731870251253728441441127894034855357885401169158852255396"
+ "639699288081854756163047653011165173498858844059363317314325"
+ "337992118958275600750342252059241652780147872373128975930272"
+ "695413265811145294182418990017214027985685032786710185135452"
+ "796070710025751232508396762575475070121803068832455179884557"
+ "256396146713354003220173366339787259797424068097390744348497"
+ "133677887754833488593674822145911513312492765863432565891182"
+ "214190046527577994266053060958283589302064055540161380606786"
+ "890667240333781935628676127016516337623222119318995031037529"
+ "409927247355689957774656695089650045891746748411475239883461"
+ "991652532450513429435170431778399974155311268296236254817242"
+ "455320367729822023577459233771570012382302724878339725223236"
+ "524461412308558861938192318706466190317653357172677355284205"
+ "070293717538810250642799918525989427528167652785307564855930"
+ "154693751985406421867359356407962520131591444357266715568677"
+ "627861184481418195428000588444756576764708052752232108761309"
+ "370767116216033888153345559070999007492770805224496576474472"
+ "932991677358644527430624867238990432029754811496885262555308"
+ "156932915411739463731250447922108182182749719224567329572666"
+ "899997017005141127283165797509102920540243864496816399084035"
+ "238460602970884482510943589340905249650626519667989139853813"
+ "647643848628244980589979473423920215951052653309297415539267"
+ "311044820996950448378367138265965725133486376318998624075987"
+ "11389056234111194498836994171142578124e-4952",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x8p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x2p-16448,
+ -0x2p-16448,
+ -0x1.fffffffffffcp-16448,
+ -0x1.fffffffffffcp-16448),
+ TEST ("-9.112998829706186506321014834048549540997627039233908359302"
+ "451217570929221583494342023901771564568012993118368368008827"
+ "754917464081555080424933770188974522513709556452944829196423"
+ "063159514083899391553906414958526822350799483883818171478101"
+ "999885432027538796345957615136921788556123238264649295670535"
+ "656555168830888652110170198149384349220565847429757033386660"
+ "529893234530000541906680730080693584097577114013824488797138"
+ "248030638302927908719072846157325088784631875400783211446468"
+ "366417145208372632809262984971759958271469599865806253671506"
+ "148665941467176141059086775605992986647150893920167836194956"
+ "910549340732044378238901342114403169616619771293658127309340"
+ "098781806953539883415240998611008505292633721120054944409011"
+ "094771719058122585292273236376330708886510637541177621277475"
+ "388124237050940437681936303994812073160411682073448062085946"
+ "305372118811154133351132852246337347252699998665212489482352"
+ "167705562919745231565830710334083843075914276516681777540254"
+ "242467271363817040233616963939558863216141676162273217657656"
+ "468904825547982098936715199331001854831676981466460619758131"
+ "504286256279130046834263891194174641007654179652470752555222"
+ "521881010595734530303539396317948868204070581777214986146436"
+ "787584632193988565062001979299954888360379791497508759572055"
+ "500889164919896927727344221023077626909362205236140801210681"
+ "790306995374590904151473988022708942218135581332388074374731"
+ "601376907398595603196240484548455193864763652931369903351174"
+ "544227914190235653301814318281518707344132851054049215257648"
+ "822998553579843623915248343490157688045755609613688354194931"
+ "155095316567258520417716293863465955387522390164888525982287"
+ "381559819702117898832961338716666201201408518828570963323251"
+ "306194210542627378161868636589387165536962353855787777596576"
+ "710978563031098260476460305935557430711516343712631161621638"
+ "424297747566901295718902492493026946182667450323568568598792"
+ "580977411978419195554374077438549283595347906697196389997943"
+ "821127206870116346470443618175766845587246257442257132503411"
+ "376013068217734850145814471463643421637479890664657625208680"
+ "219057665052258447298724802437977073554005025955098694430208"
+ "501653797887431738591455762554777271441730120433837397235427"
+ "441907712019593507034623068852355183288502788155837192039905"
+ "218603255641396097281251518075514455032709185282558744031113"
+ "036987927459621719970870508223603142271888913040204537878014"
+ "097232781406038322711142335237865461173227252915276587188975"
+ "412089017354073518724435949481849511686910608709780211729679"
+ "423063616265710776413272977181193215639813458821362590901377"
+ "135567298928115902833064762050754791470792710944280648419737"
+ "116028237056467689588717464113777074701321446956746031390623"
+ "186305587652731135855965505817801019568850834786532980472935"
+ "789710341720048589915684158676078601107580341029439012576503"
+ "592092659931725826043687968325502279918751241904045306536991"
+ "132342810175996759727172288817628726164341863494412352737198"
+ "699123595406441535867371630213270061740895641891464486421233"
+ "297605134707109520450896967776936045188697002966298943540679"
+ "740957924589270564091461636421609256546506083872345409301831"
+ "931345863636282662528851689413776642426251033843013425169812"
+ "200523043408518309183421120012261021034944354267413735617601"
+ "999466129654555471183928143892048583210218715059190623669673"
+ "709078451184641215598867539008295806531959130171749496348501"
+ "016593279206827788351694604150601776078877850926025938963932"
+ "348257710184608851755301379907626287399864353397924779191438"
+ "696008198450280050868370731345376995801131987106068816254492"
+ "132279657770445691596180800594675207155679408490487848784280"
+ "757840485915053852076328642276460120931365062944412851150517"
+ "782307879807941005366882170554917224788453991203132901742055"
+ "651807985648804532635758643055919919823171907682230888197136"
+ "785695609657776957667650311147598288820442100762328807032871"
+ "864560877230326487537995006393010831208038878617743781275190"
+ "558412003007220219089126636587367218081819059766147691675567"
+ "771585405798025892518183423386642968922615987212237709485258"
+ "829589899034986438444744438813654943661868795407437525228658"
+ "904812581856613986614501454001745869542557985949803493369202"
+ "876231718093372553910516157740346758003125694394951026931617"
+ "535978947861060938131299416911676145021288244119060362036133"
+ "740174212818599501573880189231621521703767197610941072443657"
+ "937938012953869896148787897686753214596234235085019156025250"
+ "458832853791710463651895437666203902547252832579877605247633"
+ "242797093622461108077141606844016196969700713249758804637564"
+ "031033677586166560428898022693846246187767028235072650835679"
+ "508301416234837561554299294212011108379667366726313165151895"
+ "830476329518081413754725734385648977368582850960838417433497"
+ "042248134245755299790357229077513373338430395014449861322941"
+ "839717984951023221186554236475757746380955942423605912965057"
+ "827463769559044175127979722538378699149446690331124179105037"
+ "648851095593259807257640197670861588600691931413564860824819"
+ "137265657381188889377280059698561590053655108304078570914189"
+ "629664137254233685858528515552268875225114223970809842036687"
+ "815258661003059320145462620801188128167207188247801455632725"
+ "082944709186080859531835309805107316387271370578683213373930"
+ "527405724724502485066334073303661751380073478793232637990545"
+ "164168128190593725323015246035847258027356222256980634811669"
+ "852705683168908821634658358608716239406001024947489962630205"
+ "776825692692413107115696006420712968413972191633113557618014"
+ "858696532329910528233723435298914378716968012211255768780932"
+ "309932797977814035171890236317231958304220075777251395064208"
+ "638629746218502848288226858693654802564969763330590748497148"
+ "622346855218718290721826777671881908623480917243090647492727"
+ "942490633210766719088635904655448517979130388109126548929300"
+ "580321560326963512326417012573083178438865633283218615714530"
+ "549903912556636275934676454120536977847927177426272685396804"
+ "919083563678876289503745477768040694051730867535587283818464"
+ "530412086187505017748505307478598856959954962317953251674008"
+ "225476237765489460621328249350656765266995846433809943413102"
+ "353234238035471689081788617703430631377557454803127814187829"
+ "598025185330715074053608155317864680056010785645548139016038"
+ "200546112686635086975287688896283436056884042970495964827912"
+ "025457042506985430699507570505216417703168633373353363740973"
+ "098449441236047555752605169966501252613667375010142836817335"
+ "369229195079966747113425749967668461018275843584570291287076"
+ "863436226900429180382446487600878513931316307565128037734274"
+ "751419683920963106436365962521419345659878831691373235891043"
+ "914494428989096241797873944510540729730313852637867934309362"
+ "479391674181147553437778221885313432295986044940607732570536"
+ "758323465079498284873837903359731801022615162524897452447369"
+ "994156363786660485655244163243106530919921915001572936639717"
+ "727060908959134609147450693915078216074071190796432287614559"
+ "739514565025331782444586046533670722082471368442936376992006"
+ "432871710633235430712641944567318442895146617863508894303083"
+ "780006238593348534997106956499275465539308594895385688351274"
+ "527680872602616209515711522183485689297196476046732023220833"
+ "558806953101747436104574698259485603639631941783303387176618"
+ "127736801688930806971119771946947230290585329044021041830702"
+ "468732853329712319650648310981953139465377229648008743031539"
+ "791012497742669446849787144903264712336696905108788802976454"
+ "745641561589894577319528552887480349967499840509077874630932"
+ "006410787240379373316011071930020626071423345824245404625428"
+ "163528566770284308895812647657178766782096152465077867650878"
+ "728765790031331346983386248864167523818934527230120011631131"
+ "130349221973482282345629720853245305588082152846834757883902"
+ "418230260602977365876291924423262576905967270998981387607980"
+ "590173198728061164566710508280203138579629390853086417284931"
+ "473476503896627076093505113988019224990398993864279520509220"
+ "795282297369154155289507298946591008575807604025045159241768"
+ "053124565959288158472125768546173559933716867523084862590552"
+ "253795464417356834592115317041595395862621956820603128199550"
+ "775483058782397777574710005576429220542135705644683046579361"
+ "127376380818572381345373863156949724560997571282830521596582"
+ "676505338806880191653919681180812814185728172204622753540956"
+ "759118628570582119983330392951985037590913404114720365889373"
+ "415375522713642972968081965998964699854200925870352763511855"
+ "746131244738423217984936240351114193253178508974164557277742"
+ "082380052953358927842394019540795856889426401016424800654084"
+ "916008710304199673856712109217270885934221094921708814309165"
+ "303714869866869718931790902001741107041185283983665265223010"
+ "448886692863436456094906661547207546571718775198778131390005"
+ "604470865710049377159980709766283930814795133660201608803830"
+ "387062687050597694976947517673970085074048905476041868399282"
+ "210210811303996695447225466023628701716954332942062300692087"
+ "506193808715233967409332888561229743938739628873817586345844"
+ "235787382642910048037566676934777493608199400013226603778961"
+ "767983065878179176099437852691381581840415294028487335814184"
+ "359705913795796403022353882329072812841999278936447291852558"
+ "968128572497367407956029126386010516040841218546640263332596"
+ "364434900477374007125240521422713075571772237186443808781395"
+ "704933482403159804140409908423471029408690971564881017253795"
+ "683532592671608458875707405594322989754471498482191627716499"
+ "623059985647863148101198460951644508745146797656322518348570"
+ "790574994392249644280292306896707679268682338936248112446049"
+ "470428346171179377813259652278973223502016593007301073724799"
+ "675658539879152222438587068260743628405812631733705003812107"
+ "928072696169776344782845288646566530062426827248787785754788"
+ "204034823098323378752624648063186410269617045282345847903272"
+ "357883012794129290951171155740484706110733426210921325242247"
+ "031947432945712281996375613115158529796206595654235073113183"
+ "229116768328986688033570396888184706095894900612660127539722"
+ "296354502849429049358053512594493214173703639526633300022260"
+ "539993994939768478780065535050030025336768841935569091193952"
+ "295418769626212992663315977727928629409378094031848746171275"
+ "022638700062740039963954423425449141952878266414881475254943"
+ "495837962606594204955766121034305444739163225756990557510496"
+ "315197857760175019686351370553955868473946854769235600181870"
+ "334652058422826629519051090252418555394822679760154964690633"
+ "135731870251253728441441127894034855357885401169158852255396"
+ "639699288081854756163047653011165173498858844059363317314325"
+ "337992118958275600750342252059241652780147872373128975930272"
+ "695413265811145294182418990017214027985685032786710185135452"
+ "796070710025751232508396762575475070121803068832455179884557"
+ "256396146713354003220173366339787259797424068097390744348497"
+ "133677887754833488593674822145911513312492765863432565891182"
+ "214190046527577994266053060958283589302064055540161380606786"
+ "890667240333781935628676127016516337623222119318995031037529"
+ "409927247355689957774656695089650045891746748411475239883461"
+ "991652532450513429435170431778399974155311268296236254817242"
+ "455320367729822023577459233771570012382302724878339725223236"
+ "524461412308558861938192318706466190317653357172677355284205"
+ "070293717538810250642799918525989427528167652785307564855930"
+ "154693751985406421867359356407962520131591444357266715568677"
+ "627861184481418195428000588444756576764708052752232108761309"
+ "370767116216033888153345559070999007492770805224496576474472"
+ "932991677358644527430624867238990432029754811496885262555308"
+ "156932915411739463731250447922108182182749719224567329572666"
+ "899997017005141127283165797509102920540243864496816399084035"
+ "238460602970884482510943589340905249650626519667989139853813"
+ "647643848628244980589979473423920215951052653309297415539267"
+ "311044820996950448378367138265965725133486376318998624075987"
+ "11389056234111194498836994171142578125e-4952",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x8p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ true,
+ -0x2p-16448,
+ -0x2p-16448,
+ -0x2p-16448,
+ -0x2p-16448),
+ TEST ("-9.112998829706186506321014834048549540997627039233908359302"
+ "451217570929221583494342023901771564568012993118368368008827"
+ "754917464081555080424933770188974522513709556452944829196423"
+ "063159514083899391553906414958526822350799483883818171478101"
+ "999885432027538796345957615136921788556123238264649295670535"
+ "656555168830888652110170198149384349220565847429757033386660"
+ "529893234530000541906680730080693584097577114013824488797138"
+ "248030638302927908719072846157325088784631875400783211446468"
+ "366417145208372632809262984971759958271469599865806253671506"
+ "148665941467176141059086775605992986647150893920167836194956"
+ "910549340732044378238901342114403169616619771293658127309340"
+ "098781806953539883415240998611008505292633721120054944409011"
+ "094771719058122585292273236376330708886510637541177621277475"
+ "388124237050940437681936303994812073160411682073448062085946"
+ "305372118811154133351132852246337347252699998665212489482352"
+ "167705562919745231565830710334083843075914276516681777540254"
+ "242467271363817040233616963939558863216141676162273217657656"
+ "468904825547982098936715199331001854831676981466460619758131"
+ "504286256279130046834263891194174641007654179652470752555222"
+ "521881010595734530303539396317948868204070581777214986146436"
+ "787584632193988565062001979299954888360379791497508759572055"
+ "500889164919896927727344221023077626909362205236140801210681"
+ "790306995374590904151473988022708942218135581332388074374731"
+ "601376907398595603196240484548455193864763652931369903351174"
+ "544227914190235653301814318281518707344132851054049215257648"
+ "822998553579843623915248343490157688045755609613688354194931"
+ "155095316567258520417716293863465955387522390164888525982287"
+ "381559819702117898832961338716666201201408518828570963323251"
+ "306194210542627378161868636589387165536962353855787777596576"
+ "710978563031098260476460305935557430711516343712631161621638"
+ "424297747566901295718902492493026946182667450323568568598792"
+ "580977411978419195554374077438549283595347906697196389997943"
+ "821127206870116346470443618175766845587246257442257132503411"
+ "376013068217734850145814471463643421637479890664657625208680"
+ "219057665052258447298724802437977073554005025955098694430208"
+ "501653797887431738591455762554777271441730120433837397235427"
+ "441907712019593507034623068852355183288502788155837192039905"
+ "218603255641396097281251518075514455032709185282558744031113"
+ "036987927459621719970870508223603142271888913040204537878014"
+ "097232781406038322711142335237865461173227252915276587188975"
+ "412089017354073518724435949481849511686910608709780211729679"
+ "423063616265710776413272977181193215639813458821362590901377"
+ "135567298928115902833064762050754791470792710944280648419737"
+ "116028237056467689588717464113777074701321446956746031390623"
+ "186305587652731135855965505817801019568850834786532980472935"
+ "789710341720048589915684158676078601107580341029439012576503"
+ "592092659931725826043687968325502279918751241904045306536991"
+ "132342810175996759727172288817628726164341863494412352737198"
+ "699123595406441535867371630213270061740895641891464486421233"
+ "297605134707109520450896967776936045188697002966298943540679"
+ "740957924589270564091461636421609256546506083872345409301831"
+ "931345863636282662528851689413776642426251033843013425169812"
+ "200523043408518309183421120012261021034944354267413735617601"
+ "999466129654555471183928143892048583210218715059190623669673"
+ "709078451184641215598867539008295806531959130171749496348501"
+ "016593279206827788351694604150601776078877850926025938963932"
+ "348257710184608851755301379907626287399864353397924779191438"
+ "696008198450280050868370731345376995801131987106068816254492"
+ "132279657770445691596180800594675207155679408490487848784280"
+ "757840485915053852076328642276460120931365062944412851150517"
+ "782307879807941005366882170554917224788453991203132901742055"
+ "651807985648804532635758643055919919823171907682230888197136"
+ "785695609657776957667650311147598288820442100762328807032871"
+ "864560877230326487537995006393010831208038878617743781275190"
+ "558412003007220219089126636587367218081819059766147691675567"
+ "771585405798025892518183423386642968922615987212237709485258"
+ "829589899034986438444744438813654943661868795407437525228658"
+ "904812581856613986614501454001745869542557985949803493369202"
+ "876231718093372553910516157740346758003125694394951026931617"
+ "535978947861060938131299416911676145021288244119060362036133"
+ "740174212818599501573880189231621521703767197610941072443657"
+ "937938012953869896148787897686753214596234235085019156025250"
+ "458832853791710463651895437666203902547252832579877605247633"
+ "242797093622461108077141606844016196969700713249758804637564"
+ "031033677586166560428898022693846246187767028235072650835679"
+ "508301416234837561554299294212011108379667366726313165151895"
+ "830476329518081413754725734385648977368582850960838417433497"
+ "042248134245755299790357229077513373338430395014449861322941"
+ "839717984951023221186554236475757746380955942423605912965057"
+ "827463769559044175127979722538378699149446690331124179105037"
+ "648851095593259807257640197670861588600691931413564860824819"
+ "137265657381188889377280059698561590053655108304078570914189"
+ "629664137254233685858528515552268875225114223970809842036687"
+ "815258661003059320145462620801188128167207188247801455632725"
+ "082944709186080859531835309805107316387271370578683213373930"
+ "527405724724502485066334073303661751380073478793232637990545"
+ "164168128190593725323015246035847258027356222256980634811669"
+ "852705683168908821634658358608716239406001024947489962630205"
+ "776825692692413107115696006420712968413972191633113557618014"
+ "858696532329910528233723435298914378716968012211255768780932"
+ "309932797977814035171890236317231958304220075777251395064208"
+ "638629746218502848288226858693654802564969763330590748497148"
+ "622346855218718290721826777671881908623480917243090647492727"
+ "942490633210766719088635904655448517979130388109126548929300"
+ "580321560326963512326417012573083178438865633283218615714530"
+ "549903912556636275934676454120536977847927177426272685396804"
+ "919083563678876289503745477768040694051730867535587283818464"
+ "530412086187505017748505307478598856959954962317953251674008"
+ "225476237765489460621328249350656765266995846433809943413102"
+ "353234238035471689081788617703430631377557454803127814187829"
+ "598025185330715074053608155317864680056010785645548139016038"
+ "200546112686635086975287688896283436056884042970495964827912"
+ "025457042506985430699507570505216417703168633373353363740973"
+ "098449441236047555752605169966501252613667375010142836817335"
+ "369229195079966747113425749967668461018275843584570291287076"
+ "863436226900429180382446487600878513931316307565128037734274"
+ "751419683920963106436365962521419345659878831691373235891043"
+ "914494428989096241797873944510540729730313852637867934309362"
+ "479391674181147553437778221885313432295986044940607732570536"
+ "758323465079498284873837903359731801022615162524897452447369"
+ "994156363786660485655244163243106530919921915001572936639717"
+ "727060908959134609147450693915078216074071190796432287614559"
+ "739514565025331782444586046533670722082471368442936376992006"
+ "432871710633235430712641944567318442895146617863508894303083"
+ "780006238593348534997106956499275465539308594895385688351274"
+ "527680872602616209515711522183485689297196476046732023220833"
+ "558806953101747436104574698259485603639631941783303387176618"
+ "127736801688930806971119771946947230290585329044021041830702"
+ "468732853329712319650648310981953139465377229648008743031539"
+ "791012497742669446849787144903264712336696905108788802976454"
+ "745641561589894577319528552887480349967499840509077874630932"
+ "006410787240379373316011071930020626071423345824245404625428"
+ "163528566770284308895812647657178766782096152465077867650878"
+ "728765790031331346983386248864167523818934527230120011631131"
+ "130349221973482282345629720853245305588082152846834757883902"
+ "418230260602977365876291924423262576905967270998981387607980"
+ "590173198728061164566710508280203138579629390853086417284931"
+ "473476503896627076093505113988019224990398993864279520509220"
+ "795282297369154155289507298946591008575807604025045159241768"
+ "053124565959288158472125768546173559933716867523084862590552"
+ "253795464417356834592115317041595395862621956820603128199550"
+ "775483058782397777574710005576429220542135705644683046579361"
+ "127376380818572381345373863156949724560997571282830521596582"
+ "676505338806880191653919681180812814185728172204622753540956"
+ "759118628570582119983330392951985037590913404114720365889373"
+ "415375522713642972968081965998964699854200925870352763511855"
+ "746131244738423217984936240351114193253178508974164557277742"
+ "082380052953358927842394019540795856889426401016424800654084"
+ "916008710304199673856712109217270885934221094921708814309165"
+ "303714869866869718931790902001741107041185283983665265223010"
+ "448886692863436456094906661547207546571718775198778131390005"
+ "604470865710049377159980709766283930814795133660201608803830"
+ "387062687050597694976947517673970085074048905476041868399282"
+ "210210811303996695447225466023628701716954332942062300692087"
+ "506193808715233967409332888561229743938739628873817586345844"
+ "235787382642910048037566676934777493608199400013226603778961"
+ "767983065878179176099437852691381581840415294028487335814184"
+ "359705913795796403022353882329072812841999278936447291852558"
+ "968128572497367407956029126386010516040841218546640263332596"
+ "364434900477374007125240521422713075571772237186443808781395"
+ "704933482403159804140409908423471029408690971564881017253795"
+ "683532592671608458875707405594322989754471498482191627716499"
+ "623059985647863148101198460951644508745146797656322518348570"
+ "790574994392249644280292306896707679268682338936248112446049"
+ "470428346171179377813259652278973223502016593007301073724799"
+ "675658539879152222438587068260743628405812631733705003812107"
+ "928072696169776344782845288646566530062426827248787785754788"
+ "204034823098323378752624648063186410269617045282345847903272"
+ "357883012794129290951171155740484706110733426210921325242247"
+ "031947432945712281996375613115158529796206595654235073113183"
+ "229116768328986688033570396888184706095894900612660127539722"
+ "296354502849429049358053512594493214173703639526633300022260"
+ "539993994939768478780065535050030025336768841935569091193952"
+ "295418769626212992663315977727928629409378094031848746171275"
+ "022638700062740039963954423425449141952878266414881475254943"
+ "495837962606594204955766121034305444739163225756990557510496"
+ "315197857760175019686351370553955868473946854769235600181870"
+ "334652058422826629519051090252418555394822679760154964690633"
+ "135731870251253728441441127894034855357885401169158852255396"
+ "639699288081854756163047653011165173498858844059363317314325"
+ "337992118958275600750342252059241652780147872373128975930272"
+ "695413265811145294182418990017214027985685032786710185135452"
+ "796070710025751232508396762575475070121803068832455179884557"
+ "256396146713354003220173366339787259797424068097390744348497"
+ "133677887754833488593674822145911513312492765863432565891182"
+ "214190046527577994266053060958283589302064055540161380606786"
+ "890667240333781935628676127016516337623222119318995031037529"
+ "409927247355689957774656695089650045891746748411475239883461"
+ "991652532450513429435170431778399974155311268296236254817242"
+ "455320367729822023577459233771570012382302724878339725223236"
+ "524461412308558861938192318706466190317653357172677355284205"
+ "070293717538810250642799918525989427528167652785307564855930"
+ "154693751985406421867359356407962520131591444357266715568677"
+ "627861184481418195428000588444756576764708052752232108761309"
+ "370767116216033888153345559070999007492770805224496576474472"
+ "932991677358644527430624867238990432029754811496885262555308"
+ "156932915411739463731250447922108182182749719224567329572666"
+ "899997017005141127283165797509102920540243864496816399084035"
+ "238460602970884482510943589340905249650626519667989139853813"
+ "647643848628244980589979473423920215951052653309297415539267"
+ "311044820996950448378367138265965725133486376318998624075987"
+ "11389056234111194498836994171142578126e-4952",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x8p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-16448,
+ -0x4p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x2.000000000004p-16448,
+ -0x2p-16448,
+ -0x2p-16448,
+ -0x2p-16448),
+ TEST ("3.2375875597190125554622194791138232762497846690173405048449"
+ "421945985197700620596855088357456383249701279390707384240598"
+ "382936099431912710233425550359863089915213963553756674672083"
+ "673128192358701197242632527769951957277781260855740340354110"
+ "173441284912381364143945515141786687806740155311932822963199"
+ "131134959539539338316310328556057915323285980341541664226172"
+ "265348802632447238304822896568757017013159021750199744350376"
+ "278243566840330589397015778833566517337174685312047058426075"
+ "688036665697114219175258344917835835984013214761767520398571"
+ "735519302688914468501077605843338555214753050109407568139932"
+ "147308502166696009676987494125921676927574464221699654264839"
+ "192243410627511520570610765229732327315423820550872393685221"
+ "676561948307418196052769717057382723931306989375320957256133"
+ "838073129463951849807075348034900035402513943244599879584009"
+ "391110011261908615236154859382854977144106096407982738165117"
+ "693915685918231984764157652755343417097983676870433731452629"
+ "339981084526616826599425863049784138127555181662391766144738"
+ "159400253422795753041594932607700680306368857466952063923782"
+ "760519487592638820793893796669403574411398166619131986561877"
+ "034635197232626532239192571857518274939275861531537920777299"
+ "133535479548088762634002006634954143608168633852204577195463"
+ "389533233992867620995583241321034602255800668175356808869060"
+ "608582640890741203603916133682748118680676374951545690715916"
+ "241859799379894025137504643469040366684778763795442214328000"
+ "375999444991619403217748350277527106812175542863660436614910"
+ "135938862296156144947361864759321605496309393905421651264941"
+ "669606814994816518612155298709843817262034769175075602668866"
+ "926449523554218142013501373514352370369126244144449924971423"
+ "038024236058971106053649565799145071085840022305247663313482"
+ "714565918140785997808209749619683146844964283106915422726638"
+ "184861327711776708749278315100024436584176080783836115268999"
+ "055336294569042349971163039294272620322160728879610722678506"
+ "182344928526064885227397447578450046944618127903428943538029"
+ "386719288345854473283987116842451647036255801966780244103035"
+ "425445345127067921349083698736056197567752071915587544133815"
+ "717564310032485290205726480489464589999677885266171263493459"
+ "668963623768410922688414177814149693150024191921819721215688"
+ "114324591287371281400636455584825253000890602388603923710921"
+ "026880979879158388608823700222683123228822356907857261909150"
+ "626993825760416437415551396973489279578569909699853422995997"
+ "974315036153120383930698087773157253674975950409660938084071"
+ "173163693891122166282318691732176374528554627905530306369204"
+ "877964658806333996327938827344733821685425961846791581492287"
+ "250044047142934607523718654369478552373072400018635730811749"
+ "291666457582760812726851561001954207941547404866373158231367"
+ "986951247388733285659455982411993350593989550494594498447410"
+ "984783303191128659803467713819821511544998464785455306500918"
+ "241648925913966507036336000231915215026183799886938007038845"
+ "551916478649593272604688927931953165785101738164060543643192"
+ "949066412847647883846835866623820426428526541564774787007791"
+ "235843699657232847114093617412355486871810526396392792853731"
+ "390841657984518997639795008374280777823099107035223998600103"
+ "103211166230289241182380237703814248941627178152962100972452"
+ "217697144954497443279450919433943252592977710901289696002698"
+ "225209041938801190947812141758873162203113090284565687499100"
+ "109623665868340184032428667217835198069330185880779776269137"
+ "742366802202585247113480377505916462865316253065105837519292"
+ "805411191872195967066157363040364443666632564266439033866945"
+ "366496486863801221986778957510023272290593640187551645170603"
+ "215150911733580059874983597994671388176488814794186236946834"
+ "548816837468411497151813344980969677026131105901402313456769"
+ "561412278508799050185582199844418197980544632067644131002512"
+ "557755358307705356209461595354064971347590431926479961905129"
+ "785864961996560707071051177738535042777950247546470241655891"
+ "294428226271478689174637951663865529219133988782700199051475"
+ "108495188941141025360733690471601309904116260484264378352956"
+ "830972782977747351810451586166745640802378131466232692150196"
+ "132319386267589275314909450293562079332893638471814389025392"
+ "970579695249613486078445695214422379148991006996109216699215"
+ "721671648754881325271879493185438097033881789311707997697928"
+ "860866812849648616086569281093053695399558469641977866770538"
+ "476039621947215238679930485285585513808236992918733520331110"
+ "962448142457896209307561142289713638388281085340301520317159"
+ "297224995464365477734040179470355969363384621039467975256670"
+ "339354334892926205316491997244008324897517881293654265688813"
+ "283579663372924392043825371743576754041055802440187836850412"
+ "247984570221893156921757872572872036331343007592090605703195"
+ "088864753777199111760713027328198781654685927174063882187275"
+ "850263521274368447629947228263907797373221137688424821608129"
+ "731003236738630502344377228987961455961818623205503012858619"
+ "800521948637807438081069469400793496307826769301971342062597"
+ "391253779410607511754278887744936774785938056823221738917303"
+ "119592848951788560393540150358649310736020595310015728915288"
+ "289821678102453433273888879288862086153270028346900686360943"
+ "250522514297816412678213672667152836436597491522644579383191"
+ "851483036048273636234050603745735057899230038434384361744893"
+ "838050985090837220507663282503497932038372021626246900935334"
+ "781144388106031405650705176699646299475436084049881780196520"
+ "881623075256119318210664937469946410480660118598143375898298"
+ "965497205621170906772915413181530577151676241283182977713765"
+ "317889730886996471681592298058774155948285325398399674640645"
+ "566475947058303746531133735308766583802401453804232106737787"
+ "768035926272312574958173945816077962772826443125107145322971"
+ "087220172175473177449006473180221085709470643042801004189714"
+ "505520073568915195232936144169440163547568663500508335014169"
+ "425050712038101167190534305435310279534374364467455668392421"
+ "298604104431988622194699721632249712583483143417550152131186"
+ "288827131347662976240916448058011869761525369135147129192405"
+ "037216807405860168320999468074663117771890506566769628495813"
+ "837909047220874786467663205170561835819702362482274133227483"
+ "041342457179876653773960112367066273208176545656826800069574"
+ "547599816180234764485446735080683694920665668954370505715843"
+ "455110709594838989387382250502925336743830916124954071268053"
+ "817964873658921319164268375226716232666274830656557657055342"
+ "393552148933959057023293404027940528842591460490646295820755"
+ "765633076707491896621769767253619370462005760078938144396953"
+ "018925287611875441613896820035092167912718365454954166761481"
+ "511451950826683236776211829914518353242818636196417736206010"
+ "145109509967467266157037719712666871515644277723594273405669"
+ "093518586548079997818085130346801040781966074621669280188633"
+ "856299289656492439545033914935979634179552686396067914528336"
+ "924678729357419403624798426886422277256625046946795576781709"
+ "298737741510378578072199383561520569978396254537274419476511"
+ "983161908266152660163477408756159700314280122283281906103567"
+ "067156627222418787671312246698375736071215395722993294041012"
+ "744631560602983489316782773611740570974847045870362276861106"
+ "774130949410119612624380274679529647271294627526939490197641"
+ "645383447755544661714281218489998189691140343327976729279891"
+ "077101372792811842951182338559423852563331641533781432796742"
+ "873181364582071661749961126386895359760476172215209100274274"
+ "851619657020388051618654944574445941780637669570374280535432"
+ "399157923698778110534174856844986671232161320063786308144771"
+ "068130888985636449091787794632959555876880672773686838364706"
+ "122084832995722603440165161942472322987408003421165899848443"
+ "566885769845535074102932500939450142098799833145629484519298"
+ "622410092757836842296697186410137365818568152771850732591405"
+ "340248509247875448717161746544246407280913725135059228268131"
+ "453903691495906528862410006254958805237716723952273129715780"
+ "425223305517882562616830806755498203755676925741529569939445"
+ "043490046171854709456730491532189688306135861932534903184518"
+ "717706426178028900836080044604143054210332610482947502104703"
+ "032028463320549525316174330585387581543470878545616097381416"
+ "151451037487775797335749896735101048367502483255117772375025"
+ "269956476872153642623856062175536913321594213515989059505375"
+ "135183515207096576145781316398544325320022366962008554087665"
+ "201050763789833457082359181807492731245904330245198691471329"
+ "319324627030678762142685799400660305214140453863665517807185"
+ "105354694177602424937823924511789133225030926924236498557565"
+ "212794565582753399214908928688568628950225640472058381324292"
+ "866007645368390366981937596341868992912741319342960598330486"
+ "905946276235953206760977215407164729909506118583728562718724"
+ "235732515062300426080741679038098122641980345051854359908213"
+ "563779664847422505775922437272989231878912994048540484468227"
+ "199282393172540734295329890896755037903724644870572648941076"
+ "132423009124870700536763793881894969000042397318202298868940"
+ "530196108237639578098191879486398269734335286831689173606327"
+ "500405178476864790935386838169242131756729797688220656276969"
+ "434749140204830563840068728357383111109865861495106613619153"
+ "421725274090787422508800568671498311491210197298472420373359"
+ "044400631309819996507004167876832936101195902219429743174557"
+ "163362274547892397934880322990633165889175059124060202200452"
+ "648684577182821651588921716304707095995039972827781680978274"
+ "973838841958209215836456212939412000456040621743349981715350"
+ "305133662772937143899882197561295808685181679238411733642697"
+ "748892466944352640514849114619882270112386610376024527101889"
+ "119004382703622803911212700216792471528793241950356942780714"
+ "774957204475130171711488773121937363663487116301055073658645"
+ "980695862570269762957141239436916216723776945522480189876803"
+ "386123827956059851911061129713987960026363403936931196519733"
+ "447116468545744829997003979525368783485129837821983305137448"
+ "031689360764270759437872004895754351479890333865299565515706"
+ "690471030702230767978923298480584997256328135245813726407464"
+ "159230169328539541524724878662873185450510653764301207480799"
+ "488602832618557388369552461881286225098286358672257087829660"
+ "174231705350465091313887538950130611513878400895128618426154"
+ "417299623157313010877679890009181366178705821415173309356192"
+ "686429159835537275875876767919535369607142366878476025895389"
+ "279625854409611312402187942369446302119309705461187450803468"
+ "606366203101933821675974655441744883993796837164178911391575"
+ "751463591650231265941242686108002052587760190005508737394014"
+ "453031299745602214380618917954427803281262300931789525045703"
+ "809571995929933387196864877982754748535701000330924817431298"
+ "365273697561943437891318220691072831562717726798635382168915"
+ "187137325209768346284183473712613689334546294053718697897526"
+ "843398053681374508250012035211936425982389543291022583173280"
+ "985811169783438836113209408147936547458073361625570571955232"
+ "746103236016857123149307991441916732438322836596693687161268"
+ "151183603534413030099360835441935243365729307681545065674775"
+ "655582111435085683962037818795920337874290127531069511296530"
+ "746308404963763022896682861683252995925040540038039172626001"
+ "958340013361801588367655990575379797454237110701588716509764"
+ "759243657077584013289594787913434812509790293636440469725564"
+ "222946985585616708175959944099853232059130350099233608207347"
+ "955460820122006976717445739825352919058005528371183277021250"
+ "186916447745609162301667393077050176560656798672598371789181"
+ "232542195795945358691713761483976100058707499929103557275695"
+ "937295677892604799308353051124627278706035295473126217205599"
+ "530746756205492173148619619059839609108464715691924592576481"
+ "382126740168148453274964955074129767533813576349605298268179"
+ "068244338581354855186516322703199278802275718580352103754433"
+ "240982354636196477238624205575823556321375833700666021556412"
+ "182358152808745703724362178773168996492870519432472065091133"
+ "11767578124e-4966",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-16496),
+ TEST ("3.2375875597190125554622194791138232762497846690173405048449"
+ "421945985197700620596855088357456383249701279390707384240598"
+ "382936099431912710233425550359863089915213963553756674672083"
+ "673128192358701197242632527769951957277781260855740340354110"
+ "173441284912381364143945515141786687806740155311932822963199"
+ "131134959539539338316310328556057915323285980341541664226172"
+ "265348802632447238304822896568757017013159021750199744350376"
+ "278243566840330589397015778833566517337174685312047058426075"
+ "688036665697114219175258344917835835984013214761767520398571"
+ "735519302688914468501077605843338555214753050109407568139932"
+ "147308502166696009676987494125921676927574464221699654264839"
+ "192243410627511520570610765229732327315423820550872393685221"
+ "676561948307418196052769717057382723931306989375320957256133"
+ "838073129463951849807075348034900035402513943244599879584009"
+ "391110011261908615236154859382854977144106096407982738165117"
+ "693915685918231984764157652755343417097983676870433731452629"
+ "339981084526616826599425863049784138127555181662391766144738"
+ "159400253422795753041594932607700680306368857466952063923782"
+ "760519487592638820793893796669403574411398166619131986561877"
+ "034635197232626532239192571857518274939275861531537920777299"
+ "133535479548088762634002006634954143608168633852204577195463"
+ "389533233992867620995583241321034602255800668175356808869060"
+ "608582640890741203603916133682748118680676374951545690715916"
+ "241859799379894025137504643469040366684778763795442214328000"
+ "375999444991619403217748350277527106812175542863660436614910"
+ "135938862296156144947361864759321605496309393905421651264941"
+ "669606814994816518612155298709843817262034769175075602668866"
+ "926449523554218142013501373514352370369126244144449924971423"
+ "038024236058971106053649565799145071085840022305247663313482"
+ "714565918140785997808209749619683146844964283106915422726638"
+ "184861327711776708749278315100024436584176080783836115268999"
+ "055336294569042349971163039294272620322160728879610722678506"
+ "182344928526064885227397447578450046944618127903428943538029"
+ "386719288345854473283987116842451647036255801966780244103035"
+ "425445345127067921349083698736056197567752071915587544133815"
+ "717564310032485290205726480489464589999677885266171263493459"
+ "668963623768410922688414177814149693150024191921819721215688"
+ "114324591287371281400636455584825253000890602388603923710921"
+ "026880979879158388608823700222683123228822356907857261909150"
+ "626993825760416437415551396973489279578569909699853422995997"
+ "974315036153120383930698087773157253674975950409660938084071"
+ "173163693891122166282318691732176374528554627905530306369204"
+ "877964658806333996327938827344733821685425961846791581492287"
+ "250044047142934607523718654369478552373072400018635730811749"
+ "291666457582760812726851561001954207941547404866373158231367"
+ "986951247388733285659455982411993350593989550494594498447410"
+ "984783303191128659803467713819821511544998464785455306500918"
+ "241648925913966507036336000231915215026183799886938007038845"
+ "551916478649593272604688927931953165785101738164060543643192"
+ "949066412847647883846835866623820426428526541564774787007791"
+ "235843699657232847114093617412355486871810526396392792853731"
+ "390841657984518997639795008374280777823099107035223998600103"
+ "103211166230289241182380237703814248941627178152962100972452"
+ "217697144954497443279450919433943252592977710901289696002698"
+ "225209041938801190947812141758873162203113090284565687499100"
+ "109623665868340184032428667217835198069330185880779776269137"
+ "742366802202585247113480377505916462865316253065105837519292"
+ "805411191872195967066157363040364443666632564266439033866945"
+ "366496486863801221986778957510023272290593640187551645170603"
+ "215150911733580059874983597994671388176488814794186236946834"
+ "548816837468411497151813344980969677026131105901402313456769"
+ "561412278508799050185582199844418197980544632067644131002512"
+ "557755358307705356209461595354064971347590431926479961905129"
+ "785864961996560707071051177738535042777950247546470241655891"
+ "294428226271478689174637951663865529219133988782700199051475"
+ "108495188941141025360733690471601309904116260484264378352956"
+ "830972782977747351810451586166745640802378131466232692150196"
+ "132319386267589275314909450293562079332893638471814389025392"
+ "970579695249613486078445695214422379148991006996109216699215"
+ "721671648754881325271879493185438097033881789311707997697928"
+ "860866812849648616086569281093053695399558469641977866770538"
+ "476039621947215238679930485285585513808236992918733520331110"
+ "962448142457896209307561142289713638388281085340301520317159"
+ "297224995464365477734040179470355969363384621039467975256670"
+ "339354334892926205316491997244008324897517881293654265688813"
+ "283579663372924392043825371743576754041055802440187836850412"
+ "247984570221893156921757872572872036331343007592090605703195"
+ "088864753777199111760713027328198781654685927174063882187275"
+ "850263521274368447629947228263907797373221137688424821608129"
+ "731003236738630502344377228987961455961818623205503012858619"
+ "800521948637807438081069469400793496307826769301971342062597"
+ "391253779410607511754278887744936774785938056823221738917303"
+ "119592848951788560393540150358649310736020595310015728915288"
+ "289821678102453433273888879288862086153270028346900686360943"
+ "250522514297816412678213672667152836436597491522644579383191"
+ "851483036048273636234050603745735057899230038434384361744893"
+ "838050985090837220507663282503497932038372021626246900935334"
+ "781144388106031405650705176699646299475436084049881780196520"
+ "881623075256119318210664937469946410480660118598143375898298"
+ "965497205621170906772915413181530577151676241283182977713765"
+ "317889730886996471681592298058774155948285325398399674640645"
+ "566475947058303746531133735308766583802401453804232106737787"
+ "768035926272312574958173945816077962772826443125107145322971"
+ "087220172175473177449006473180221085709470643042801004189714"
+ "505520073568915195232936144169440163547568663500508335014169"
+ "425050712038101167190534305435310279534374364467455668392421"
+ "298604104431988622194699721632249712583483143417550152131186"
+ "288827131347662976240916448058011869761525369135147129192405"
+ "037216807405860168320999468074663117771890506566769628495813"
+ "837909047220874786467663205170561835819702362482274133227483"
+ "041342457179876653773960112367066273208176545656826800069574"
+ "547599816180234764485446735080683694920665668954370505715843"
+ "455110709594838989387382250502925336743830916124954071268053"
+ "817964873658921319164268375226716232666274830656557657055342"
+ "393552148933959057023293404027940528842591460490646295820755"
+ "765633076707491896621769767253619370462005760078938144396953"
+ "018925287611875441613896820035092167912718365454954166761481"
+ "511451950826683236776211829914518353242818636196417736206010"
+ "145109509967467266157037719712666871515644277723594273405669"
+ "093518586548079997818085130346801040781966074621669280188633"
+ "856299289656492439545033914935979634179552686396067914528336"
+ "924678729357419403624798426886422277256625046946795576781709"
+ "298737741510378578072199383561520569978396254537274419476511"
+ "983161908266152660163477408756159700314280122283281906103567"
+ "067156627222418787671312246698375736071215395722993294041012"
+ "744631560602983489316782773611740570974847045870362276861106"
+ "774130949410119612624380274679529647271294627526939490197641"
+ "645383447755544661714281218489998189691140343327976729279891"
+ "077101372792811842951182338559423852563331641533781432796742"
+ "873181364582071661749961126386895359760476172215209100274274"
+ "851619657020388051618654944574445941780637669570374280535432"
+ "399157923698778110534174856844986671232161320063786308144771"
+ "068130888985636449091787794632959555876880672773686838364706"
+ "122084832995722603440165161942472322987408003421165899848443"
+ "566885769845535074102932500939450142098799833145629484519298"
+ "622410092757836842296697186410137365818568152771850732591405"
+ "340248509247875448717161746544246407280913725135059228268131"
+ "453903691495906528862410006254958805237716723952273129715780"
+ "425223305517882562616830806755498203755676925741529569939445"
+ "043490046171854709456730491532189688306135861932534903184518"
+ "717706426178028900836080044604143054210332610482947502104703"
+ "032028463320549525316174330585387581543470878545616097381416"
+ "151451037487775797335749896735101048367502483255117772375025"
+ "269956476872153642623856062175536913321594213515989059505375"
+ "135183515207096576145781316398544325320022366962008554087665"
+ "201050763789833457082359181807492731245904330245198691471329"
+ "319324627030678762142685799400660305214140453863665517807185"
+ "105354694177602424937823924511789133225030926924236498557565"
+ "212794565582753399214908928688568628950225640472058381324292"
+ "866007645368390366981937596341868992912741319342960598330486"
+ "905946276235953206760977215407164729909506118583728562718724"
+ "235732515062300426080741679038098122641980345051854359908213"
+ "563779664847422505775922437272989231878912994048540484468227"
+ "199282393172540734295329890896755037903724644870572648941076"
+ "132423009124870700536763793881894969000042397318202298868940"
+ "530196108237639578098191879486398269734335286831689173606327"
+ "500405178476864790935386838169242131756729797688220656276969"
+ "434749140204830563840068728357383111109865861495106613619153"
+ "421725274090787422508800568671498311491210197298472420373359"
+ "044400631309819996507004167876832936101195902219429743174557"
+ "163362274547892397934880322990633165889175059124060202200452"
+ "648684577182821651588921716304707095995039972827781680978274"
+ "973838841958209215836456212939412000456040621743349981715350"
+ "305133662772937143899882197561295808685181679238411733642697"
+ "748892466944352640514849114619882270112386610376024527101889"
+ "119004382703622803911212700216792471528793241950356942780714"
+ "774957204475130171711488773121937363663487116301055073658645"
+ "980695862570269762957141239436916216723776945522480189876803"
+ "386123827956059851911061129713987960026363403936931196519733"
+ "447116468545744829997003979525368783485129837821983305137448"
+ "031689360764270759437872004895754351479890333865299565515706"
+ "690471030702230767978923298480584997256328135245813726407464"
+ "159230169328539541524724878662873185450510653764301207480799"
+ "488602832618557388369552461881286225098286358672257087829660"
+ "174231705350465091313887538950130611513878400895128618426154"
+ "417299623157313010877679890009181366178705821415173309356192"
+ "686429159835537275875876767919535369607142366878476025895389"
+ "279625854409611312402187942369446302119309705461187450803468"
+ "606366203101933821675974655441744883993796837164178911391575"
+ "751463591650231265941242686108002052587760190005508737394014"
+ "453031299745602214380618917954427803281262300931789525045703"
+ "809571995929933387196864877982754748535701000330924817431298"
+ "365273697561943437891318220691072831562717726798635382168915"
+ "187137325209768346284183473712613689334546294053718697897526"
+ "843398053681374508250012035211936425982389543291022583173280"
+ "985811169783438836113209408147936547458073361625570571955232"
+ "746103236016857123149307991441916732438322836596693687161268"
+ "151183603534413030099360835441935243365729307681545065674775"
+ "655582111435085683962037818795920337874290127531069511296530"
+ "746308404963763022896682861683252995925040540038039172626001"
+ "958340013361801588367655990575379797454237110701588716509764"
+ "759243657077584013289594787913434812509790293636440469725564"
+ "222946985585616708175959944099853232059130350099233608207347"
+ "955460820122006976717445739825352919058005528371183277021250"
+ "186916447745609162301667393077050176560656798672598371789181"
+ "232542195795945358691713761483976100058707499929103557275695"
+ "937295677892604799308353051124627278706035295473126217205599"
+ "530746756205492173148619619059839609108464715691924592576481"
+ "382126740168148453274964955074129767533813576349605298268179"
+ "068244338581354855186516322703199278802275718580352103754433"
+ "240982354636196477238624205575823556321375833700666021556412"
+ "182358152808745703724362178773168996492870519432472065091133"
+ "11767578125e-4966",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-16496),
+ TEST ("3.2375875597190125554622194791138232762497846690173405048449"
+ "421945985197700620596855088357456383249701279390707384240598"
+ "382936099431912710233425550359863089915213963553756674672083"
+ "673128192358701197242632527769951957277781260855740340354110"
+ "173441284912381364143945515141786687806740155311932822963199"
+ "131134959539539338316310328556057915323285980341541664226172"
+ "265348802632447238304822896568757017013159021750199744350376"
+ "278243566840330589397015778833566517337174685312047058426075"
+ "688036665697114219175258344917835835984013214761767520398571"
+ "735519302688914468501077605843338555214753050109407568139932"
+ "147308502166696009676987494125921676927574464221699654264839"
+ "192243410627511520570610765229732327315423820550872393685221"
+ "676561948307418196052769717057382723931306989375320957256133"
+ "838073129463951849807075348034900035402513943244599879584009"
+ "391110011261908615236154859382854977144106096407982738165117"
+ "693915685918231984764157652755343417097983676870433731452629"
+ "339981084526616826599425863049784138127555181662391766144738"
+ "159400253422795753041594932607700680306368857466952063923782"
+ "760519487592638820793893796669403574411398166619131986561877"
+ "034635197232626532239192571857518274939275861531537920777299"
+ "133535479548088762634002006634954143608168633852204577195463"
+ "389533233992867620995583241321034602255800668175356808869060"
+ "608582640890741203603916133682748118680676374951545690715916"
+ "241859799379894025137504643469040366684778763795442214328000"
+ "375999444991619403217748350277527106812175542863660436614910"
+ "135938862296156144947361864759321605496309393905421651264941"
+ "669606814994816518612155298709843817262034769175075602668866"
+ "926449523554218142013501373514352370369126244144449924971423"
+ "038024236058971106053649565799145071085840022305247663313482"
+ "714565918140785997808209749619683146844964283106915422726638"
+ "184861327711776708749278315100024436584176080783836115268999"
+ "055336294569042349971163039294272620322160728879610722678506"
+ "182344928526064885227397447578450046944618127903428943538029"
+ "386719288345854473283987116842451647036255801966780244103035"
+ "425445345127067921349083698736056197567752071915587544133815"
+ "717564310032485290205726480489464589999677885266171263493459"
+ "668963623768410922688414177814149693150024191921819721215688"
+ "114324591287371281400636455584825253000890602388603923710921"
+ "026880979879158388608823700222683123228822356907857261909150"
+ "626993825760416437415551396973489279578569909699853422995997"
+ "974315036153120383930698087773157253674975950409660938084071"
+ "173163693891122166282318691732176374528554627905530306369204"
+ "877964658806333996327938827344733821685425961846791581492287"
+ "250044047142934607523718654369478552373072400018635730811749"
+ "291666457582760812726851561001954207941547404866373158231367"
+ "986951247388733285659455982411993350593989550494594498447410"
+ "984783303191128659803467713819821511544998464785455306500918"
+ "241648925913966507036336000231915215026183799886938007038845"
+ "551916478649593272604688927931953165785101738164060543643192"
+ "949066412847647883846835866623820426428526541564774787007791"
+ "235843699657232847114093617412355486871810526396392792853731"
+ "390841657984518997639795008374280777823099107035223998600103"
+ "103211166230289241182380237703814248941627178152962100972452"
+ "217697144954497443279450919433943252592977710901289696002698"
+ "225209041938801190947812141758873162203113090284565687499100"
+ "109623665868340184032428667217835198069330185880779776269137"
+ "742366802202585247113480377505916462865316253065105837519292"
+ "805411191872195967066157363040364443666632564266439033866945"
+ "366496486863801221986778957510023272290593640187551645170603"
+ "215150911733580059874983597994671388176488814794186236946834"
+ "548816837468411497151813344980969677026131105901402313456769"
+ "561412278508799050185582199844418197980544632067644131002512"
+ "557755358307705356209461595354064971347590431926479961905129"
+ "785864961996560707071051177738535042777950247546470241655891"
+ "294428226271478689174637951663865529219133988782700199051475"
+ "108495188941141025360733690471601309904116260484264378352956"
+ "830972782977747351810451586166745640802378131466232692150196"
+ "132319386267589275314909450293562079332893638471814389025392"
+ "970579695249613486078445695214422379148991006996109216699215"
+ "721671648754881325271879493185438097033881789311707997697928"
+ "860866812849648616086569281093053695399558469641977866770538"
+ "476039621947215238679930485285585513808236992918733520331110"
+ "962448142457896209307561142289713638388281085340301520317159"
+ "297224995464365477734040179470355969363384621039467975256670"
+ "339354334892926205316491997244008324897517881293654265688813"
+ "283579663372924392043825371743576754041055802440187836850412"
+ "247984570221893156921757872572872036331343007592090605703195"
+ "088864753777199111760713027328198781654685927174063882187275"
+ "850263521274368447629947228263907797373221137688424821608129"
+ "731003236738630502344377228987961455961818623205503012858619"
+ "800521948637807438081069469400793496307826769301971342062597"
+ "391253779410607511754278887744936774785938056823221738917303"
+ "119592848951788560393540150358649310736020595310015728915288"
+ "289821678102453433273888879288862086153270028346900686360943"
+ "250522514297816412678213672667152836436597491522644579383191"
+ "851483036048273636234050603745735057899230038434384361744893"
+ "838050985090837220507663282503497932038372021626246900935334"
+ "781144388106031405650705176699646299475436084049881780196520"
+ "881623075256119318210664937469946410480660118598143375898298"
+ "965497205621170906772915413181530577151676241283182977713765"
+ "317889730886996471681592298058774155948285325398399674640645"
+ "566475947058303746531133735308766583802401453804232106737787"
+ "768035926272312574958173945816077962772826443125107145322971"
+ "087220172175473177449006473180221085709470643042801004189714"
+ "505520073568915195232936144169440163547568663500508335014169"
+ "425050712038101167190534305435310279534374364467455668392421"
+ "298604104431988622194699721632249712583483143417550152131186"
+ "288827131347662976240916448058011869761525369135147129192405"
+ "037216807405860168320999468074663117771890506566769628495813"
+ "837909047220874786467663205170561835819702362482274133227483"
+ "041342457179876653773960112367066273208176545656826800069574"
+ "547599816180234764485446735080683694920665668954370505715843"
+ "455110709594838989387382250502925336743830916124954071268053"
+ "817964873658921319164268375226716232666274830656557657055342"
+ "393552148933959057023293404027940528842591460490646295820755"
+ "765633076707491896621769767253619370462005760078938144396953"
+ "018925287611875441613896820035092167912718365454954166761481"
+ "511451950826683236776211829914518353242818636196417736206010"
+ "145109509967467266157037719712666871515644277723594273405669"
+ "093518586548079997818085130346801040781966074621669280188633"
+ "856299289656492439545033914935979634179552686396067914528336"
+ "924678729357419403624798426886422277256625046946795576781709"
+ "298737741510378578072199383561520569978396254537274419476511"
+ "983161908266152660163477408756159700314280122283281906103567"
+ "067156627222418787671312246698375736071215395722993294041012"
+ "744631560602983489316782773611740570974847045870362276861106"
+ "774130949410119612624380274679529647271294627526939490197641"
+ "645383447755544661714281218489998189691140343327976729279891"
+ "077101372792811842951182338559423852563331641533781432796742"
+ "873181364582071661749961126386895359760476172215209100274274"
+ "851619657020388051618654944574445941780637669570374280535432"
+ "399157923698778110534174856844986671232161320063786308144771"
+ "068130888985636449091787794632959555876880672773686838364706"
+ "122084832995722603440165161942472322987408003421165899848443"
+ "566885769845535074102932500939450142098799833145629484519298"
+ "622410092757836842296697186410137365818568152771850732591405"
+ "340248509247875448717161746544246407280913725135059228268131"
+ "453903691495906528862410006254958805237716723952273129715780"
+ "425223305517882562616830806755498203755676925741529569939445"
+ "043490046171854709456730491532189688306135861932534903184518"
+ "717706426178028900836080044604143054210332610482947502104703"
+ "032028463320549525316174330585387581543470878545616097381416"
+ "151451037487775797335749896735101048367502483255117772375025"
+ "269956476872153642623856062175536913321594213515989059505375"
+ "135183515207096576145781316398544325320022366962008554087665"
+ "201050763789833457082359181807492731245904330245198691471329"
+ "319324627030678762142685799400660305214140453863665517807185"
+ "105354694177602424937823924511789133225030926924236498557565"
+ "212794565582753399214908928688568628950225640472058381324292"
+ "866007645368390366981937596341868992912741319342960598330486"
+ "905946276235953206760977215407164729909506118583728562718724"
+ "235732515062300426080741679038098122641980345051854359908213"
+ "563779664847422505775922437272989231878912994048540484468227"
+ "199282393172540734295329890896755037903724644870572648941076"
+ "132423009124870700536763793881894969000042397318202298868940"
+ "530196108237639578098191879486398269734335286831689173606327"
+ "500405178476864790935386838169242131756729797688220656276969"
+ "434749140204830563840068728357383111109865861495106613619153"
+ "421725274090787422508800568671498311491210197298472420373359"
+ "044400631309819996507004167876832936101195902219429743174557"
+ "163362274547892397934880322990633165889175059124060202200452"
+ "648684577182821651588921716304707095995039972827781680978274"
+ "973838841958209215836456212939412000456040621743349981715350"
+ "305133662772937143899882197561295808685181679238411733642697"
+ "748892466944352640514849114619882270112386610376024527101889"
+ "119004382703622803911212700216792471528793241950356942780714"
+ "774957204475130171711488773121937363663487116301055073658645"
+ "980695862570269762957141239436916216723776945522480189876803"
+ "386123827956059851911061129713987960026363403936931196519733"
+ "447116468545744829997003979525368783485129837821983305137448"
+ "031689360764270759437872004895754351479890333865299565515706"
+ "690471030702230767978923298480584997256328135245813726407464"
+ "159230169328539541524724878662873185450510653764301207480799"
+ "488602832618557388369552461881286225098286358672257087829660"
+ "174231705350465091313887538950130611513878400895128618426154"
+ "417299623157313010877679890009181366178705821415173309356192"
+ "686429159835537275875876767919535369607142366878476025895389"
+ "279625854409611312402187942369446302119309705461187450803468"
+ "606366203101933821675974655441744883993796837164178911391575"
+ "751463591650231265941242686108002052587760190005508737394014"
+ "453031299745602214380618917954427803281262300931789525045703"
+ "809571995929933387196864877982754748535701000330924817431298"
+ "365273697561943437891318220691072831562717726798635382168915"
+ "187137325209768346284183473712613689334546294053718697897526"
+ "843398053681374508250012035211936425982389543291022583173280"
+ "985811169783438836113209408147936547458073361625570571955232"
+ "746103236016857123149307991441916732438322836596693687161268"
+ "151183603534413030099360835441935243365729307681545065674775"
+ "655582111435085683962037818795920337874290127531069511296530"
+ "746308404963763022896682861683252995925040540038039172626001"
+ "958340013361801588367655990575379797454237110701588716509764"
+ "759243657077584013289594787913434812509790293636440469725564"
+ "222946985585616708175959944099853232059130350099233608207347"
+ "955460820122006976717445739825352919058005528371183277021250"
+ "186916447745609162301667393077050176560656798672598371789181"
+ "232542195795945358691713761483976100058707499929103557275695"
+ "937295677892604799308353051124627278706035295473126217205599"
+ "530746756205492173148619619059839609108464715691924592576481"
+ "382126740168148453274964955074129767533813576349605298268179"
+ "068244338581354855186516322703199278802275718580352103754433"
+ "240982354636196477238624205575823556321375833700666021556412"
+ "182358152808745703724362178773168996492870519432472065091133"
+ "11767578126e-4966",
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-152,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x8p-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-16448,
+ false,
+ 0x0p+0,
+ 0x0p+0,
+ 0x0p+0,
+ 0x4p-1076,
+ false,
+ 0x0p+0,
+ 0x4p-16496,
+ 0x0p+0,
+ 0x4p-16496),
+ TEST ("-3.237587559719012555462219479113823276249784669017340504844"
+ "942194598519770062059685508835745638324970127939070738424059"
+ "838293609943191271023342555035986308991521396355375667467208"
+ "367312819235870119724263252776995195727778126085574034035411"
+ "017344128491238136414394551514178668780674015531193282296319"
+ "913113495953953933831631032855605791532328598034154166422617"
+ "226534880263244723830482289656875701701315902175019974435037"
+ "627824356684033058939701577883356651733717468531204705842607"
+ "568803666569711421917525834491783583598401321476176752039857"
+ "173551930268891446850107760584333855521475305010940756813993"
+ "214730850216669600967698749412592167692757446422169965426483"
+ "919224341062751152057061076522973232731542382055087239368522"
+ "167656194830741819605276971705738272393130698937532095725613"
+ "383807312946395184980707534803490003540251394324459987958400"
+ "939111001126190861523615485938285497714410609640798273816511"
+ "769391568591823198476415765275534341709798367687043373145262"
+ "933998108452661682659942586304978413812755518166239176614473"
+ "815940025342279575304159493260770068030636885746695206392378"
+ "276051948759263882079389379666940357441139816661913198656187"
+ "703463519723262653223919257185751827493927586153153792077729"
+ "913353547954808876263400200663495414360816863385220457719546"
+ "338953323399286762099558324132103460225580066817535680886906"
+ "060858264089074120360391613368274811868067637495154569071591"
+ "624185979937989402513750464346904036668477876379544221432800"
+ "037599944499161940321774835027752710681217554286366043661491"
+ "013593886229615614494736186475932160549630939390542165126494"
+ "166960681499481651861215529870984381726203476917507560266886"
+ "692644952355421814201350137351435237036912624414444992497142"
+ "303802423605897110605364956579914507108584002230524766331348"
+ "271456591814078599780820974961968314684496428310691542272663"
+ "818486132771177670874927831510002443658417608078383611526899"
+ "905533629456904234997116303929427262032216072887961072267850"
+ "618234492852606488522739744757845004694461812790342894353802"
+ "938671928834585447328398711684245164703625580196678024410303"
+ "542544534512706792134908369873605619756775207191558754413381"
+ "571756431003248529020572648048946458999967788526617126349345"
+ "966896362376841092268841417781414969315002419192181972121568"
+ "811432459128737128140063645558482525300089060238860392371092"
+ "102688097987915838860882370022268312322882235690785726190915"
+ "062699382576041643741555139697348927957856990969985342299599"
+ "797431503615312038393069808777315725367497595040966093808407"
+ "117316369389112216628231869173217637452855462790553030636920"
+ "487796465880633399632793882734473382168542596184679158149228"
+ "725004404714293460752371865436947855237307240001863573081174"
+ "929166645758276081272685156100195420794154740486637315823136"
+ "798695124738873328565945598241199335059398955049459449844741"
+ "098478330319112865980346771381982151154499846478545530650091"
+ "824164892591396650703633600023191521502618379988693800703884"
+ "555191647864959327260468892793195316578510173816406054364319"
+ "294906641284764788384683586662382042642852654156477478700779"
+ "123584369965723284711409361741235548687181052639639279285373"
+ "139084165798451899763979500837428077782309910703522399860010"
+ "310321116623028924118238023770381424894162717815296210097245"
+ "221769714495449744327945091943394325259297771090128969600269"
+ "822520904193880119094781214175887316220311309028456568749910"
+ "010962366586834018403242866721783519806933018588077977626913"
+ "774236680220258524711348037750591646286531625306510583751929"
+ "280541119187219596706615736304036444366663256426643903386694"
+ "536649648686380122198677895751002327229059364018755164517060"
+ "321515091173358005987498359799467138817648881479418623694683"
+ "454881683746841149715181334498096967702613110590140231345676"
+ "956141227850879905018558219984441819798054463206764413100251"
+ "255775535830770535620946159535406497134759043192647996190512"
+ "978586496199656070707105117773853504277795024754647024165589"
+ "129442822627147868917463795166386552921913398878270019905147"
+ "510849518894114102536073369047160130990411626048426437835295"
+ "683097278297774735181045158616674564080237813146623269215019"
+ "613231938626758927531490945029356207933289363847181438902539"
+ "297057969524961348607844569521442237914899100699610921669921"
+ "572167164875488132527187949318543809703388178931170799769792"
+ "886086681284964861608656928109305369539955846964197786677053"
+ "847603962194721523867993048528558551380823699291873352033111"
+ "096244814245789620930756114228971363838828108534030152031715"
+ "929722499546436547773404017947035596936338462103946797525667"
+ "033935433489292620531649199724400832489751788129365426568881"
+ "328357966337292439204382537174357675404105580244018783685041"
+ "224798457022189315692175787257287203633134300759209060570319"
+ "508886475377719911176071302732819878165468592717406388218727"
+ "585026352127436844762994722826390779737322113768842482160812"
+ "973100323673863050234437722898796145596181862320550301285861"
+ "980052194863780743808106946940079349630782676930197134206259"
+ "739125377941060751175427888774493677478593805682322173891730"
+ "311959284895178856039354015035864931073602059531001572891528"
+ "828982167810245343327388887928886208615327002834690068636094"
+ "325052251429781641267821367266715283643659749152264457938319"
+ "185148303604827363623405060374573505789923003843438436174489"
+ "383805098509083722050766328250349793203837202162624690093533"
+ "478114438810603140565070517669964629947543608404988178019652"
+ "088162307525611931821066493746994641048066011859814337589829"
+ "896549720562117090677291541318153057715167624128318297771376"
+ "531788973088699647168159229805877415594828532539839967464064"
+ "556647594705830374653113373530876658380240145380423210673778"
+ "776803592627231257495817394581607796277282644312510714532297"
+ "108722017217547317744900647318022108570947064304280100418971"
+ "450552007356891519523293614416944016354756866350050833501416"
+ "942505071203810116719053430543531027953437436446745566839242"
+ "129860410443198862219469972163224971258348314341755015213118"
+ "628882713134766297624091644805801186976152536913514712919240"
+ "503721680740586016832099946807466311777189050656676962849581"
+ "383790904722087478646766320517056183581970236248227413322748"
+ "304134245717987665377396011236706627320817654565682680006957"
+ "454759981618023476448544673508068369492066566895437050571584"
+ "345511070959483898938738225050292533674383091612495407126805"
+ "381796487365892131916426837522671623266627483065655765705534"
+ "239355214893395905702329340402794052884259146049064629582075"
+ "576563307670749189662176976725361937046200576007893814439695"
+ "301892528761187544161389682003509216791271836545495416676148"
+ "151145195082668323677621182991451835324281863619641773620601"
+ "014510950996746726615703771971266687151564427772359427340566"
+ "909351858654807999781808513034680104078196607462166928018863"
+ "385629928965649243954503391493597963417955268639606791452833"
+ "692467872935741940362479842688642227725662504694679557678170"
+ "929873774151037857807219938356152056997839625453727441947651"
+ "198316190826615266016347740875615970031428012228328190610356"
+ "706715662722241878767131224669837573607121539572299329404101"
+ "274463156060298348931678277361174057097484704587036227686110"
+ "677413094941011961262438027467952964727129462752693949019764"
+ "164538344775554466171428121848999818969114034332797672927989"
+ "107710137279281184295118233855942385256333164153378143279674"
+ "287318136458207166174996112638689535976047617221520910027427"
+ "485161965702038805161865494457444594178063766957037428053543"
+ "239915792369877811053417485684498667123216132006378630814477"
+ "106813088898563644909178779463295955587688067277368683836470"
+ "612208483299572260344016516194247232298740800342116589984844"
+ "356688576984553507410293250093945014209879983314562948451929"
+ "862241009275783684229669718641013736581856815277185073259140"
+ "534024850924787544871716174654424640728091372513505922826813"
+ "145390369149590652886241000625495880523771672395227312971578"
+ "042522330551788256261683080675549820375567692574152956993944"
+ "504349004617185470945673049153218968830613586193253490318451"
+ "871770642617802890083608004460414305421033261048294750210470"
+ "303202846332054952531617433058538758154347087854561609738141"
+ "615145103748777579733574989673510104836750248325511777237502"
+ "526995647687215364262385606217553691332159421351598905950537"
+ "513518351520709657614578131639854432532002236696200855408766"
+ "520105076378983345708235918180749273124590433024519869147132"
+ "931932462703067876214268579940066030521414045386366551780718"
+ "510535469417760242493782392451178913322503092692423649855756"
+ "521279456558275339921490892868856862895022564047205838132429"
+ "286600764536839036698193759634186899291274131934296059833048"
+ "690594627623595320676097721540716472990950611858372856271872"
+ "423573251506230042608074167903809812264198034505185435990821"
+ "356377966484742250577592243727298923187891299404854048446822"
+ "719928239317254073429532989089675503790372464487057264894107"
+ "613242300912487070053676379388189496900004239731820229886894"
+ "053019610823763957809819187948639826973433528683168917360632"
+ "750040517847686479093538683816924213175672979768822065627696"
+ "943474914020483056384006872835738311110986586149510661361915"
+ "342172527409078742250880056867149831149121019729847242037335"
+ "904440063130981999650700416787683293610119590221942974317455"
+ "716336227454789239793488032299063316588917505912406020220045"
+ "264868457718282165158892171630470709599503997282778168097827"
+ "497383884195820921583645621293941200045604062174334998171535"
+ "030513366277293714389988219756129580868518167923841173364269"
+ "774889246694435264051484911461988227011238661037602452710188"
+ "911900438270362280391121270021679247152879324195035694278071"
+ "477495720447513017171148877312193736366348711630105507365864"
+ "598069586257026976295714123943691621672377694552248018987680"
+ "338612382795605985191106112971398796002636340393693119651973"
+ "344711646854574482999700397952536878348512983782198330513744"
+ "803168936076427075943787200489575435147989033386529956551570"
+ "669047103070223076797892329848058499725632813524581372640746"
+ "415923016932853954152472487866287318545051065376430120748079"
+ "948860283261855738836955246188128622509828635867225708782966"
+ "017423170535046509131388753895013061151387840089512861842615"
+ "441729962315731301087767989000918136617870582141517330935619"
+ "268642915983553727587587676791953536960714236687847602589538"
+ "927962585440961131240218794236944630211930970546118745080346"
+ "860636620310193382167597465544174488399379683716417891139157"
+ "575146359165023126594124268610800205258776019000550873739401"
+ "445303129974560221438061891795442780328126230093178952504570"
+ "380957199592993338719686487798275474853570100033092481743129"
+ "836527369756194343789131822069107283156271772679863538216891"
+ "518713732520976834628418347371261368933454629405371869789752"
+ "684339805368137450825001203521193642598238954329102258317328"
+ "098581116978343883611320940814793654745807336162557057195523"
+ "274610323601685712314930799144191673243832283659669368716126"
+ "815118360353441303009936083544193524336572930768154506567477"
+ "565558211143508568396203781879592033787429012753106951129653"
+ "074630840496376302289668286168325299592504054003803917262600"
+ "195834001336180158836765599057537979745423711070158871650976"
+ "475924365707758401328959478791343481250979029363644046972556"
+ "422294698558561670817595994409985323205913035009923360820734"
+ "795546082012200697671744573982535291905800552837118327702125"
+ "018691644774560916230166739307705017656065679867259837178918"
+ "123254219579594535869171376148397610005870749992910355727569"
+ "593729567789260479930835305112462727870603529547312621720559"
+ "953074675620549217314861961905983960910846471569192459257648"
+ "138212674016814845327496495507412976753381357634960529826817"
+ "906824433858135485518651632270319927880227571858035210375443"
+ "324098235463619647723862420557582355632137583370066602155641"
+ "218235815280874570372436217877316899649287051943247206509113"
+ "311767578124e-4966",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x8p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-16496,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0),
+ TEST ("-3.237587559719012555462219479113823276249784669017340504844"
+ "942194598519770062059685508835745638324970127939070738424059"
+ "838293609943191271023342555035986308991521396355375667467208"
+ "367312819235870119724263252776995195727778126085574034035411"
+ "017344128491238136414394551514178668780674015531193282296319"
+ "913113495953953933831631032855605791532328598034154166422617"
+ "226534880263244723830482289656875701701315902175019974435037"
+ "627824356684033058939701577883356651733717468531204705842607"
+ "568803666569711421917525834491783583598401321476176752039857"
+ "173551930268891446850107760584333855521475305010940756813993"
+ "214730850216669600967698749412592167692757446422169965426483"
+ "919224341062751152057061076522973232731542382055087239368522"
+ "167656194830741819605276971705738272393130698937532095725613"
+ "383807312946395184980707534803490003540251394324459987958400"
+ "939111001126190861523615485938285497714410609640798273816511"
+ "769391568591823198476415765275534341709798367687043373145262"
+ "933998108452661682659942586304978413812755518166239176614473"
+ "815940025342279575304159493260770068030636885746695206392378"
+ "276051948759263882079389379666940357441139816661913198656187"
+ "703463519723262653223919257185751827493927586153153792077729"
+ "913353547954808876263400200663495414360816863385220457719546"
+ "338953323399286762099558324132103460225580066817535680886906"
+ "060858264089074120360391613368274811868067637495154569071591"
+ "624185979937989402513750464346904036668477876379544221432800"
+ "037599944499161940321774835027752710681217554286366043661491"
+ "013593886229615614494736186475932160549630939390542165126494"
+ "166960681499481651861215529870984381726203476917507560266886"
+ "692644952355421814201350137351435237036912624414444992497142"
+ "303802423605897110605364956579914507108584002230524766331348"
+ "271456591814078599780820974961968314684496428310691542272663"
+ "818486132771177670874927831510002443658417608078383611526899"
+ "905533629456904234997116303929427262032216072887961072267850"
+ "618234492852606488522739744757845004694461812790342894353802"
+ "938671928834585447328398711684245164703625580196678024410303"
+ "542544534512706792134908369873605619756775207191558754413381"
+ "571756431003248529020572648048946458999967788526617126349345"
+ "966896362376841092268841417781414969315002419192181972121568"
+ "811432459128737128140063645558482525300089060238860392371092"
+ "102688097987915838860882370022268312322882235690785726190915"
+ "062699382576041643741555139697348927957856990969985342299599"
+ "797431503615312038393069808777315725367497595040966093808407"
+ "117316369389112216628231869173217637452855462790553030636920"
+ "487796465880633399632793882734473382168542596184679158149228"
+ "725004404714293460752371865436947855237307240001863573081174"
+ "929166645758276081272685156100195420794154740486637315823136"
+ "798695124738873328565945598241199335059398955049459449844741"
+ "098478330319112865980346771381982151154499846478545530650091"
+ "824164892591396650703633600023191521502618379988693800703884"
+ "555191647864959327260468892793195316578510173816406054364319"
+ "294906641284764788384683586662382042642852654156477478700779"
+ "123584369965723284711409361741235548687181052639639279285373"
+ "139084165798451899763979500837428077782309910703522399860010"
+ "310321116623028924118238023770381424894162717815296210097245"
+ "221769714495449744327945091943394325259297771090128969600269"
+ "822520904193880119094781214175887316220311309028456568749910"
+ "010962366586834018403242866721783519806933018588077977626913"
+ "774236680220258524711348037750591646286531625306510583751929"
+ "280541119187219596706615736304036444366663256426643903386694"
+ "536649648686380122198677895751002327229059364018755164517060"
+ "321515091173358005987498359799467138817648881479418623694683"
+ "454881683746841149715181334498096967702613110590140231345676"
+ "956141227850879905018558219984441819798054463206764413100251"
+ "255775535830770535620946159535406497134759043192647996190512"
+ "978586496199656070707105117773853504277795024754647024165589"
+ "129442822627147868917463795166386552921913398878270019905147"
+ "510849518894114102536073369047160130990411626048426437835295"
+ "683097278297774735181045158616674564080237813146623269215019"
+ "613231938626758927531490945029356207933289363847181438902539"
+ "297057969524961348607844569521442237914899100699610921669921"
+ "572167164875488132527187949318543809703388178931170799769792"
+ "886086681284964861608656928109305369539955846964197786677053"
+ "847603962194721523867993048528558551380823699291873352033111"
+ "096244814245789620930756114228971363838828108534030152031715"
+ "929722499546436547773404017947035596936338462103946797525667"
+ "033935433489292620531649199724400832489751788129365426568881"
+ "328357966337292439204382537174357675404105580244018783685041"
+ "224798457022189315692175787257287203633134300759209060570319"
+ "508886475377719911176071302732819878165468592717406388218727"
+ "585026352127436844762994722826390779737322113768842482160812"
+ "973100323673863050234437722898796145596181862320550301285861"
+ "980052194863780743808106946940079349630782676930197134206259"
+ "739125377941060751175427888774493677478593805682322173891730"
+ "311959284895178856039354015035864931073602059531001572891528"
+ "828982167810245343327388887928886208615327002834690068636094"
+ "325052251429781641267821367266715283643659749152264457938319"
+ "185148303604827363623405060374573505789923003843438436174489"
+ "383805098509083722050766328250349793203837202162624690093533"
+ "478114438810603140565070517669964629947543608404988178019652"
+ "088162307525611931821066493746994641048066011859814337589829"
+ "896549720562117090677291541318153057715167624128318297771376"
+ "531788973088699647168159229805877415594828532539839967464064"
+ "556647594705830374653113373530876658380240145380423210673778"
+ "776803592627231257495817394581607796277282644312510714532297"
+ "108722017217547317744900647318022108570947064304280100418971"
+ "450552007356891519523293614416944016354756866350050833501416"
+ "942505071203810116719053430543531027953437436446745566839242"
+ "129860410443198862219469972163224971258348314341755015213118"
+ "628882713134766297624091644805801186976152536913514712919240"
+ "503721680740586016832099946807466311777189050656676962849581"
+ "383790904722087478646766320517056183581970236248227413322748"
+ "304134245717987665377396011236706627320817654565682680006957"
+ "454759981618023476448544673508068369492066566895437050571584"
+ "345511070959483898938738225050292533674383091612495407126805"
+ "381796487365892131916426837522671623266627483065655765705534"
+ "239355214893395905702329340402794052884259146049064629582075"
+ "576563307670749189662176976725361937046200576007893814439695"
+ "301892528761187544161389682003509216791271836545495416676148"
+ "151145195082668323677621182991451835324281863619641773620601"
+ "014510950996746726615703771971266687151564427772359427340566"
+ "909351858654807999781808513034680104078196607462166928018863"
+ "385629928965649243954503391493597963417955268639606791452833"
+ "692467872935741940362479842688642227725662504694679557678170"
+ "929873774151037857807219938356152056997839625453727441947651"
+ "198316190826615266016347740875615970031428012228328190610356"
+ "706715662722241878767131224669837573607121539572299329404101"
+ "274463156060298348931678277361174057097484704587036227686110"
+ "677413094941011961262438027467952964727129462752693949019764"
+ "164538344775554466171428121848999818969114034332797672927989"
+ "107710137279281184295118233855942385256333164153378143279674"
+ "287318136458207166174996112638689535976047617221520910027427"
+ "485161965702038805161865494457444594178063766957037428053543"
+ "239915792369877811053417485684498667123216132006378630814477"
+ "106813088898563644909178779463295955587688067277368683836470"
+ "612208483299572260344016516194247232298740800342116589984844"
+ "356688576984553507410293250093945014209879983314562948451929"
+ "862241009275783684229669718641013736581856815277185073259140"
+ "534024850924787544871716174654424640728091372513505922826813"
+ "145390369149590652886241000625495880523771672395227312971578"
+ "042522330551788256261683080675549820375567692574152956993944"
+ "504349004617185470945673049153218968830613586193253490318451"
+ "871770642617802890083608004460414305421033261048294750210470"
+ "303202846332054952531617433058538758154347087854561609738141"
+ "615145103748777579733574989673510104836750248325511777237502"
+ "526995647687215364262385606217553691332159421351598905950537"
+ "513518351520709657614578131639854432532002236696200855408766"
+ "520105076378983345708235918180749273124590433024519869147132"
+ "931932462703067876214268579940066030521414045386366551780718"
+ "510535469417760242493782392451178913322503092692423649855756"
+ "521279456558275339921490892868856862895022564047205838132429"
+ "286600764536839036698193759634186899291274131934296059833048"
+ "690594627623595320676097721540716472990950611858372856271872"
+ "423573251506230042608074167903809812264198034505185435990821"
+ "356377966484742250577592243727298923187891299404854048446822"
+ "719928239317254073429532989089675503790372464487057264894107"
+ "613242300912487070053676379388189496900004239731820229886894"
+ "053019610823763957809819187948639826973433528683168917360632"
+ "750040517847686479093538683816924213175672979768822065627696"
+ "943474914020483056384006872835738311110986586149510661361915"
+ "342172527409078742250880056867149831149121019729847242037335"
+ "904440063130981999650700416787683293610119590221942974317455"
+ "716336227454789239793488032299063316588917505912406020220045"
+ "264868457718282165158892171630470709599503997282778168097827"
+ "497383884195820921583645621293941200045604062174334998171535"
+ "030513366277293714389988219756129580868518167923841173364269"
+ "774889246694435264051484911461988227011238661037602452710188"
+ "911900438270362280391121270021679247152879324195035694278071"
+ "477495720447513017171148877312193736366348711630105507365864"
+ "598069586257026976295714123943691621672377694552248018987680"
+ "338612382795605985191106112971398796002636340393693119651973"
+ "344711646854574482999700397952536878348512983782198330513744"
+ "803168936076427075943787200489575435147989033386529956551570"
+ "669047103070223076797892329848058499725632813524581372640746"
+ "415923016932853954152472487866287318545051065376430120748079"
+ "948860283261855738836955246188128622509828635867225708782966"
+ "017423170535046509131388753895013061151387840089512861842615"
+ "441729962315731301087767989000918136617870582141517330935619"
+ "268642915983553727587587676791953536960714236687847602589538"
+ "927962585440961131240218794236944630211930970546118745080346"
+ "860636620310193382167597465544174488399379683716417891139157"
+ "575146359165023126594124268610800205258776019000550873739401"
+ "445303129974560221438061891795442780328126230093178952504570"
+ "380957199592993338719686487798275474853570100033092481743129"
+ "836527369756194343789131822069107283156271772679863538216891"
+ "518713732520976834628418347371261368933454629405371869789752"
+ "684339805368137450825001203521193642598238954329102258317328"
+ "098581116978343883611320940814793654745807336162557057195523"
+ "274610323601685712314930799144191673243832283659669368716126"
+ "815118360353441303009936083544193524336572930768154506567477"
+ "565558211143508568396203781879592033787429012753106951129653"
+ "074630840496376302289668286168325299592504054003803917262600"
+ "195834001336180158836765599057537979745423711070158871650976"
+ "475924365707758401328959478791343481250979029363644046972556"
+ "422294698558561670817595994409985323205913035009923360820734"
+ "795546082012200697671744573982535291905800552837118327702125"
+ "018691644774560916230166739307705017656065679867259837178918"
+ "123254219579594535869171376148397610005870749992910355727569"
+ "593729567789260479930835305112462727870603529547312621720559"
+ "953074675620549217314861961905983960910846471569192459257648"
+ "138212674016814845327496495507412976753381357634960529826817"
+ "906824433858135485518651632270319927880227571858035210375443"
+ "324098235463619647723862420557582355632137583370066602155641"
+ "218235815280874570372436217877316899649287051943247206509113"
+ "311767578125e-4966",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x8p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-16496,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0),
+ TEST ("-3.237587559719012555462219479113823276249784669017340504844"
+ "942194598519770062059685508835745638324970127939070738424059"
+ "838293609943191271023342555035986308991521396355375667467208"
+ "367312819235870119724263252776995195727778126085574034035411"
+ "017344128491238136414394551514178668780674015531193282296319"
+ "913113495953953933831631032855605791532328598034154166422617"
+ "226534880263244723830482289656875701701315902175019974435037"
+ "627824356684033058939701577883356651733717468531204705842607"
+ "568803666569711421917525834491783583598401321476176752039857"
+ "173551930268891446850107760584333855521475305010940756813993"
+ "214730850216669600967698749412592167692757446422169965426483"
+ "919224341062751152057061076522973232731542382055087239368522"
+ "167656194830741819605276971705738272393130698937532095725613"
+ "383807312946395184980707534803490003540251394324459987958400"
+ "939111001126190861523615485938285497714410609640798273816511"
+ "769391568591823198476415765275534341709798367687043373145262"
+ "933998108452661682659942586304978413812755518166239176614473"
+ "815940025342279575304159493260770068030636885746695206392378"
+ "276051948759263882079389379666940357441139816661913198656187"
+ "703463519723262653223919257185751827493927586153153792077729"
+ "913353547954808876263400200663495414360816863385220457719546"
+ "338953323399286762099558324132103460225580066817535680886906"
+ "060858264089074120360391613368274811868067637495154569071591"
+ "624185979937989402513750464346904036668477876379544221432800"
+ "037599944499161940321774835027752710681217554286366043661491"
+ "013593886229615614494736186475932160549630939390542165126494"
+ "166960681499481651861215529870984381726203476917507560266886"
+ "692644952355421814201350137351435237036912624414444992497142"
+ "303802423605897110605364956579914507108584002230524766331348"
+ "271456591814078599780820974961968314684496428310691542272663"
+ "818486132771177670874927831510002443658417608078383611526899"
+ "905533629456904234997116303929427262032216072887961072267850"
+ "618234492852606488522739744757845004694461812790342894353802"
+ "938671928834585447328398711684245164703625580196678024410303"
+ "542544534512706792134908369873605619756775207191558754413381"
+ "571756431003248529020572648048946458999967788526617126349345"
+ "966896362376841092268841417781414969315002419192181972121568"
+ "811432459128737128140063645558482525300089060238860392371092"
+ "102688097987915838860882370022268312322882235690785726190915"
+ "062699382576041643741555139697348927957856990969985342299599"
+ "797431503615312038393069808777315725367497595040966093808407"
+ "117316369389112216628231869173217637452855462790553030636920"
+ "487796465880633399632793882734473382168542596184679158149228"
+ "725004404714293460752371865436947855237307240001863573081174"
+ "929166645758276081272685156100195420794154740486637315823136"
+ "798695124738873328565945598241199335059398955049459449844741"
+ "098478330319112865980346771381982151154499846478545530650091"
+ "824164892591396650703633600023191521502618379988693800703884"
+ "555191647864959327260468892793195316578510173816406054364319"
+ "294906641284764788384683586662382042642852654156477478700779"
+ "123584369965723284711409361741235548687181052639639279285373"
+ "139084165798451899763979500837428077782309910703522399860010"
+ "310321116623028924118238023770381424894162717815296210097245"
+ "221769714495449744327945091943394325259297771090128969600269"
+ "822520904193880119094781214175887316220311309028456568749910"
+ "010962366586834018403242866721783519806933018588077977626913"
+ "774236680220258524711348037750591646286531625306510583751929"
+ "280541119187219596706615736304036444366663256426643903386694"
+ "536649648686380122198677895751002327229059364018755164517060"
+ "321515091173358005987498359799467138817648881479418623694683"
+ "454881683746841149715181334498096967702613110590140231345676"
+ "956141227850879905018558219984441819798054463206764413100251"
+ "255775535830770535620946159535406497134759043192647996190512"
+ "978586496199656070707105117773853504277795024754647024165589"
+ "129442822627147868917463795166386552921913398878270019905147"
+ "510849518894114102536073369047160130990411626048426437835295"
+ "683097278297774735181045158616674564080237813146623269215019"
+ "613231938626758927531490945029356207933289363847181438902539"
+ "297057969524961348607844569521442237914899100699610921669921"
+ "572167164875488132527187949318543809703388178931170799769792"
+ "886086681284964861608656928109305369539955846964197786677053"
+ "847603962194721523867993048528558551380823699291873352033111"
+ "096244814245789620930756114228971363838828108534030152031715"
+ "929722499546436547773404017947035596936338462103946797525667"
+ "033935433489292620531649199724400832489751788129365426568881"
+ "328357966337292439204382537174357675404105580244018783685041"
+ "224798457022189315692175787257287203633134300759209060570319"
+ "508886475377719911176071302732819878165468592717406388218727"
+ "585026352127436844762994722826390779737322113768842482160812"
+ "973100323673863050234437722898796145596181862320550301285861"
+ "980052194863780743808106946940079349630782676930197134206259"
+ "739125377941060751175427888774493677478593805682322173891730"
+ "311959284895178856039354015035864931073602059531001572891528"
+ "828982167810245343327388887928886208615327002834690068636094"
+ "325052251429781641267821367266715283643659749152264457938319"
+ "185148303604827363623405060374573505789923003843438436174489"
+ "383805098509083722050766328250349793203837202162624690093533"
+ "478114438810603140565070517669964629947543608404988178019652"
+ "088162307525611931821066493746994641048066011859814337589829"
+ "896549720562117090677291541318153057715167624128318297771376"
+ "531788973088699647168159229805877415594828532539839967464064"
+ "556647594705830374653113373530876658380240145380423210673778"
+ "776803592627231257495817394581607796277282644312510714532297"
+ "108722017217547317744900647318022108570947064304280100418971"
+ "450552007356891519523293614416944016354756866350050833501416"
+ "942505071203810116719053430543531027953437436446745566839242"
+ "129860410443198862219469972163224971258348314341755015213118"
+ "628882713134766297624091644805801186976152536913514712919240"
+ "503721680740586016832099946807466311777189050656676962849581"
+ "383790904722087478646766320517056183581970236248227413322748"
+ "304134245717987665377396011236706627320817654565682680006957"
+ "454759981618023476448544673508068369492066566895437050571584"
+ "345511070959483898938738225050292533674383091612495407126805"
+ "381796487365892131916426837522671623266627483065655765705534"
+ "239355214893395905702329340402794052884259146049064629582075"
+ "576563307670749189662176976725361937046200576007893814439695"
+ "301892528761187544161389682003509216791271836545495416676148"
+ "151145195082668323677621182991451835324281863619641773620601"
+ "014510950996746726615703771971266687151564427772359427340566"
+ "909351858654807999781808513034680104078196607462166928018863"
+ "385629928965649243954503391493597963417955268639606791452833"
+ "692467872935741940362479842688642227725662504694679557678170"
+ "929873774151037857807219938356152056997839625453727441947651"
+ "198316190826615266016347740875615970031428012228328190610356"
+ "706715662722241878767131224669837573607121539572299329404101"
+ "274463156060298348931678277361174057097484704587036227686110"
+ "677413094941011961262438027467952964727129462752693949019764"
+ "164538344775554466171428121848999818969114034332797672927989"
+ "107710137279281184295118233855942385256333164153378143279674"
+ "287318136458207166174996112638689535976047617221520910027427"
+ "485161965702038805161865494457444594178063766957037428053543"
+ "239915792369877811053417485684498667123216132006378630814477"
+ "106813088898563644909178779463295955587688067277368683836470"
+ "612208483299572260344016516194247232298740800342116589984844"
+ "356688576984553507410293250093945014209879983314562948451929"
+ "862241009275783684229669718641013736581856815277185073259140"
+ "534024850924787544871716174654424640728091372513505922826813"
+ "145390369149590652886241000625495880523771672395227312971578"
+ "042522330551788256261683080675549820375567692574152956993944"
+ "504349004617185470945673049153218968830613586193253490318451"
+ "871770642617802890083608004460414305421033261048294750210470"
+ "303202846332054952531617433058538758154347087854561609738141"
+ "615145103748777579733574989673510104836750248325511777237502"
+ "526995647687215364262385606217553691332159421351598905950537"
+ "513518351520709657614578131639854432532002236696200855408766"
+ "520105076378983345708235918180749273124590433024519869147132"
+ "931932462703067876214268579940066030521414045386366551780718"
+ "510535469417760242493782392451178913322503092692423649855756"
+ "521279456558275339921490892868856862895022564047205838132429"
+ "286600764536839036698193759634186899291274131934296059833048"
+ "690594627623595320676097721540716472990950611858372856271872"
+ "423573251506230042608074167903809812264198034505185435990821"
+ "356377966484742250577592243727298923187891299404854048446822"
+ "719928239317254073429532989089675503790372464487057264894107"
+ "613242300912487070053676379388189496900004239731820229886894"
+ "053019610823763957809819187948639826973433528683168917360632"
+ "750040517847686479093538683816924213175672979768822065627696"
+ "943474914020483056384006872835738311110986586149510661361915"
+ "342172527409078742250880056867149831149121019729847242037335"
+ "904440063130981999650700416787683293610119590221942974317455"
+ "716336227454789239793488032299063316588917505912406020220045"
+ "264868457718282165158892171630470709599503997282778168097827"
+ "497383884195820921583645621293941200045604062174334998171535"
+ "030513366277293714389988219756129580868518167923841173364269"
+ "774889246694435264051484911461988227011238661037602452710188"
+ "911900438270362280391121270021679247152879324195035694278071"
+ "477495720447513017171148877312193736366348711630105507365864"
+ "598069586257026976295714123943691621672377694552248018987680"
+ "338612382795605985191106112971398796002636340393693119651973"
+ "344711646854574482999700397952536878348512983782198330513744"
+ "803168936076427075943787200489575435147989033386529956551570"
+ "669047103070223076797892329848058499725632813524581372640746"
+ "415923016932853954152472487866287318545051065376430120748079"
+ "948860283261855738836955246188128622509828635867225708782966"
+ "017423170535046509131388753895013061151387840089512861842615"
+ "441729962315731301087767989000918136617870582141517330935619"
+ "268642915983553727587587676791953536960714236687847602589538"
+ "927962585440961131240218794236944630211930970546118745080346"
+ "860636620310193382167597465544174488399379683716417891139157"
+ "575146359165023126594124268610800205258776019000550873739401"
+ "445303129974560221438061891795442780328126230093178952504570"
+ "380957199592993338719686487798275474853570100033092481743129"
+ "836527369756194343789131822069107283156271772679863538216891"
+ "518713732520976834628418347371261368933454629405371869789752"
+ "684339805368137450825001203521193642598238954329102258317328"
+ "098581116978343883611320940814793654745807336162557057195523"
+ "274610323601685712314930799144191673243832283659669368716126"
+ "815118360353441303009936083544193524336572930768154506567477"
+ "565558211143508568396203781879592033787429012753106951129653"
+ "074630840496376302289668286168325299592504054003803917262600"
+ "195834001336180158836765599057537979745423711070158871650976"
+ "475924365707758401328959478791343481250979029363644046972556"
+ "422294698558561670817595994409985323205913035009923360820734"
+ "795546082012200697671744573982535291905800552837118327702125"
+ "018691644774560916230166739307705017656065679867259837178918"
+ "123254219579594535869171376148397610005870749992910355727569"
+ "593729567789260479930835305112462727870603529547312621720559"
+ "953074675620549217314861961905983960910846471569192459257648"
+ "138212674016814845327496495507412976753381357634960529826817"
+ "906824433858135485518651632270319927880227571858035210375443"
+ "324098235463619647723862420557582355632137583370066602155641"
+ "218235815280874570372436217877316899649287051943247206509113"
+ "311767578126e-4966",
+ false,
+ -0x8p-152,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x8p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-16448,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-1076,
+ -0x0p+0,
+ -0x0p+0,
+ -0x0p+0,
+ false,
+ -0x4p-16496,
+ -0x4p-16496,
+ -0x0p+0,
+ -0x0p+0),
+};
diff --git a/REORG.TODO/stdlib/tst-strtod-round-skeleton.c b/REORG.TODO/stdlib/tst-strtod-round-skeleton.c
new file mode 100644
index 0000000000..73603e6158
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod-round-skeleton.c
@@ -0,0 +1,252 @@
+/* Test for correct rounding of results of strtod and related
+ functions.
+ Copyright (C) 2012-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+/* Defining _LIBC_TEST ensures long double math functions are
+ declared in the headers. */
+#define _LIBC_TEST 1
+#include <fenv.h>
+#include <float.h>
+#include <math.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math-tests.h>
+
+#include "tst-strtod.h"
+
+/* Non-standard macros expected to be externally defined:
+
+ L_(str): Pastes the appropriate modifier to a string literal str.
+
+ FNPFX: Expands to the correct prefix for the strtod equivalent
+ of type CHAR. (e.g str or wcs).
+
+ CHAR: Expands to the string type being tested (e.g wchar_t or char).
+
+ STRM: Expands to a string literal suitable for printing CHAR* via
+ printf (e.g "%s" or "%ls"). */
+
+#define _CONCAT(a, b) a ## b
+#define CONCAT(a, b) _CONCAT (a, b)
+
+#define STRTO(x) CONCAT (CONCAT (FNPFX, to), x)
+
+#if LDBL_MANT_DIG == 106 && LDBL_MAX_EXP == 1024
+/* This is a stupid hack for IBM long double. This test ignores
+ inexact values for long double due to the limitations of the
+ format. This ensures rounding tests are ignored. */
+# undef ROUNDING_TESTS_long_double
+# define ROUNDING_TESTS_long_double(x) 0
+#endif
+
+/* Generator to create an FTYPE member variabled named FSUF
+ used to populate struct member variables. */
+#define FTYPE_MEMBER(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \
+ FTYPE FSUF;
+
+/* Likewise, but each member is of type bool. */
+#define BOOL_MEMBER(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \
+ bool FSUF;
+
+#define STRUCT_FOREACH_FLOAT_FTYPE GEN_TEST_STRTOD_FOREACH (FTYPE_MEMBER)
+#define STRUCT_FOREACH_FLOAT_BOOL GEN_TEST_STRTOD_FOREACH (BOOL_MEMBER)
+
+/* Define the long double choose (CHOOSE_ld) macro
+ to select the appropriate generated long double
+ value from the generated test data. */
+#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024
+/* This is for the long double == double format. */
+# define CHOOSE_ld(f,d,...) d
+#elif LDBL_MANT_DIG == 64 && LDBL_MAX_EXP == 16384 && LDBL_MIN_EXP == -16381
+/* This is for the Intel extended float format. */
+# define CHOOSE_ld(f,d,ld64i,...) ld64i
+#elif LDBL_MANT_DIG == 64 && LDBL_MAX_EXP == 16384 && LDBL_MIN_EXP == -16382
+/* This is for the Motorola extended float format. */
+# define CHOOSE_ld(f,d,ld64i,ld64m,...) ld64m
+#elif LDBL_MANT_DIG == 106 && LDBL_MAX_EXP == 1024
+/* This is for the IBM extended double format. */
+# define CHOOSE_ld(f,d,ld64i,ld64m,ld106,...) ld106
+#elif LDBL_MANT_DIG == 113 && LDBL_MAX_EXP == 16384
+/* This is for the IEEE binary128 format. */
+# define CHOOSE_ld(f,d,ld64i,ld64m,ld106,ld113,...) ld113
+#else
+# error "unknown long double format"
+#endif
+
+/* Add type specific choosing macros below. */
+#define CHOOSE_f(f,...) f
+#define CHOOSE_d(f,d,...) d
+/* long double is special, and handled above. */
+
+/* Selector for expected result field of a given type. */
+#define _ENTRY(FSUF, FTYPE, FTOSTR, LSUF, CSUF, ...) \
+ CONCAT (CHOOSE_ ## FSUF (__VA_ARGS__), LSUF),
+#define ENTRY(...) \
+ GEN_TEST_STRTOD_FOREACH (_ENTRY, __VA_ARGS__)
+
+/* Selector for boolean exact tag of expected results. */
+#define _XNTRY(FSUF, FTYPE, FTOSTR, LSUF, CSUF, ...) \
+ CHOOSE_ ## FSUF (__VA_ARGS__),
+#define XNTRY(...) \
+ GEN_TEST_STRTOD_FOREACH (_XNTRY, __VA_ARGS__)
+
+/* This is hacky way around the seemingly unavoidable macro
+ expansion of the INFINITY or HUGE_VAL like macros in the
+ above. It is assumed the compiler will implicitly convert
+ the infinity correctly. */
+#define INF INFINITY + 0.0
+
+/* This macro is used in conjunction with the output from the
+ gen-tst-strtod-round utility to select the appropriately
+ rounded long double value for a given format. */
+#define TEST(s, \
+ fx, fd, fn, fz, fu, \
+ dx, dd, dn, dz, du, \
+ ld64ix, ld64id, ld64in, ld64iz, ld64iu, \
+ ld64mx, ld64md, ld64mn, ld64mz, ld64mu, \
+ ld106x, ld106d, ld106n, ld106z, ld106u, \
+ ld113x, ld113d, ld113n, ld113z, ld113u) \
+ { \
+ L_ (s), \
+ { XNTRY (fx, dx, ld64ix, ld64mx, ld106x, ld113x) }, \
+ { \
+ { ENTRY (fn, dn, ld64in, ld64mn, ld106n, ld113n) }, \
+ { ENTRY (fd, dd, ld64id, ld64md, ld106d, ld113d) }, \
+ { ENTRY (fz, dz, ld64iz, ld64mz, ld106z, ld113z) }, \
+ { ENTRY (fu, du, ld64iu, ld64mu, ld106u, ld113u) } \
+ } \
+ }
+
+struct test_exactness
+ {
+ STRUCT_FOREACH_FLOAT_BOOL
+ };
+
+struct test_results
+ {
+ STRUCT_FOREACH_FLOAT_FTYPE
+ };
+
+struct test {
+ const CHAR *s;
+ struct test_exactness exact;
+ struct test_results r[4];
+};
+
+/* Include the generated test data. */
+#include "tst-strtod-round-data.h"
+
+#define STRX(x) #x
+#define STR(x) STRX (x)
+#define FNPFXS STR (FNPFX)
+
+#ifndef FE_INEXACT
+# define FE_INEXACT 0
+#endif
+
+#define GEN_ONE_TEST(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \
+{ \
+ feclearexcept (FE_INEXACT); \
+ FTYPE f = STRTO (FSUF) (s, NULL); \
+ if (f != expected->FSUF \
+ || (copysign ## CSUF) (1.0 ## LSUF, f) \
+ != (copysign ## CSUF) (1.0 ## LSUF, expected->FSUF)) \
+ { \
+ char efstr[FSTRLENMAX]; \
+ char fstr[FSTRLENMAX]; \
+ FTOSTR (efstr, FSTRLENMAX, "%a", expected->FSUF); \
+ FTOSTR (fstr, FSTRLENMAX, "%a", f); \
+ printf (FNPFXS "to" #FSUF " (" STRM ") returned %s not " \
+ "%s (%s)\n", s, fstr, efstr, mode_name); \
+ if (ROUNDING_TESTS (FTYPE, rnd_mode) || exact->FSUF) \
+ result = 1; \
+ else \
+ printf ("ignoring this inexact result\n"); \
+ } \
+ else if (FE_INEXACT != 0) \
+ { \
+ bool inexact_raised = fetestexcept (FE_INEXACT) != 0; \
+ if (inexact_raised != !exact->FSUF) \
+ { \
+ printf (FNPFXS "to" #FSUF " (" STRM ") inexact %d " \
+ "not %d\n", s, inexact_raised, !exact->FSUF); \
+ if (EXCEPTION_TESTS (FTYPE)) \
+ result = 1; \
+ else \
+ printf ("ignoring this exception error\n"); \
+ } \
+ } \
+}
+
+static int
+test_in_one_mode (const CHAR *s, const struct test_results *expected,
+ const struct test_exactness *exact, const char *mode_name,
+ int rnd_mode)
+{
+ int result = 0;
+ GEN_TEST_STRTOD_FOREACH (GEN_ONE_TEST)
+ return result;
+}
+
+static const struct fetestmodes
+ {
+ const char *mode_name;
+ int rnd_mode;
+ int rnd_i; /* Corresponding index into r array of struct test. */
+ } modes[] = {
+ { "default rounding mode", FE_TONEAREST, 0 },
+#ifdef FE_DOWNWARD
+ { "FE_DOWNWARD", FE_DOWNWARD, 1 },
+#endif
+#ifdef FE_TOWARDZERO
+ { "FE_TOWARDZERO", FE_TOWARDZERO, 2 },
+#endif
+#ifdef FE_UPWARD
+ { "FE_UPWARD", FE_UPWARD, 3 },
+#endif
+ {}
+};
+
+static int
+do_test (void)
+{
+ int save_round_mode __attribute__ ((unused)) = fegetround ();
+ int result = 0;
+ for (size_t i = 0; i < sizeof (tests) / sizeof (tests[0]); i++)
+ {
+ result |= test_in_one_mode (tests[i].s, &tests[i].r[modes[0].rnd_i],
+ &tests[i].exact, modes[0].mode_name,
+ modes[0].rnd_mode);
+ for (const struct fetestmodes *m = &modes[1]; m->mode_name != NULL; m++)
+ {
+ if (!fesetround (m->rnd_mode))
+ {
+ result |= test_in_one_mode (tests[i].s, &tests[i].r[m->rnd_i],
+ &tests[i].exact, m->mode_name,
+ m->rnd_mode);
+ fesetround (save_round_mode);
+ }
+ }
+ }
+ return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strtod-round.c b/REORG.TODO/stdlib/tst-strtod-round.c
new file mode 100644
index 0000000000..2990d544d4
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod-round.c
@@ -0,0 +1,24 @@
+/* char shim for tst-strtod-round-skeleton.c.
+ Copyright (C) 2016-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#define L_(str) str
+#define FNPFX str
+#define CHAR char
+#define STRM "%s"
+
+#include <tst-strtod-round-skeleton.c>
diff --git a/REORG.TODO/stdlib/tst-strtod-underflow.c b/REORG.TODO/stdlib/tst-strtod-underflow.c
new file mode 100644
index 0000000000..f623a6be90
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod-underflow.c
@@ -0,0 +1,225 @@
+/* Test for strtod handling of arguments that may cause floating-point
+ underflow.
+ Copyright (C) 2012-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <fenv.h>
+#include <float.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <tininess.h>
+
+enum underflow_case
+ {
+ /* Result is exact or outside the subnormal range. */
+ UNDERFLOW_NONE,
+ /* Result has magnitude at most half way between the largest
+ subnormal value and the smallest positive normal value, and is
+ not exact, so underflows in all rounding modes and independent
+ of how tininess is detected. */
+ UNDERFLOW_ALWAYS,
+ /* Result is positive, with magnitude larger than half way between
+ the largest subnormal value and the least positive normal
+ value, but would underflow when rounded to nearest to normal
+ precision, so underflows after rounding in all modes except
+ rounding upward. */
+ UNDERFLOW_EXCEPT_UPWARD,
+ /* Likewise, for a negative result, underflowing after rounding
+ except when rounding downward. */
+ UNDERFLOW_EXCEPT_DOWNWARD,
+ /* Result is positive, with magnitude at least three quarters of
+ the way from the largest subnormal value to the smallest
+ positive normal value, so underflows after rounding only when
+ rounding downward or toward zero. */
+ UNDERFLOW_ONLY_DOWNWARD_ZERO,
+ /* Likewise, for a negative result, underflowing after rounding
+ only when rounding upward or toward zero. */
+ UNDERFLOW_ONLY_UPWARD_ZERO,
+ };
+
+struct test
+{
+ const char *s;
+ enum underflow_case c;
+};
+
+static const struct test tests[] =
+ {
+ { "0x1p-1022", UNDERFLOW_NONE },
+ { "-0x1p-1022", UNDERFLOW_NONE },
+ { "0x0p-10000000000000000000000000", UNDERFLOW_NONE },
+ { "-0x0p-10000000000000000000000000", UNDERFLOW_NONE },
+ { "0x1p-10000000000000000000000000", UNDERFLOW_ALWAYS },
+ { "-0x1p-10000000000000000000000000", UNDERFLOW_ALWAYS },
+ { "0x1.000000000000000000001p-1022", UNDERFLOW_NONE },
+ { "-0x1.000000000000000000001p-1022", UNDERFLOW_NONE },
+ { "0x1p-1075", UNDERFLOW_ALWAYS },
+ { "-0x1p-1075", UNDERFLOW_ALWAYS },
+ { "0x1p-1023", UNDERFLOW_NONE },
+ { "-0x1p-1023", UNDERFLOW_NONE },
+ { "0x1p-1074", UNDERFLOW_NONE },
+ { "-0x1p-1074", UNDERFLOW_NONE },
+ { "0x1.ffffffffffffep-1023", UNDERFLOW_NONE },
+ { "-0x1.ffffffffffffep-1023", UNDERFLOW_NONE },
+ { "0x1.fffffffffffffp-1023", UNDERFLOW_ALWAYS },
+ { "-0x1.fffffffffffffp-1023", UNDERFLOW_ALWAYS },
+ { "0x1.fffffffffffff0001p-1023", UNDERFLOW_EXCEPT_UPWARD },
+ { "-0x1.fffffffffffff0001p-1023", UNDERFLOW_EXCEPT_DOWNWARD },
+ { "0x1.fffffffffffff7fffp-1023", UNDERFLOW_EXCEPT_UPWARD },
+ { "-0x1.fffffffffffff7fffp-1023", UNDERFLOW_EXCEPT_DOWNWARD },
+ { "0x1.fffffffffffff8p-1023", UNDERFLOW_ONLY_DOWNWARD_ZERO },
+ { "-0x1.fffffffffffff8p-1023", UNDERFLOW_ONLY_UPWARD_ZERO },
+ { "0x1.fffffffffffffffffp-1023", UNDERFLOW_ONLY_DOWNWARD_ZERO },
+ { "-0x1.fffffffffffffffffp-1023", UNDERFLOW_ONLY_UPWARD_ZERO },
+ };
+
+/* Return whether to expect underflow from a particular testcase, in a
+ given rounding mode. */
+
+static bool
+expect_underflow (enum underflow_case c, int rm)
+{
+ if (c == UNDERFLOW_NONE)
+ return false;
+ if (c == UNDERFLOW_ALWAYS)
+ return true;
+ if (TININESS_AFTER_ROUNDING)
+ {
+ switch (rm)
+ {
+#ifdef FE_DOWNWARD
+ case FE_DOWNWARD:
+ return (c == UNDERFLOW_EXCEPT_UPWARD
+ || c == UNDERFLOW_ONLY_DOWNWARD_ZERO);
+#endif
+
+#ifdef FE_TOWARDZERO
+ case FE_TOWARDZERO:
+ return true;
+#endif
+
+#ifdef FE_UPWARD
+ case FE_UPWARD:
+ return (c == UNDERFLOW_EXCEPT_DOWNWARD
+ || c == UNDERFLOW_ONLY_UPWARD_ZERO);
+#endif
+
+ default:
+ return (c == UNDERFLOW_EXCEPT_UPWARD
+ || c == UNDERFLOW_EXCEPT_DOWNWARD);
+ }
+ }
+ else
+ return true;
+}
+
+static bool support_underflow_exception = false;
+volatile double d = DBL_MIN;
+volatile double dd;
+
+static int
+test_in_one_mode (const char *s, enum underflow_case c, int rm,
+ const char *mode_name)
+{
+ int result = 0;
+ feclearexcept (FE_ALL_EXCEPT);
+ errno = 0;
+ double d = strtod (s, NULL);
+ int got_errno = errno;
+#ifdef FE_UNDERFLOW
+ bool got_fe_underflow = fetestexcept (FE_UNDERFLOW) != 0;
+#else
+ bool got_fe_underflow = false;
+#endif
+ printf ("strtod (%s) (%s) returned %a, errno = %d, %sunderflow exception\n",
+ s, mode_name, d, got_errno, got_fe_underflow ? "" : "no ");
+ bool this_expect_underflow = expect_underflow (c, rm);
+ if (got_errno != 0 && got_errno != ERANGE)
+ {
+ puts ("FAIL: errno neither 0 nor ERANGE");
+ result = 1;
+ }
+ else if (this_expect_underflow != (errno == ERANGE))
+ {
+ puts ("FAIL: underflow from errno differs from expectations");
+ result = 1;
+ }
+ if (support_underflow_exception && got_fe_underflow != this_expect_underflow)
+ {
+ puts ("FAIL: underflow from exceptions differs from expectations");
+ result = 1;
+ }
+ return result;
+}
+
+static int
+do_test (void)
+{
+ int save_round_mode __attribute__ ((unused)) = fegetround ();
+ int result = 0;
+#ifdef FE_TONEAREST
+ const int fe_tonearest = FE_TONEAREST;
+#else
+ const int fe_tonearest = 0;
+# if defined FE_DOWNWARD || defined FE_TOWARDZERO || defined FE_UPWARD
+# error "FE_TONEAREST not defined, but another rounding mode is"
+# endif
+#endif
+#ifdef FE_UNDERFLOW
+ feclearexcept (FE_ALL_EXCEPT);
+ dd = d * d;
+ if (fetestexcept (FE_UNDERFLOW))
+ support_underflow_exception = true;
+ else
+ puts ("underflow exception not supported at runtime, only testing errno");
+#endif
+ for (size_t i = 0; i < sizeof (tests) / sizeof (tests[0]); i++)
+ {
+ result |= test_in_one_mode (tests[i].s, tests[i].c, fe_tonearest,
+ "default rounding mode");
+#ifdef FE_DOWNWARD
+ if (!fesetround (FE_DOWNWARD))
+ {
+ result |= test_in_one_mode (tests[i].s, tests[i].c, FE_DOWNWARD,
+ "FE_DOWNWARD");
+ fesetround (save_round_mode);
+ }
+#endif
+#ifdef FE_TOWARDZERO
+ if (!fesetround (FE_TOWARDZERO))
+ {
+ result |= test_in_one_mode (tests[i].s, tests[i].c, FE_TOWARDZERO,
+ "FE_TOWARDZERO");
+ fesetround (save_round_mode);
+ }
+#endif
+#ifdef FE_UPWARD
+ if (!fesetround (FE_UPWARD))
+ {
+ result |= test_in_one_mode (tests[i].s, tests[i].c, FE_UPWARD,
+ "FE_UPWARD");
+ fesetround (save_round_mode);
+ }
+#endif
+ }
+ return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strtod.c b/REORG.TODO/stdlib/tst-strtod.c
new file mode 100644
index 0000000000..1ab7f8a5aa
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod.c
@@ -0,0 +1,218 @@
+/* Basic tests for strtod.
+ Copyright (C) 1991-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <ctype.h>
+#include <locale.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <string.h>
+#include <math.h>
+
+struct ltest
+ {
+ const char *str; /* Convert this. */
+ double expect; /* To get this. */
+ char left; /* With this left over. */
+ int err; /* And this in errno. */
+ };
+static const struct ltest tests[] =
+ {
+ { "12.345", 12.345, '\0', 0 },
+ { "12.345e19", 12.345e19, '\0', 0 },
+ { "-.1e+9", -.1e+9, '\0', 0 },
+ { ".125", .125, '\0', 0 },
+ { "1e20", 1e20, '\0', 0 },
+ { "0e-19", 0, '\0', 0 },
+ { "4\00012", 4.0, '\0', 0 },
+ { "5.9e-76", 5.9e-76, '\0', 0 },
+ { "0x1.4p+3", 10.0, '\0', 0 },
+ { "0xAp0", 10.0, '\0', 0 },
+ { "0x0Ap0", 10.0, '\0', 0 },
+ { "0x0A", 10.0, '\0', 0 },
+ { "0xA0", 160.0, '\0', 0 },
+ { "0x0.A0p8", 160.0, '\0', 0 },
+ { "0x0.50p9", 160.0, '\0', 0 },
+ { "0x0.28p10", 160.0, '\0', 0 },
+ { "0x0.14p11", 160.0, '\0', 0 },
+ { "0x0.0A0p12", 160.0, '\0', 0 },
+ { "0x0.050p13", 160.0, '\0', 0 },
+ { "0x0.028p14", 160.0, '\0', 0 },
+ { "0x0.014p15", 160.0, '\0', 0 },
+ { "0x00.00A0p16", 160.0, '\0', 0 },
+ { "0x00.0050p17", 160.0, '\0', 0 },
+ { "0x00.0028p18", 160.0, '\0', 0 },
+ { "0x00.0014p19", 160.0, '\0', 0 },
+ { "0x1p-1023",
+ 1.11253692925360069154511635866620203210960799023116591527666e-308,
+ '\0', 0 },
+ { "0x0.8p-1022",
+ 1.11253692925360069154511635866620203210960799023116591527666e-308,
+ '\0', 0 },
+ { "Inf", HUGE_VAL, '\0', 0 },
+ { "-Inf", -HUGE_VAL, '\0', 0 },
+ { "+InFiNiTy", HUGE_VAL, '\0', 0 },
+ { "0x80000Ap-23", 0x80000Ap-23, '\0', 0 },
+ { "1e-324", 0, '\0', ERANGE },
+ { "0x100000000000008p0", 0x1p56, '\0', 0 },
+ { "0x100000000000008.p0", 0x1p56, '\0', 0 },
+ { "0x100000000000008.00p0", 0x1p56, '\0', 0 },
+ { "0x10000000000000800p0", 0x1p64, '\0', 0 },
+ { "0x10000000000000801p0", 0x1.0000000000001p64, '\0', 0 },
+ { NULL, 0, '\0', 0 }
+ };
+
+static void expand (char *dst, int c);
+static int long_dbl (void);
+
+static int
+do_test (void)
+{
+ char buf[100];
+ const struct ltest *lt;
+ char *ep;
+ int status = 0;
+ int save_errno;
+
+ for (lt = tests; lt->str != NULL; ++lt)
+ {
+ double d;
+
+ errno = 0;
+ d = strtod(lt->str, &ep);
+ save_errno = errno;
+ printf ("strtod (\"%s\") test %u",
+ lt->str, (unsigned int) (lt - tests));
+ if (d == lt->expect && *ep == lt->left && save_errno == lt->err)
+ puts ("\tOK");
+ else
+ {
+ puts ("\tBAD");
+ if (d != lt->expect)
+ printf (" returns %.60g, expected %.60g\n", d, lt->expect);
+ if (lt->left != *ep)
+ {
+ char exp1[5], exp2[5];
+ expand (exp1, *ep);
+ expand (exp2, lt->left);
+ printf (" leaves '%s', expected '%s'\n", exp1, exp2);
+ }
+ if (save_errno != lt->err)
+ printf (" errno %d (%s) instead of %d (%s)\n",
+ save_errno, strerror (save_errno),
+ lt->err, strerror (lt->err));
+ status = 1;
+ }
+ }
+
+ sprintf (buf, "%f", strtod ("-0.0", NULL));
+ if (strcmp (buf, "-0.000000") != 0)
+ {
+ printf (" strtod (\"-0.0\", NULL) returns \"%s\"\n", buf);
+ status = 1;
+ }
+
+ const char input[] = "3752432815e-39";
+
+ float f1 = strtold (input, NULL);
+ float f2;
+ float f3 = strtof (input, NULL);
+ sscanf (input, "%g", &f2);
+
+ if (f1 != f2)
+ {
+ printf ("f1 = %a != f2 = %a\n", f1, f2);
+ status = 1;
+ }
+ if (f1 != f3)
+ {
+ printf ("f1 = %a != f3 = %a\n", f1, f3);
+ status = 1;
+ }
+ if (f2 != f3)
+ {
+ printf ("f2 = %a != f3 = %a\n", f2, f3);
+ status = 1;
+ }
+
+ const char input2[] = "+1.000000000116415321826934814453125";
+ if (strtold (input2, NULL) != +1.000000000116415321826934814453125L)
+ {
+ printf ("input2: %La != %La\n", strtold (input2, NULL),
+ +1.000000000116415321826934814453125L);
+ status = 1;
+ }
+
+ static struct { const char *str; long double l; } ltests[] =
+ {
+ { "42.0000000000000000001", 42.0000000000000000001L },
+ { "42.00000000000000000001", 42.00000000000000000001L },
+ { "42.000000000000000000001", 42.000000000000000000001L }
+ };
+ int n;
+ for (n = 0; n < sizeof (ltests) / sizeof (ltests[0]); ++n)
+ if (strtold (ltests[n].str, NULL) != ltests[n].l)
+ {
+ printf ("ltests[%d]: %La != %La\n", n,
+ strtold (ltests[n].str, NULL), ltests[n].l);
+ status = 1;
+ }
+
+ status |= long_dbl ();
+
+ return status ? EXIT_FAILURE : EXIT_SUCCESS;
+}
+
+static void
+expand (char *dst, int c)
+{
+ if (isprint (c))
+ {
+ dst[0] = c;
+ dst[1] = '\0';
+ }
+ else
+ (void) sprintf (dst, "%#.3o", (unsigned int) c);
+}
+
+static int
+long_dbl (void)
+{
+ /* Regenerate this string using
+
+ echo '(2^53-1)*2^(1024-53)' | bc | sed 's/\([^\]*\)\\*$/ "\1"/'
+
+ */
+ static const char longestdbl[] =
+ "17976931348623157081452742373170435679807056752584499659891747680315"
+ "72607800285387605895586327668781715404589535143824642343213268894641"
+ "82768467546703537516986049910576551282076245490090389328944075868508"
+ "45513394230458323690322294816580855933212334827479782620414472316873"
+ "8177180919299881250404026184124858368";
+ double d = strtod (longestdbl, NULL);
+
+ printf ("strtod (\"%s\", NULL) = %g\n", longestdbl, d);
+
+ if (d != 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000)
+ return 1;
+
+ return 0;
+}
+
+#include <support/test-driver.c>
diff --git a/REORG.TODO/stdlib/tst-strtod.h b/REORG.TODO/stdlib/tst-strtod.h
new file mode 100644
index 0000000000..bf5f90138f
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod.h
@@ -0,0 +1,49 @@
+/* Common utilities for testing strtod and its derivatives.
+ This file is part of the GNU C Library.
+ Copyright (C) 2016-2017 Free Software Foundation, Inc.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifndef _TST_STRTOD_H
+#define _TST_STRTOD_H
+
+#define FSTRLENMAX 128
+
+/* Splat n variants of the same test for the various strtod functions. */
+#define GEN_TEST_STRTOD_FOREACH(mfunc, ...) \
+ mfunc ( f, float, strfromf, f, f, ##__VA_ARGS__) \
+ mfunc ( d, double, strfromd, , , ##__VA_ARGS__) \
+ mfunc ( ld, long double, strfroml, L, l, ##__VA_ARGS__)
+/* The arguments to the generated macros are:
+ FSUF - Function suffix
+ FTYPE - float type
+ FTOSTR - float to string func
+ LSUF - Literal suffix
+ CSUF - C standardish suffix for many of the math functions
+*/
+
+
+
+#define STRTOD_TEST_FOREACH(mfunc, ...) \
+({ \
+ int result = 0; \
+ result |= mfunc ## f (__VA_ARGS__); \
+ result |= mfunc ## d (__VA_ARGS__); \
+ result |= mfunc ## ld (__VA_ARGS__); \
+ result; \
+})
+
+
+#endif
diff --git a/REORG.TODO/stdlib/tst-strtod1i.c b/REORG.TODO/stdlib/tst-strtod1i.c
new file mode 100644
index 0000000000..6f79425667
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod1i.c
@@ -0,0 +1,84 @@
+/* Basic tests for __strtod_internal.
+ Copyright (C) 1991-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <ctype.h>
+#include <locale.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <string.h>
+#include <math.h>
+
+/* Perform a few tests in a locale with thousands separators. */
+static int
+do_test (void)
+{
+ static const struct
+ {
+ const char *loc;
+ const char *str;
+ double exp;
+ ptrdiff_t nread;
+ } tests[] =
+ {
+ { "de_DE.UTF-8", "1,5", 1.5, 3 },
+ { "de_DE.UTF-8", "1.5", 1.0, 1 },
+ { "de_DE.UTF-8", "1.500", 1500.0, 5 },
+ { "de_DE.UTF-8", "36.893.488.147.419.103.232", 0x1.0p65, 26 }
+ };
+#define ntests (sizeof (tests) / sizeof (tests[0]))
+ size_t n;
+ int result = 0;
+
+ puts ("\nLocale tests");
+
+ for (n = 0; n < ntests; ++n)
+ {
+ double d;
+ char *endp;
+
+ if (setlocale (LC_ALL, tests[n].loc) == NULL)
+ {
+ printf ("cannot set locale %s\n", tests[n].loc);
+ result = 1;
+ continue;
+ }
+
+ d = __strtod_internal (tests[n].str, &endp, 1);
+ if (d != tests[n].exp)
+ {
+ printf ("strtod(\"%s\") returns %g and not %g\n",
+ tests[n].str, d, tests[n].exp);
+ result = 1;
+ }
+ else if (endp - tests[n].str != tests[n].nread)
+ {
+ printf ("strtod(\"%s\") read %td bytes and not %td\n",
+ tests[n].str, endp - tests[n].str, tests[n].nread);
+ result = 1;
+ }
+ }
+
+ if (result == 0)
+ puts ("all OK");
+
+ return result ? EXIT_FAILURE : EXIT_SUCCESS;
+}
+
+#include <support/test-driver.c>
diff --git a/REORG.TODO/stdlib/tst-strtod2.c b/REORG.TODO/stdlib/tst-strtod2.c
new file mode 100644
index 0000000000..a7df82ebbd
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod2.c
@@ -0,0 +1,44 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+struct test
+{
+ const char *str;
+ double result;
+ size_t offset;
+} tests[] =
+{
+ { "0xy", 0.0, 1 },
+ { "0x.y", 0.0, 1 },
+ { "0x0.y", 0.0, 4 },
+ { "0x.0y", 0.0, 4 },
+ { ".y", 0.0, 0 },
+ { "0.y", 0.0, 2 },
+ { ".0y", 0.0, 2 }
+};
+
+static int
+do_test (void)
+{
+ int status = 0;
+ for (size_t i = 0; i < sizeof (tests) / sizeof (tests[0]); ++i)
+ {
+ char *ep;
+ double r = strtod (tests[i].str, &ep);
+ if (r != tests[i].result)
+ {
+ printf ("test %zu r = %g, expect %g\n", i, r, tests[i].result);
+ status = 1;
+ }
+ if (ep != tests[i].str + tests[i].offset)
+ {
+ printf ("test %zu strtod parsed %tu characters, expected %zu\n",
+ i, ep - tests[i].str, tests[i].offset);
+ status = 1;
+ }
+ }
+ return status;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strtod3.c b/REORG.TODO/stdlib/tst-strtod3.c
new file mode 100644
index 0000000000..23abec1896
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod3.c
@@ -0,0 +1,55 @@
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+static const struct
+{
+ const char *in;
+ const char *out;
+ double expected;
+} tests[] =
+ {
+ { "000,,,e1", ",,,e1", 0.0 },
+ { "000e1", "", 0.0 },
+ { "000,1e1", ",1e1", 0.0 }
+ };
+#define NTESTS (sizeof (tests) / sizeof (tests[0]))
+
+
+static int
+do_test (void)
+{
+ if (setlocale (LC_ALL, "en_US.ISO-8859-1") == NULL)
+ {
+ puts ("could not set locale");
+ return 1;
+ }
+
+ int status = 0;
+
+ for (int i = 0; i < NTESTS; ++i)
+ {
+ char *ep;
+ double r = __strtod_internal (tests[i].in, &ep, 1);
+
+ if (strcmp (ep, tests[i].out) != 0)
+ {
+ printf ("%d: got rest string \"%s\", expected \"%s\"\n",
+ i, ep, tests[i].out);
+ status = 1;
+ }
+
+ if (r != tests[i].expected)
+ {
+ printf ("%d: got wrong results %g, expected %g\n",
+ i, r, tests[i].expected);
+ status = 1;
+ }
+ }
+
+ return status;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strtod4.c b/REORG.TODO/stdlib/tst-strtod4.c
new file mode 100644
index 0000000000..2d9d54c944
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod4.c
@@ -0,0 +1,56 @@
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define NBSP "\xc2\xa0"
+
+static const struct
+{
+ const char *in;
+ const char *out;
+ double expected;
+} tests[] =
+ {
+ { "000"NBSP"000"NBSP"000", "", 0.0 },
+ { "1"NBSP"000"NBSP"000,5x", "x", 1000000.5 }
+ };
+#define NTESTS (sizeof (tests) / sizeof (tests[0]))
+
+
+static int
+do_test (void)
+{
+ if (setlocale (LC_ALL, "cs_CZ.UTF-8") == NULL)
+ {
+ puts ("could not set locale");
+ return 1;
+ }
+
+ int status = 0;
+
+ for (int i = 0; i < NTESTS; ++i)
+ {
+ char *ep;
+ double r = __strtod_internal (tests[i].in, &ep, 1);
+
+ if (strcmp (ep, tests[i].out) != 0)
+ {
+ printf ("%d: got rest string \"%s\", expected \"%s\"\n",
+ i, ep, tests[i].out);
+ status = 1;
+ }
+
+ if (r != tests[i].expected)
+ {
+ printf ("%d: got wrong results %g, expected %g\n",
+ i, r, tests[i].expected);
+ status = 1;
+ }
+ }
+
+ return status;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strtod5.c b/REORG.TODO/stdlib/tst-strtod5.c
new file mode 100644
index 0000000000..8976e39a58
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod5.c
@@ -0,0 +1,89 @@
+/* Tests of strtod in a locale using decimal comma.
+ Copyright (C) 2007-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+#define NBSP "\xc2\xa0"
+
+static const struct
+{
+ const char *in;
+ double expected;
+} tests[] =
+ {
+ { "0", 0.0 },
+ { "000", 0.0 },
+ { "-0", -0.0 },
+ { "-000", -0.0 },
+ { "0,", 0.0 },
+ { "-0,", -0.0 },
+ { "0,0", 0.0 },
+ { "-0,0", -0.0 },
+ { "0e-10", 0.0 },
+ { "-0e-10", -0.0 },
+ { "0,e-10", 0.0 },
+ { "-0,e-10", -0.0 },
+ { "0,0e-10", 0.0 },
+ { "-0,0e-10", -0.0 },
+ { "0e-1000000", 0.0 },
+ { "-0e-1000000", -0.0 },
+ { "0,0e-1000000", 0.0 },
+ { "-0,0e-1000000", -0.0 },
+ };
+#define NTESTS (sizeof (tests) / sizeof (tests[0]))
+
+
+static int
+do_test (void)
+{
+ if (setlocale (LC_ALL, "cs_CZ.UTF-8") == NULL)
+ {
+ puts ("could not set locale");
+ return 1;
+ }
+
+ int status = 0;
+
+ for (int i = 0; i < NTESTS; ++i)
+ {
+ char *ep;
+ double r = strtod (tests[i].in, &ep);
+
+ if (*ep != '\0')
+ {
+ printf ("%d: got rest string \"%s\", expected \"\"\n", i, ep);
+ status = 1;
+ }
+
+ if (r != tests[i].expected
+ || copysign (10.0, r) != copysign (10.0, tests[i].expected))
+ {
+ printf ("%d: got wrong results %g, expected %g\n",
+ i, r, tests[i].expected);
+ status = 1;
+ }
+ }
+
+ return status;
+}
+
+#include <support/test-driver.c>
diff --git a/REORG.TODO/stdlib/tst-strtod5i.c b/REORG.TODO/stdlib/tst-strtod5i.c
new file mode 100644
index 0000000000..7e319585bb
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod5i.c
@@ -0,0 +1,100 @@
+/* Tests of __strtod_internal in a locale using decimal comma.
+ Copyright (C) 2007-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+#define NBSP "\xc2\xa0"
+
+static const struct
+{
+ const char *in;
+ int group;
+ double expected;
+} tests[] =
+ {
+ { "0", 0, 0.0 },
+ { "000", 0, 0.0 },
+ { "-0", 0, -0.0 },
+ { "-000", 0, -0.0 },
+ { "0,", 0, 0.0 },
+ { "-0,", 0, -0.0 },
+ { "0,0", 0, 0.0 },
+ { "-0,0", 0, -0.0 },
+ { "0e-10", 0, 0.0 },
+ { "-0e-10", 0, -0.0 },
+ { "0,e-10", 0, 0.0 },
+ { "-0,e-10", 0, -0.0 },
+ { "0,0e-10", 0, 0.0 },
+ { "-0,0e-10", 0, -0.0 },
+ { "0e-1000000", 0, 0.0 },
+ { "-0e-1000000", 0, -0.0 },
+ { "0,0e-1000000", 0, 0.0 },
+ { "-0,0e-1000000", 0, -0.0 },
+ { "0", 1, 0.0 },
+ { "000", 1, 0.0 },
+ { "-0", 1, -0.0 },
+ { "-000", 1, -0.0 },
+ { "0e-10", 1, 0.0 },
+ { "-0e-10", 1, -0.0 },
+ { "0e-1000000", 1, 0.0 },
+ { "-0e-1000000", 1, -0.0 },
+ { "000"NBSP"000"NBSP"000", 1, 0.0 },
+ { "-000"NBSP"000"NBSP"000", 1, -0.0 }
+ };
+#define NTESTS (sizeof (tests) / sizeof (tests[0]))
+
+
+static int
+do_test (void)
+{
+ if (setlocale (LC_ALL, "cs_CZ.UTF-8") == NULL)
+ {
+ puts ("could not set locale");
+ return 1;
+ }
+
+ int status = 0;
+
+ for (int i = 0; i < NTESTS; ++i)
+ {
+ char *ep;
+ double r = __strtod_internal (tests[i].in, &ep, tests[i].group);
+
+ if (*ep != '\0')
+ {
+ printf ("%d: got rest string \"%s\", expected \"\"\n", i, ep);
+ status = 1;
+ }
+
+ if (r != tests[i].expected
+ || copysign (10.0, r) != copysign (10.0, tests[i].expected))
+ {
+ printf ("%d: got wrong results %g, expected %g\n",
+ i, r, tests[i].expected);
+ status = 1;
+ }
+ }
+
+ return status;
+}
+
+#include <support/test-driver.c>
diff --git a/REORG.TODO/stdlib/tst-strtod6.c b/REORG.TODO/stdlib/tst-strtod6.c
new file mode 100644
index 0000000000..9bfbdc2b38
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtod6.c
@@ -0,0 +1,57 @@
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "tst-strtod.h"
+
+#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \
+static int \
+test_strto ## FSUF (const char str[]) \
+{ \
+ char *endp; \
+ int result = 0; \
+ puts (str); \
+ FTYPE d = strto ## FSUF (str, &endp); \
+ if (!isnan (d)) \
+ { \
+ puts ("strto" #FSUF " did not return NAN"); \
+ result = 1; \
+ } \
+ if (issignaling (d)) \
+ { \
+ puts ("strto" #FSUF " returned a sNAN"); \
+ result = 1; \
+ } \
+ if (strcmp (endp, "something") != 0) \
+ { \
+ puts ("strto" #FSUF " set incorrect end pointer"); \
+ result = 1; \
+ } \
+ return result; \
+}
+
+GEN_TEST_STRTOD_FOREACH (TEST_STRTOD);
+
+static int
+do_test (void)
+{
+ int result = 0;
+
+ result |= STRTOD_TEST_FOREACH (test_strto, "NaN(blabla)something");
+ result |= STRTOD_TEST_FOREACH (test_strto, "NaN(1234)something");
+ /* UINT32_MAX. */
+ result |= STRTOD_TEST_FOREACH (test_strto, "NaN(4294967295)something");
+ /* UINT64_MAX. */
+ result |= STRTOD_TEST_FOREACH (test_strto,
+ "NaN(18446744073709551615)something");
+ /* The case of zero is special in that "something" has to be done to make the
+ mantissa different from zero, which would mean infinity instead of
+ NaN. */
+ result |= STRTOD_TEST_FOREACH (test_strto, "NaN(0)something");
+
+ return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strtol-locale-main.c b/REORG.TODO/stdlib/tst-strtol-locale-main.c
new file mode 100644
index 0000000000..5de61e7b16
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtol-locale-main.c
@@ -0,0 +1,87 @@
+/* Test strtol functions work with all ASCII letters in Turkish
+ locales (bug 19242).
+ Copyright (C) 2015-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <wchar.h>
+
+#define STR_(X) #X
+#define STR(X) STR_(X)
+#define FNPFXS STR (FNPFX)
+#define CONCAT_(X, Y) X ## Y
+#define CONCAT(X, Y) CONCAT_ (X, Y)
+#define FNX(FN) CONCAT (FNPFX, FN)
+
+#define TEST(LOC, STR, EXP_VAL, FN, TYPE, FMT) \
+ do \
+ { \
+ CHAR *ep; \
+ TYPE val = FNX (FN) (STR, &ep, 36); \
+ printf ("%s: " FNPFXS #FN " (" SFMT ") == " FMT "\n", LOC, STR, val); \
+ if (val == (TYPE) (EXP_VAL) && *ep == 0) \
+ printf ("PASS: %s: " FNPFXS #FN " (" SFMT ")\n", LOC, STR); \
+ else \
+ { \
+ printf ("FAIL: %s: " FNPFXS #FN " (" SFMT ")\n", LOC, STR); \
+ result = 1; \
+ } \
+ } \
+ while (0)
+
+static int
+test_one_locale (const char *loc)
+{
+ if (setlocale (LC_ALL, loc) == NULL)
+ {
+ printf ("setlocale (LC_ALL, \"%s\") failed\n", loc);
+ return 1;
+ }
+ int result = 0;
+ for (int i = 10; i < 36; i++)
+ {
+ CHAR s[2];
+ s[0] = L_('A') + i - 10;
+ s[1] = 0;
+ TEST (loc, s, i, l, long int, "%ld");
+ TEST (loc, s, i, ul, unsigned long int, "%lu");
+ TEST (loc, s, i, ll, long long int, "%lld");
+ TEST (loc, s, i, ull, unsigned long long int, "%llu");
+ s[0] = L_('a') + i - 10;
+ s[1] = 0;
+ TEST (loc, s, i, l, long int, "%ld");
+ TEST (loc, s, i, ul, unsigned long int, "%lu");
+ TEST (loc, s, i, ll, long long int, "%lld");
+ TEST (loc, s, i, ull, unsigned long long int, "%llu");
+ }
+ return result;
+}
+
+static int
+do_test (void)
+{
+ int result = 0;
+ result |= test_one_locale ("C");
+ result |= test_one_locale ("tr_TR.UTF-8");
+ result |= test_one_locale ("tr_TR.ISO-8859-9");
+ return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strtol-locale.c b/REORG.TODO/stdlib/tst-strtol-locale.c
new file mode 100644
index 0000000000..1d5092ba84
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtol-locale.c
@@ -0,0 +1,25 @@
+/* Test strtol functions work with all ASCII letters in Turkish
+ locales (bug 19242). Narrow string version.
+ Copyright (C) 2015-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#define CHAR char
+#define SFMT "\"%s\""
+#define FNPFX strto
+#define L_(C) C
+
+#include <tst-strtol-locale-main.c>
diff --git a/REORG.TODO/stdlib/tst-strtol.c b/REORG.TODO/stdlib/tst-strtol.c
new file mode 100644
index 0000000000..5b80622e07
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtol.c
@@ -0,0 +1,626 @@
+/* My bet is this was written by Chris Torek.
+ I reformatted and ansidecl-ized it, and tweaked it a little. */
+
+#include <ctype.h>
+#include <stdio.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+struct ltest
+ {
+ const char *str; /* Convert this. */
+ unsigned long int expect; /* To get this. */
+ int base; /* Use this base. */
+ char left; /* With this left over. */
+ int err; /* And this in errno. */
+ };
+static const struct ltest tests[] =
+ {
+ /* First, signed numbers: */
+ /* simple... */
+ {"123", 123, 0, 0, 0},
+ {"+123", 123, 0, 0, 0},
+ {" 123", 123, 0, 0, 0},
+ {" 123 ", 123, 0, ' ', 0},
+ {" -17", -17, 0, 0, 0},
+
+ /* implicit base... */
+ {"0123", 0123, 0, 0, 0},
+ {"0123a", 0123, 0, 'a', 0},
+ {"01239", 0123, 0, '9', 0},
+ {"0x123", 0x123, 0, 0, 0},
+ {"-0x123", -0x123, 0, 0, 0},
+ {"0x0xc", 0, 0, 'x', 0},
+ {" +0x123fg", 0x123f, 0, 'g', 0},
+
+ /* explicit base... */
+ {"123", 0x123, 16, 0, 0},
+ {"0x123", 0x123, 16, 0, 0},
+ {"123", 0123, 8, 0, 0},
+ {"0123", 0123, 8, 0, 0},
+ {"0123", 123, 10, 0, 0},
+ {"0x123", 0, 10, 'x', 0},
+
+ /* case insensitivity... */
+ {"abcd", 0xabcd, 16, 0, 0},
+ {"AbCd", 0xabcd, 16, 0, 0},
+ {"0xABCD", 0xabcd, 16, 0, 0},
+ {"0Xabcd", 0xabcd, 16, 0, 0},
+
+ /* odd bases... */
+ {"0xyz", 33 * 35 + 34, 35, 'z', 0},
+ {"yz!", 34 * 36 + 35, 36, '!', 0},
+ {"-yz", -(34*36 + 35), 36, 0, 0},
+ {"GhI4", ((16*20 + 17)*20 + 18)*20 + 4, 20, 0, 0},
+
+ /* extremes... */
+#if LONG_MAX == 0x7fffffff
+ {"2147483647", 2147483647, 0, 0, 0},
+ {"2147483648", 2147483647, 0, 0, ERANGE},
+ {"214748364888", 2147483647, 0, 0, ERANGE},
+ {"2147483650", 2147483647, 0, 0, ERANGE},
+ {"-2147483648", 0x80000000, 0, 0, 0},
+ {"-2147483649", 0x80000000, 0, 0, ERANGE},
+ {"0x1122334455z", 2147483647, 16, 'z', ERANGE},
+
+ {"1111111111111111111111111111111", 2147483647, 2, 0, 0},
+ {"10000000000000000000000000000000", 2147483647, 2, 0, ERANGE},
+ {"12112122212110202101", 2147483647, 3, 0, 0},
+ {"12112122212110202102", 2147483647, 3, 0, ERANGE},
+ {"1333333333333333", 2147483647, 4, 0, 0},
+ {"2000000000000000", 2147483647, 4, 0, ERANGE},
+ {"13344223434042", 2147483647, 5, 0, 0},
+ {"13344223434043", 2147483647, 5, 0, ERANGE},
+ {"553032005531", 2147483647, 6, 0, 0},
+ {"553032005532", 2147483647, 6, 0, ERANGE},
+ {"104134211161", 2147483647, 7, 0, 0},
+ {"104134211162", 2147483647, 7, 0, ERANGE},
+ {"17777777777", 2147483647, 8, 0, 0},
+ {"20000000000", 2147483647, 8, 0, ERANGE},
+ {"5478773671", 2147483647, 9, 0, 0},
+ {"5478773672", 2147483647, 9, 0, ERANGE},
+ {"2147483647", 2147483647, 10, 0, 0},
+ {"2147483648", 2147483647, 10, 0, ERANGE},
+ {"a02220281", 2147483647, 11, 0, 0},
+ {"a02220282", 2147483647, 11, 0, ERANGE},
+ {"4bb2308a7", 2147483647, 12, 0, 0},
+ {"4bb2308a8", 2147483647, 12, 0, ERANGE},
+ {"282ba4aaa", 2147483647, 13, 0, 0},
+ {"282ba4aab", 2147483647, 13, 0, ERANGE},
+ {"1652ca931", 2147483647, 14, 0, 0},
+ {"1652ca932", 2147483647, 14, 0, ERANGE},
+ {"c87e66b7", 2147483647, 15, 0, 0},
+ {"c87e66b8", 2147483647, 15, 0, ERANGE},
+ {"7fffffff", 2147483647, 16, 0, 0},
+ {"80000000", 2147483647, 16, 0, ERANGE},
+ {"53g7f548", 2147483647, 17, 0, 0},
+ {"53g7f549", 2147483647, 17, 0, ERANGE},
+ {"3928g3h1", 2147483647, 18, 0, 0},
+ {"3928g3h2", 2147483647, 18, 0, ERANGE},
+ {"27c57h32", 2147483647, 19, 0, 0},
+ {"27c57h33", 2147483647, 19, 0, ERANGE},
+ {"1db1f927", 2147483647, 20, 0, 0},
+ {"1db1f928", 2147483647, 20, 0, ERANGE},
+ {"140h2d91", 2147483647, 21, 0, 0},
+ {"140h2d92", 2147483647, 21, 0, ERANGE},
+ {"ikf5bf1", 2147483647, 22, 0, 0},
+ {"ikf5bf2", 2147483647, 22, 0, ERANGE},
+ {"ebelf95", 2147483647, 23, 0, 0},
+ {"ebelf96", 2147483647, 23, 0, ERANGE},
+ {"b5gge57", 2147483647, 24, 0, 0},
+ {"b5gge58", 2147483647, 24, 0, ERANGE},
+ {"8jmdnkm", 2147483647, 25, 0, 0},
+ {"8jmdnkn", 2147483647, 25, 0, ERANGE},
+ {"6oj8ion", 2147483647, 26, 0, 0},
+ {"6oj8ioo", 2147483647, 26, 0, ERANGE},
+ {"5ehncka", 2147483647, 27, 0, 0},
+ {"5ehnckb", 2147483647, 27, 0, ERANGE},
+ {"4clm98f", 2147483647, 28, 0, 0},
+ {"4clm98g", 2147483647, 28, 0, ERANGE},
+ {"3hk7987", 2147483647, 29, 0, 0},
+ {"3hk7988", 2147483647, 29, 0, ERANGE},
+ {"2sb6cs7", 2147483647, 30, 0, 0},
+ {"2sb6cs8", 2147483647, 30, 0, ERANGE},
+ {"2d09uc1", 2147483647, 31, 0, 0},
+ {"2d09uc2", 2147483647, 31, 0, ERANGE},
+ {"1vvvvvv", 2147483647, 32, 0, 0},
+ {"2000000", 2147483647, 32, 0, ERANGE},
+ {"1lsqtl1", 2147483647, 33, 0, 0},
+ {"1lsqtl2", 2147483647, 33, 0, ERANGE},
+ {"1d8xqrp", 2147483647, 34, 0, 0},
+ {"1d8xqrq", 2147483647, 34, 0, ERANGE},
+ {"15v22um", 2147483647, 35, 0, 0},
+ {"15v22un", 2147483647, 35, 0, ERANGE},
+ {"zik0zj", 2147483647, 36, 0, 0},
+ {"zik0zk", 2147483647, 36, 0, ERANGE},
+
+ {"-10000000000000000000000000000000", -2147483648, 2, 0, 0},
+ {"-10000000000000000000000000000001", -2147483648, 2, 0, ERANGE},
+ {"-12112122212110202102", -2147483648, 3, 0, 0},
+ {"-12112122212110202110", -2147483648, 3, 0, ERANGE},
+ {"-2000000000000000", -2147483648, 4, 0, 0},
+ {"-2000000000000001", -2147483648, 4, 0, ERANGE},
+ {"-13344223434043", -2147483648, 5, 0, 0},
+ {"-13344223434044", -2147483648, 5, 0, ERANGE},
+ {"-553032005532", -2147483648, 6, 0, 0},
+ {"-553032005533", -2147483648, 6, 0, ERANGE},
+ {"-104134211162", -2147483648, 7, 0, 0},
+ {"-104134211163", -2147483648, 7, 0, ERANGE},
+ {"-20000000000", -2147483648, 8, 0, },
+ {"-20000000001", -2147483648, 8, 0, ERANGE},
+ {"-5478773672", -2147483648, 9, 0, 0},
+ {"-5478773673", -2147483648, 9, 0, ERANGE},
+ {"-2147483648", -2147483648, 10, 0, 0},
+ {"-2147483649", -2147483648, 10, 0, ERANGE},
+ {"-a02220282", -2147483648, 11, 0, 0},
+ {"-a02220283", -2147483648, 11, 0, ERANGE},
+ {"-4bb2308a8", -2147483648, 12, 0, 0},
+ {"-4bb2308a9", -2147483648, 12, 0, ERANGE},
+ {"-282ba4aab", -2147483648, 13, 0, 0},
+ {"-282ba4aac", -2147483648, 13, 0, ERANGE},
+ {"-1652ca932", -2147483648, 14, 0, 0},
+ {"-1652ca933", -2147483648, 14, 0, ERANGE},
+ {"-c87e66b8", -2147483648, 15, 0, 0},
+ {"-c87e66b9", -2147483648, 15, 0, ERANGE},
+ {"-80000000", -2147483648, 16, 0, 0},
+ {"-80000001", -2147483648, 16, 0, ERANGE},
+ {"-53g7f549", -2147483648, 17, 0, 0},
+ {"-53g7f54a", -2147483648, 17, 0, ERANGE},
+ {"-3928g3h2", -2147483648, 18, 0, 0},
+ {"-3928g3h3", -2147483648, 18, 0, ERANGE},
+ {"-27c57h33", -2147483648, 19, 0, 0},
+ {"-27c57h34", -2147483648, 19, 0, ERANGE},
+ {"-1db1f928", -2147483648, 20, 0, 0},
+ {"-1db1f929", -2147483648, 20, 0, ERANGE},
+ {"-140h2d92", -2147483648, 21, 0, 0},
+ {"-140h2d93", -2147483648, 21, 0, ERANGE},
+ {"-ikf5bf2", -2147483648, 22, 0, 0},
+ {"-ikf5bf3", -2147483648, 22, 0, ERANGE},
+ {"-ebelf96", -2147483648, 23, 0, 0},
+ {"-ebelf97", -2147483648, 23, 0, ERANGE},
+ {"-b5gge58", -2147483648, 24, 0, 0},
+ {"-b5gge59", -2147483648, 24, 0, ERANGE},
+ {"-8jmdnkn", -2147483648, 25, 0, 0},
+ {"-8jmdnko", -2147483648, 25, 0, ERANGE},
+ {"-6oj8ioo", -2147483648, 26, 0, 0},
+ {"-6oj8iop", -2147483648, 26, 0, ERANGE},
+ {"-5ehnckb", -2147483648, 27, 0, 0},
+ {"-5ehnckc", -2147483648, 27, 0, ERANGE},
+ {"-4clm98g", -2147483648, 28, 0, 0},
+ {"-4clm98h", -2147483648, 28, 0, ERANGE},
+ {"-3hk7988", -2147483648, 29, 0, 0},
+ {"-3hk7989", -2147483648, 29, 0, ERANGE},
+ {"-2sb6cs8", -2147483648, 30, 0, 0},
+ {"-2sb6cs9", -2147483648, 30, 0, ERANGE},
+ {"-2d09uc2", -2147483648, 31, 0, 0},
+ {"-2d09uc3", -2147483648, 31, 0, ERANGE},
+ {"-2000000", -2147483648, 32, 0, 0},
+ {"-2000001", -2147483648, 32, 0, ERANGE},
+ {"-1lsqtl2", -2147483648, 33, 0, 0},
+ {"-1lsqtl3", -2147483648, 33, 0, ERANGE},
+ {"-1d8xqrq", -2147483648, 34, 0, 0},
+ {"-1d8xqrr", -2147483648, 34, 0, ERANGE},
+ {"-15v22un", -2147483648, 35, 0, 0},
+ {"-15v22uo", -2147483648, 35, 0, ERANGE},
+ {"-zik0zk", -2147483648, 36, 0, 0},
+ {"-zik0zl", -2147483648, 36, 0, ERANGE},
+#else
+ {"9223372036854775807", 9223372036854775807, 0, 0, 0},
+ {"9223372036854775808", 9223372036854775807, 0, 0, ERANGE},
+ {"922337203685477580777", 9223372036854775807, 0, 0, ERANGE},
+ {"9223372036854775810", 9223372036854775807, 0, 0, ERANGE},
+ {"-2147483648", -2147483648, 0, 0, 0},
+ {"-9223372036854775808", 0x8000000000000000, 0, 0, 0},
+ {"-9223372036854775809", 0x8000000000000000, 0, 0, ERANGE},
+ {"0x112233445566778899z", 9223372036854775807, 16, 'z', ERANGE},
+ {"0xFFFFFFFFFFFF00FF" , 9223372036854775807, 0, 0, ERANGE},
+
+ {"111111111111111111111111111111111111111111111111111111111111111",
+ 9223372036854775807, 2, 0, 0},
+ {"1000000000000000000000000000000000000000000000000000000000000000",
+ 9223372036854775807, 2, 0, ERANGE},
+ {"2021110011022210012102010021220101220221",
+ 9223372036854775807, 3, 0, 0},
+ {"2021110011022210012102010021220101220222",
+ 9223372036854775807, 3, 0, ERANGE},
+ {"13333333333333333333333333333333", 9223372036854775807, 4, 0, 0},
+ {"20000000000000000000000000000000", 9223372036854775807, 4, 0, ERANGE},
+ {"1104332401304422434310311212", 9223372036854775807, 5, 0, 0},
+ {"1104332401304422434310311213", 9223372036854775807, 5, 0, ERANGE},
+ {"1540241003031030222122211", 9223372036854775807, 6, 0, 0},
+ {"1540241003031030222122212", 9223372036854775807, 6, 0, ERANGE},
+ {"22341010611245052052300", 9223372036854775807, 7, 0, 0},
+ {"22341010611245052052301", 9223372036854775807, 7, 0, ERANGE},
+ {"777777777777777777777", 9223372036854775807, 8, 0, 0},
+ {"1000000000000000000000", 9223372036854775807, 8, 0, ERANGE},
+ {"67404283172107811827", 9223372036854775807, 9, 0, 0},
+ {"67404283172107811828", 9223372036854775807, 9, 0, ERANGE},
+ {"9223372036854775807", 9223372036854775807, 10, 0, 0},
+ {"9223372036854775808", 9223372036854775807, 10, 0, ERANGE},
+ {"1728002635214590697", 9223372036854775807, 11, 0, 0},
+ {"1728002635214590698", 9223372036854775807, 11, 0, ERANGE},
+ {"41a792678515120367", 9223372036854775807, 12, 0, 0},
+ {"41a792678515120368", 9223372036854775807, 12, 0, ERANGE},
+ {"10b269549075433c37", 9223372036854775807, 13, 0, 0},
+ {"10b269549075433c38", 9223372036854775807, 13, 0, ERANGE},
+ {"4340724c6c71dc7a7", 9223372036854775807, 14, 0, 0},
+ {"4340724c6c71dc7a8", 9223372036854775807, 14, 0, ERANGE},
+ {"160e2ad3246366807", 9223372036854775807, 15, 0, 0},
+ {"160e2ad3246366808", 9223372036854775807, 15, 0, ERANGE},
+ {"7fffffffffffffff", 9223372036854775807, 16, 0, 0},
+ {"8000000000000000", 9223372036854775807, 16, 0, ERANGE},
+ {"33d3d8307b214008", 9223372036854775807, 17, 0, 0},
+ {"33d3d8307b214009", 9223372036854775807, 17, 0, ERANGE},
+ {"16agh595df825fa7", 9223372036854775807, 18, 0, 0},
+ {"16agh595df825fa8", 9223372036854775807, 18, 0, ERANGE},
+ {"ba643dci0ffeehh", 9223372036854775807, 19, 0, 0},
+ {"ba643dci0ffeehi", 9223372036854775807, 19, 0, ERANGE},
+ {"5cbfjia3fh26ja7", 9223372036854775807, 20, 0, 0},
+ {"5cbfjia3fh26ja8", 9223372036854775807, 20, 0, ERANGE},
+ {"2heiciiie82dh97", 9223372036854775807, 21, 0, 0},
+ {"2heiciiie82dh98", 9223372036854775807, 21, 0, ERANGE},
+ {"1adaibb21dckfa7", 9223372036854775807, 22, 0, 0},
+ {"1adaibb21dckfa8", 9223372036854775807, 22, 0, ERANGE},
+ {"i6k448cf4192c2", 9223372036854775807, 23, 0, 0},
+ {"i6k448cf4192c3", 9223372036854775807, 23, 0, ERANGE},
+ {"acd772jnc9l0l7", 9223372036854775807, 24, 0, 0},
+ {"acd772jnc9l0l8", 9223372036854775807, 24, 0, ERANGE},
+ {"64ie1focnn5g77", 9223372036854775807, 25, 0, 0},
+ {"64ie1focnn5g78", 9223372036854775807, 25, 0, ERANGE},
+ {"3igoecjbmca687", 9223372036854775807, 26, 0, 0},
+ {"3igoecjbmca688", 9223372036854775807, 26, 0, ERANGE},
+ {"27c48l5b37oaop", 9223372036854775807, 27, 0, 0},
+ {"27c48l5b37oaoq", 9223372036854775807, 27, 0, ERANGE},
+ {"1bk39f3ah3dmq7", 9223372036854775807, 28, 0, 0},
+ {"1bk39f3ah3dmq8", 9223372036854775807, 28, 0, ERANGE},
+ {"q1se8f0m04isb", 9223372036854775807, 29, 0, 0},
+ {"q1se8f0m04isc", 9223372036854775807, 29, 0, ERANGE},
+ {"hajppbc1fc207", 9223372036854775807, 30, 0, 0},
+ {"hajppbc1fc208", 9223372036854775807, 30, 0, ERANGE},
+ {"bm03i95hia437", 9223372036854775807, 31, 0, 0},
+ {"bm03i95hia438", 9223372036854775807, 31, 0, ERANGE},
+ {"7vvvvvvvvvvvv", 9223372036854775807, 32, 0, 0},
+ {"8000000000000", 9223372036854775807, 32, 0, ERANGE},
+ {"5hg4ck9jd4u37", 9223372036854775807, 33, 0, 0},
+ {"5hg4ck9jd4u38", 9223372036854775807, 33, 0, ERANGE},
+ {"3tdtk1v8j6tpp", 9223372036854775807, 34, 0, 0},
+ {"3tdtk1v8j6tpq", 9223372036854775807, 34, 0, ERANGE},
+ {"2pijmikexrxp7", 9223372036854775807, 35, 0, 0},
+ {"2pijmikexrxp8", 9223372036854775807, 35, 0, ERANGE},
+ {"1y2p0ij32e8e7", 9223372036854775807, 36, 0, 0},
+ {"1y2p0ij32e8e8", 9223372036854775807, 36, 0, ERANGE},
+
+ {"-1000000000000000000000000000000000000000000000000000000000000000",
+ -9223372036854775808ull, 2, 0, 0},
+ {"-1000000000000000000000000000000000000000000000000000000000000001",
+ -9223372036854775808ull, 2, 0, ERANGE},
+ {"-2021110011022210012102010021220101220222",
+ -9223372036854775808ull, 3, 0, 0},
+ {"-2021110011022210012102010021220101221000",
+ -9223372036854775808ull, 3, 0, ERANGE},
+ {"-20000000000000000000000000000000", -9223372036854775808ull, 4, 0, 0},
+ {"-20000000000000000000000000000001", -9223372036854775808ull, 4, 0, ERANGE},
+ {"-1104332401304422434310311213", -9223372036854775808ull, 5, 0, 0},
+ {"-1104332401304422434310311214", -9223372036854775808ull, 5, 0, ERANGE},
+ {"-1540241003031030222122212", -9223372036854775808ull, 6, 0, 0},
+ {"-1540241003031030222122213", -9223372036854775808ull, 6, 0, ERANGE},
+ {"-22341010611245052052301", -9223372036854775808ull, 7, 0, 0},
+ {"-22341010611245052052302", -9223372036854775808ull, 7, 0, ERANGE},
+ {"-1000000000000000000000", -9223372036854775808ull, 8, 0, 0},
+ {"-1000000000000000000001", -9223372036854775808ull, 8, 0, ERANGE},
+ {"-67404283172107811828", -9223372036854775808ull, 9, 0, 0},
+ {"-67404283172107811830", -9223372036854775808ull, 9, 0, ERANGE},
+ {"-9223372036854775808", -9223372036854775808ull, 10, 0, 0},
+ {"-9223372036854775809", -9223372036854775808ull, 10, 0, ERANGE},
+ {"-1728002635214590698", -9223372036854775808ull, 11, 0, 0},
+ {"-1728002635214590699", -9223372036854775808ull, 11, 0, ERANGE},
+ {"-41a792678515120368", -9223372036854775808ull, 12, 0, 0},
+ {"-41a792678515120369", -9223372036854775808ull, 12, 0, ERANGE},
+ {"-10b269549075433c38", -9223372036854775808ull, 13, 0, 0},
+ {"-10b269549075433c39", -9223372036854775808ull, 13, 0, ERANGE},
+ {"-4340724c6c71dc7a8", -9223372036854775808ull, 14, 0, 0},
+ {"-4340724c6c71dc7a9", -9223372036854775808ull, 14, 0, ERANGE},
+ {"-160e2ad3246366808", -9223372036854775808ull, 15, 0, 0},
+ {"-160e2ad3246366809", -9223372036854775808ull, 15, 0, ERANGE},
+ {"-8000000000000000", -9223372036854775808ull, 16, 0, 0},
+ {"-8000000000000001", -9223372036854775808ull, 16, 0, ERANGE},
+ {"-33d3d8307b214009", -9223372036854775808ull, 17, 0, 0},
+ {"-33d3d8307b21400a", -9223372036854775808ull, 17, 0, ERANGE},
+ {"-16agh595df825fa8", -9223372036854775808ull, 18, 0, 0},
+ {"-16agh595df825fa9", -9223372036854775808ull, 18, 0, ERANGE},
+ {"-ba643dci0ffeehi", -9223372036854775808ull, 19, 0, 0},
+ {"-ba643dci0ffeei0", -9223372036854775808ull, 19, 0, ERANGE},
+ {"-5cbfjia3fh26ja8", -9223372036854775808ull, 20, 0, 0},
+ {"-5cbfjia3fh26ja9", -9223372036854775808ull, 20, 0, ERANGE},
+ {"-2heiciiie82dh98", -9223372036854775808ull, 21, 0, 0},
+ {"-2heiciiie82dh99", -9223372036854775808ull, 21, 0, ERANGE},
+ {"-1adaibb21dckfa8", -9223372036854775808ull, 22, 0, 0},
+ {"-1adaibb21dckfa9", -9223372036854775808ull, 22, 0, ERANGE},
+ {"-i6k448cf4192c3", -9223372036854775808ull, 23, 0, 0},
+ {"-i6k448cf4192c4", -9223372036854775808ull, 23, 0, ERANGE},
+ {"-acd772jnc9l0l8", -9223372036854775808ull, 24, 0, 0},
+ {"-acd772jnc9l0l9", -9223372036854775808ull, 24, 0, ERANGE},
+ {"-64ie1focnn5g78", -9223372036854775808ull, 25, 0, 0},
+ {"-64ie1focnn5g79", -9223372036854775808ull, 25, 0, ERANGE},
+ {"-3igoecjbmca688", -9223372036854775808ull, 26, 0, 0},
+ {"-3igoecjbmca689", -9223372036854775808ull, 26, 0, ERANGE},
+ {"-27c48l5b37oaoq", -9223372036854775808ull, 27, 0, 0},
+ {"-27c48l5b37oap0", -9223372036854775808ull, 27, 0, ERANGE},
+ {"-1bk39f3ah3dmq8", -9223372036854775808ull, 28, 0, 0},
+ {"-1bk39f3ah3dmq9", -9223372036854775808ull, 28, 0, ERANGE},
+ {"-q1se8f0m04isc", -9223372036854775808ull, 29, 0, 0},
+ {"-q1se8f0m04isd", -9223372036854775808ull, 29, 0, ERANGE},
+ {"-hajppbc1fc208", -9223372036854775808ull, 30, 0, 0},
+ {"-hajppbc1fc209", -9223372036854775808ull, 30, 0, ERANGE},
+ {"-bm03i95hia438", -9223372036854775808ull, 31, 0, 0},
+ {"-bm03i95hia439", -9223372036854775808ull, 31, 0, ERANGE},
+ {"-8000000000000", -9223372036854775808ull, 32, 0, 0},
+ {"-8000000000001", -9223372036854775808ull, 32, 0, ERANGE},
+ {"-5hg4ck9jd4u38", -9223372036854775808ull, 33, 0, 0},
+ {"-5hg4ck9jd4u39", -9223372036854775808ull, 33, 0, ERANGE},
+ {"-3tdtk1v8j6tpq", -9223372036854775808ull, 34, 0, 0},
+ {"-3tdtk1v8j6tpr", -9223372036854775808ull, 34, 0, ERANGE},
+ {"-2pijmikexrxp8", -9223372036854775808ull, 35, 0, 0},
+ {"-2pijmikexrxp9", -9223372036854775808ull, 35, 0, ERANGE},
+ {"-1y2p0ij32e8e8", -9223372036854775808ull, 36, 0, 0},
+ {"-1y2p0ij32e8e9", -9223372036854775808ull, 36, 0, ERANGE},
+#endif
+ {NULL, 0, 0, 0, 0},
+
+ /* Then unsigned. */
+ {" 0", 0, 0, 0, 0},
+ {"0xffffffffg", 0xffffffff, 0, 'g', 0},
+#if LONG_MAX == 0x7fffffff
+ {"-0xfedcba98", 0x01234568, 0, 0, 0},
+ {"0xf1f2f3f4f5", 0xffffffff, 0, 0, ERANGE},
+ {"-0x123456789", 0xffffffff, 0, 0, ERANGE},
+
+ {"11111111111111111111111111111111", 0xffffffff, 2, 0, 0},
+ {"100000000000000000000000000000000", 0xffffffff, 2, 0, ERANGE},
+ {"102002022201221111210", 0xffffffff, 3, 0, 0},
+ {"102002022201221111211", 0xffffffff, 3, 0, ERANGE},
+ {"3333333333333333", 0xffffffff, 4, 0, 0},
+ {"10000000000000000", 0xffffffff, 4, 0, ERANGE},
+ {"32244002423140", 0xffffffff, 5, 0, 0},
+ {"32244002423141", 0xffffffff, 5, 0, ERANGE},
+ {"1550104015503", 0xffffffff, 6, 0, 0},
+ {"1550104015504", 0xffffffff, 6, 0, ERANGE},
+ {"211301422353", 0xffffffff, 7, 0, 0},
+ {"211301422354", 0xffffffff, 7, 0, ERANGE},
+ {"37777777777", 0xffffffff, 8, 0, 0},
+ {"40000000000", 0xffffffff, 8, 0, ERANGE},
+ {"12068657453", 0xffffffff, 9, 0, 0},
+ {"12068657454", 0xffffffff, 9, 0, ERANGE},
+ {"4294967295", 0xffffffff, 10, 0, 0},
+ {"4294967296", 0xffffffff, 10, 0, ERANGE},
+ {"1904440553", 0xffffffff, 11, 0, 0},
+ {"1904440554", 0xffffffff, 11, 0, ERANGE},
+ {"9ba461593", 0xffffffff, 12, 0, 0},
+ {"9ba461594", 0xffffffff, 12, 0, ERANGE},
+ {"535a79888", 0xffffffff, 13, 0, 0},
+ {"535a79889", 0xffffffff, 13, 0, ERANGE},
+ {"2ca5b7463", 0xffffffff, 14, 0, 0},
+ {"2ca5b7464", 0xffffffff, 14, 0, ERANGE},
+ {"1a20dcd80", 0xffffffff, 15, 0, 0},
+ {"1a20dcd81", 0xffffffff, 15, 0, ERANGE},
+ {"ffffffff", 0xffffffff, 16, 0, 0},
+ {"100000000", 0xffffffff, 16, 0, ERANGE},
+ {"a7ffda90", 0xffffffff, 17, 0, 0},
+ {"a7ffda91", 0xffffffff, 17, 0, ERANGE},
+ {"704he7g3", 0xffffffff, 18, 0, 0},
+ {"704he7g4", 0xffffffff, 18, 0, ERANGE},
+ {"4f5aff65", 0xffffffff, 19, 0, 0},
+ {"4f5aff66", 0xffffffff, 19, 0, ERANGE},
+ {"3723ai4f", 0xffffffff, 20, 0, 0},
+ {"3723ai4g", 0xffffffff, 20, 0, ERANGE},
+ {"281d55i3", 0xffffffff, 21, 0, 0},
+ {"281d55i4", 0xffffffff, 21, 0, ERANGE},
+ {"1fj8b183", 0xffffffff, 22, 0, 0},
+ {"1fj8b184", 0xffffffff, 22, 0, ERANGE},
+ {"1606k7ib", 0xffffffff, 23, 0, 0},
+ {"1606k7ic", 0xffffffff, 23, 0, ERANGE},
+ {"mb994af", 0xffffffff, 24, 0, 0},
+ {"mb994ag", 0xffffffff, 24, 0, ERANGE},
+ {"hek2mgk", 0xffffffff, 25, 0, 0},
+ {"hek2mgl", 0xffffffff, 25, 0, ERANGE},
+ {"dnchbnl", 0xffffffff, 26, 0, 0},
+ {"dnchbnm", 0xffffffff, 26, 0, ERANGE},
+ {"b28jpdl", 0xffffffff, 27, 0, 0},
+ {"b28jpdm", 0xffffffff, 27, 0, ERANGE},
+ {"8pfgih3", 0xffffffff, 28, 0, 0},
+ {"8pfgih4", 0xffffffff, 28, 0, ERANGE},
+ {"76beigf", 0xffffffff, 29, 0, 0},
+ {"76beigg", 0xffffffff, 29, 0, ERANGE},
+ {"5qmcpqf", 0xffffffff, 30, 0, 0},
+ {"5qmcpqg", 0xffffffff, 30, 0, ERANGE},
+ {"4q0jto3", 0xffffffff, 31, 0, 0},
+ {"4q0jto4", 0xffffffff, 31, 0, ERANGE},
+ {"3vvvvvv", 0xffffffff, 32, 0, 0},
+ {"4000000", 0xffffffff, 32, 0, ERANGE},
+ {"3aokq93", 0xffffffff, 33, 0, 0},
+ {"3aokq94", 0xffffffff, 33, 0, ERANGE},
+ {"2qhxjlh", 0xffffffff, 34, 0, 0},
+ {"2qhxjli", 0xffffffff, 34, 0, ERANGE},
+ {"2br45qa", 0xffffffff, 35, 0, 0},
+ {"2br45qb", 0xffffffff, 35, 0, ERANGE},
+ {"1z141z3", 0xffffffff, 36, 0, 0},
+ {"1z141z4", 0xffffffff, 36, 0, ERANGE},
+#else
+ {"0xffffffffffffffffg", 0xffffffffffffffff, 0, 'g', 0},
+ {"-0xfedcba987654321", 0xf0123456789abcdf, 0, 0, 0},
+ {"0xf1f2f3f4f5f6f7f8f9", 0xffffffffffffffff, 0, 0, ERANGE},
+ {"-0x123456789abcdef01", 0xffffffffffffffff, 0, 0, ERANGE},
+
+ {"1111111111111111111111111111111111111111111111111111111111111111",
+ 0xffffffffffffffff, 2, 0, 0},
+ {"10000000000000000000000000000000000000000000000000000000000000000",
+ 0xffffffffffffffff, 2, 0, ERANGE},
+ {"11112220022122120101211020120210210211220",
+ 0xffffffffffffffff, 3, 0, 0},
+ {"11112220022122120101211020120210210211221",
+ 0xffffffffffffffff, 3, 0, ERANGE},
+ {"33333333333333333333333333333333", 0xffffffffffffffff, 4, 0, 0},
+ {"100000000000000000000000000000000", 0xffffffffffffffff, 4, 0, ERANGE},
+ {"2214220303114400424121122430", 0xffffffffffffffff, 5, 0, 0},
+ {"2214220303114400424121122431", 0xffffffffffffffff, 5, 0, ERANGE},
+ {"3520522010102100444244423", 0xffffffffffffffff, 6, 0, 0},
+ {"3520522010102100444244424", 0xffffffffffffffff, 6, 0, ERANGE},
+ {"45012021522523134134601", 0xffffffffffffffff, 7, 0, 0},
+ {"45012021522523134134602", 0xffffffffffffffff, 7, 0, ERANGE},
+ {"1777777777777777777777", 0xffffffffffffffff, 8, 0, 0},
+ {"2000000000000000000000", 0xffffffffffffffff, 8, 0, ERANGE},
+ {"145808576354216723756", 0xffffffffffffffff, 9, 0, 0},
+ {"145808576354216723757", 0xffffffffffffffff, 9, 0, ERANGE},
+ {"18446744073709551615", 0xffffffffffffffff, 10, 0, 0},
+ {"18446744073709551616", 0xffffffffffffffff, 10, 0, ERANGE},
+ {"335500516a429071284", 0xffffffffffffffff, 11, 0, 0},
+ {"335500516a429071285", 0xffffffffffffffff, 11, 0, ERANGE},
+ {"839365134a2a240713", 0xffffffffffffffff, 12, 0, 0},
+ {"839365134a2a240714", 0xffffffffffffffff, 12, 0, ERANGE},
+ {"219505a9511a867b72", 0xffffffffffffffff, 13, 0, 0},
+ {"219505a9511a867b73", 0xffffffffffffffff, 13, 0, ERANGE},
+ {"8681049adb03db171", 0xffffffffffffffff, 14, 0, 0},
+ {"8681049adb03db172", 0xffffffffffffffff, 14, 0, ERANGE},
+ {"2c1d56b648c6cd110", 0xffffffffffffffff, 15, 0, 0},
+ {"2c1d56b648c6cd111", 0xffffffffffffffff, 15, 0, ERANGE},
+ {"ffffffffffffffff", 0xffffffffffffffff, 16, 0, 0},
+ {"10000000000000000", 0xffffffffffffffff, 16, 0, ERANGE},
+ {"67979g60f5428010", 0xffffffffffffffff, 17, 0, 0},
+ {"67979g60f5428011", 0xffffffffffffffff, 17, 0, ERANGE},
+ {"2d3fgb0b9cg4bd2f", 0xffffffffffffffff, 18, 0, 0},
+ {"2d3fgb0b9cg4bd2g", 0xffffffffffffffff, 18, 0, ERANGE},
+ {"141c8786h1ccaagg", 0xffffffffffffffff, 19, 0, 0},
+ {"141c8786h1ccaagh", 0xffffffffffffffff, 19, 0, ERANGE},
+ {"b53bjh07be4dj0f", 0xffffffffffffffff, 20, 0, 0},
+ {"b53bjh07be4dj0g", 0xffffffffffffffff, 20, 0, ERANGE},
+ {"5e8g4ggg7g56dif", 0xffffffffffffffff, 21, 0, 0},
+ {"5e8g4ggg7g56dig", 0xffffffffffffffff, 21, 0, ERANGE},
+ {"2l4lf104353j8kf", 0xffffffffffffffff, 22, 0, 0},
+ {"2l4lf104353j8kg", 0xffffffffffffffff, 22, 0, ERANGE},
+ {"1ddh88h2782i515", 0xffffffffffffffff, 23, 0, 0},
+ {"1ddh88h2782i516", 0xffffffffffffffff, 23, 0, ERANGE},
+ {"l12ee5fn0ji1if", 0xffffffffffffffff, 24, 0, 0},
+ {"l12ee5fn0ji1ig", 0xffffffffffffffff, 24, 0, ERANGE},
+ {"c9c336o0mlb7ef", 0xffffffffffffffff, 25, 0, 0},
+ {"c9c336o0mlb7eg", 0xffffffffffffffff, 25, 0, ERANGE},
+ {"7b7n2pcniokcgf", 0xffffffffffffffff, 26, 0, 0},
+ {"7b7n2pcniokcgg", 0xffffffffffffffff, 26, 0, ERANGE},
+ {"4eo8hfam6fllmo", 0xffffffffffffffff, 27, 0, 0},
+ {"4eo8hfam6fllmp", 0xffffffffffffffff, 27, 0, ERANGE},
+ {"2nc6j26l66rhof", 0xffffffffffffffff, 28, 0, 0},
+ {"2nc6j26l66rhog", 0xffffffffffffffff, 28, 0, ERANGE},
+ {"1n3rsh11f098rn", 0xffffffffffffffff, 29, 0, 0},
+ {"1n3rsh11f098ro", 0xffffffffffffffff, 29, 0, ERANGE},
+ {"14l9lkmo30o40f", 0xffffffffffffffff, 30, 0, 0},
+ {"14l9lkmo30o40g", 0xffffffffffffffff, 30, 0, ERANGE},
+ {"nd075ib45k86f", 0xffffffffffffffff, 31, 0, 0},
+ {"nd075ib45k86g", 0xffffffffffffffff, 31, 0, ERANGE},
+ {"fvvvvvvvvvvvv", 0xffffffffffffffff, 32, 0, 0},
+ {"g000000000000", 0xffffffffffffffff, 32, 0, ERANGE},
+ {"b1w8p7j5q9r6f", 0xffffffffffffffff, 33, 0, 0},
+ {"b1w8p7j5q9r6g", 0xffffffffffffffff, 33, 0, ERANGE},
+ {"7orp63sh4dphh", 0xffffffffffffffff, 34, 0, 0},
+ {"7orp63sh4dphi", 0xffffffffffffffff, 34, 0, ERANGE},
+ {"5g24a25twkwff", 0xffffffffffffffff, 35, 0, 0},
+ {"5g24a25twkwfg", 0xffffffffffffffff, 35, 0, ERANGE},
+ {"3w5e11264sgsf", 0xffffffffffffffff, 36, 0, 0},
+ {"3w5e11264sgsg", 0xffffffffffffffff, 36, 0, ERANGE},
+#endif
+ {NULL, 0, 0, 0, 0},
+ };
+
+/* Prototypes for local functions. */
+static void expand (char *dst, int c);
+
+static int
+do_test (void)
+{
+ const struct ltest *lt;
+ char *ep;
+ int status = 0;
+ int save_errno;
+
+ for (lt = tests; lt->str != NULL; ++lt)
+ {
+ long int l;
+
+ errno = 0;
+ l = strtol (lt->str, &ep, lt->base);
+ save_errno = errno;
+ printf ("strtol(\"%s\", , %d) test %u",
+ lt->str, lt->base, (unsigned int) (lt - tests));
+ if (l == (long int) lt->expect && *ep == lt->left
+ && save_errno == lt->err)
+ puts("\tOK");
+ else
+ {
+ puts("\tBAD");
+ if (l != (long int) lt->expect)
+ printf(" returns %ld, expected %ld\n",
+ l, (long int) lt->expect);
+ if (lt->left != *ep)
+ {
+ char exp1[5], exp2[5];
+ expand (exp1, *ep);
+ expand (exp2, lt->left);
+ printf (" leaves '%s', expected '%s'\n", exp1, exp2);
+ }
+ if (save_errno != lt->err)
+ printf (" errno %d (%s) instead of %d (%s)\n",
+ save_errno, strerror (save_errno),
+ lt->err, strerror (lt->err));
+ status = 1;
+ }
+ }
+
+ for (++lt; lt->str != NULL; lt++)
+ {
+ unsigned long int ul;
+
+ errno = 0;
+ ul = strtoul (lt->str, &ep, lt->base);
+ save_errno = errno;
+ printf ("strtoul(\"%s\", , %d) test %u",
+ lt->str, lt->base, (unsigned int) (lt - tests));
+ if (ul == lt->expect && *ep == lt->left && save_errno == lt->err)
+ puts("\tOK");
+ else
+ {
+ puts ("\tBAD");
+ if (ul != lt->expect)
+ printf (" returns %lu, expected %lu\n",
+ ul, lt->expect);
+ if (lt->left != *ep)
+ {
+ char exp1[5], exp2[5];
+ expand (exp1, *ep);
+ expand (exp2, lt->left);
+ printf (" leaves '%s', expected '%s'\n", exp1, exp2);
+ }
+ if (save_errno != lt->err)
+ printf (" errno %d (%s) instead of %d (%s)\n",
+ save_errno, strerror (save_errno),
+ lt->err, strerror (lt->err));
+ status = 1;
+ }
+ }
+
+ return status ? EXIT_FAILURE : EXIT_SUCCESS;
+}
+
+static void
+expand (char *dst, int c)
+{
+ if (isprint (c))
+ {
+ dst[0] = c;
+ dst[1] = '\0';
+ }
+ else
+ (void) sprintf (dst, "%#.3o", (unsigned int) c);
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-strtoll.c b/REORG.TODO/stdlib/tst-strtoll.c
new file mode 100644
index 0000000000..de39ee3a5e
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-strtoll.c
@@ -0,0 +1,401 @@
+/* My bet is this was written by Chris Torek.
+ I reformatted and ansidecl-ized it, and tweaked it a little. */
+
+#include <ctype.h>
+#include <stdio.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+
+struct ltest
+ {
+ const char *str; /* Convert this. */
+ unsigned long long int expect; /* To get this. */
+ int base; /* Use this base. */
+ char left; /* With this left over. */
+ int err; /* And this in errno. */
+ };
+static const struct ltest tests[] =
+ {
+ /* First, signed numbers: */
+ /* simple... */
+ {"123", 123, 0, 0, 0},
+ {"+123", 123, 0, 0, 0},
+ {" 123", 123, 0, 0, 0},
+ {" 123 ", 123, 0, ' ', 0},
+ {" -17", -17, 0, 0, 0},
+
+ /* implicit base... */
+ {"0123", 0123, 0, 0, 0},
+ {"0123a", 0123, 0, 'a', 0},
+ {"01239", 0123, 0, '9', 0},
+ {"0x123", 0x123, 0, 0, 0},
+ {"-0x123", -0x123, 0, 0, 0},
+ {"0x0xc", 0, 0, 'x', 0},
+ {" +0x123fg", 0x123f, 0, 'g', 0},
+
+ /* explicit base... */
+ {"123", 0x123, 16, 0, 0},
+ {"0x123", 0x123, 16, 0, 0},
+ {"123", 0123, 8, 0, 0},
+ {"0123", 0123, 8, 0, 0},
+ {"0123", 123, 10, 0, 0},
+ {"0x123", 0, 10, 'x', 0},
+
+ /* case insensitivity... */
+ {"abcd", 0xabcd, 16, 0, 0},
+ {"AbCd", 0xabcd, 16, 0, 0},
+ {"0xABCD", 0xabcd, 16, 0, 0},
+ {"0Xabcd", 0xabcd, 16, 0, 0},
+
+ /* odd bases... */
+ {"0xyz", 33 * 35 + 34, 35, 'z', 0},
+ {"yz!", 34 * 36 + 35, 36, '!', 0},
+ {"-yz", -(34*36 + 35), 36, 0, 0},
+ {"GhI4", ((16*20 + 17)*20 + 18)*20 + 4, 20, 0, 0},
+
+ /* special case for the 32-bit version of strtoll,
+ from a ncftp configure test */
+ {"99000000001", 1000000000ll * 99ll + 1ll, 0, 0},
+
+ /* extremes... */
+ {"9223372036854775807", 9223372036854775807ll, 0, 0, 0},
+ {"9223372036854775808", 9223372036854775807ll, 0, 0, ERANGE},
+ {"922337203685477580777", 9223372036854775807ll, 0, 0, ERANGE},
+ {"9223372036854775810", 9223372036854775807ll, 0, 0, ERANGE},
+ {"-2147483648", -2147483648ll, 0, 0, 0},
+ {"-9223372036854775808", -9223372036854775807ll - 1, 0, 0, 0},
+ {"-9223372036854775809", -9223372036854775807ll - 1, 0, 0, ERANGE},
+ {"0x112233445566778899z", 9223372036854775807ll, 16, 'z', ERANGE},
+ {"0xFFFFFFFFFFFF00FF" , 9223372036854775807ll, 0, 0, ERANGE},
+
+ {"111111111111111111111111111111111111111111111111111111111111111",
+ 9223372036854775807ll, 2, 0, 0},
+ {"1000000000000000000000000000000000000000000000000000000000000000",
+ 9223372036854775807ll, 2, 0, ERANGE},
+ {"2021110011022210012102010021220101220221",
+ 9223372036854775807ll, 3, 0, 0},
+ {"2021110011022210012102010021220101220222",
+ 9223372036854775807ll, 3, 0, ERANGE},
+ {"13333333333333333333333333333333", 9223372036854775807ll, 4, 0, 0},
+ {"20000000000000000000000000000000", 9223372036854775807ll, 4, 0, ERANGE},
+ {"1104332401304422434310311212", 9223372036854775807ll, 5, 0, 0},
+ {"1104332401304422434310311213", 9223372036854775807ll, 5, 0, ERANGE},
+ {"1540241003031030222122211", 9223372036854775807ll, 6, 0, 0},
+ {"1540241003031030222122212", 9223372036854775807ll, 6, 0, ERANGE},
+ {"22341010611245052052300", 9223372036854775807ll, 7, 0, 0},
+ {"22341010611245052052301", 9223372036854775807ll, 7, 0, ERANGE},
+ {"777777777777777777777", 9223372036854775807ll, 8, 0, 0},
+ {"1000000000000000000000", 9223372036854775807ll, 8, 0, ERANGE},
+ {"67404283172107811827", 9223372036854775807ll, 9, 0, 0},
+ {"67404283172107811828", 9223372036854775807ll, 9, 0, ERANGE},
+ {"9223372036854775807", 9223372036854775807ll, 10, 0, 0},
+ {"9223372036854775808", 9223372036854775807ll, 10, 0, ERANGE},
+ {"1728002635214590697", 9223372036854775807ll, 11, 0, 0},
+ {"1728002635214590698", 9223372036854775807ll, 11, 0, ERANGE},
+ {"41a792678515120367", 9223372036854775807ll, 12, 0, 0},
+ {"41a792678515120368", 9223372036854775807ll, 12, 0, ERANGE},
+ {"10b269549075433c37", 9223372036854775807ll, 13, 0, 0},
+ {"10b269549075433c38", 9223372036854775807ll, 13, 0, ERANGE},
+ {"4340724c6c71dc7a7", 9223372036854775807ll, 14, 0, 0},
+ {"4340724c6c71dc7a8", 9223372036854775807ll, 14, 0, ERANGE},
+ {"160e2ad3246366807", 9223372036854775807ll, 15, 0, 0},
+ {"160e2ad3246366808", 9223372036854775807ll, 15, 0, ERANGE},
+ {"7fffffffffffffff", 9223372036854775807ll, 16, 0, 0},
+ {"8000000000000000", 9223372036854775807ll, 16, 0, ERANGE},
+ {"33d3d8307b214008", 9223372036854775807ll, 17, 0, 0},
+ {"33d3d8307b214009", 9223372036854775807ll, 17, 0, ERANGE},
+ {"16agh595df825fa7", 9223372036854775807ll, 18, 0, 0},
+ {"16agh595df825fa8", 9223372036854775807ll, 18, 0, ERANGE},
+ {"ba643dci0ffeehh", 9223372036854775807ll, 19, 0, 0},
+ {"ba643dci0ffeehi", 9223372036854775807ll, 19, 0, ERANGE},
+ {"5cbfjia3fh26ja7", 9223372036854775807ll, 20, 0, 0},
+ {"5cbfjia3fh26ja8", 9223372036854775807ll, 20, 0, ERANGE},
+ {"2heiciiie82dh97", 9223372036854775807ll, 21, 0, 0},
+ {"2heiciiie82dh98", 9223372036854775807ll, 21, 0, ERANGE},
+ {"1adaibb21dckfa7", 9223372036854775807ll, 22, 0, 0},
+ {"1adaibb21dckfa8", 9223372036854775807ll, 22, 0, ERANGE},
+ {"i6k448cf4192c2", 9223372036854775807ll, 23, 0, 0},
+ {"i6k448cf4192c3", 9223372036854775807ll, 23, 0, ERANGE},
+ {"acd772jnc9l0l7", 9223372036854775807ll, 24, 0, 0},
+ {"acd772jnc9l0l8", 9223372036854775807ll, 24, 0, ERANGE},
+ {"64ie1focnn5g77", 9223372036854775807ll, 25, 0, 0},
+ {"64ie1focnn5g78", 9223372036854775807ll, 25, 0, ERANGE},
+ {"3igoecjbmca687", 9223372036854775807ll, 26, 0, 0},
+ {"3igoecjbmca688", 9223372036854775807ll, 26, 0, ERANGE},
+ {"27c48l5b37oaop", 9223372036854775807ll, 27, 0, 0},
+ {"27c48l5b37oaoq", 9223372036854775807ll, 27, 0, ERANGE},
+ {"1bk39f3ah3dmq7", 9223372036854775807ll, 28, 0, 0},
+ {"1bk39f3ah3dmq8", 9223372036854775807ll, 28, 0, ERANGE},
+ {"q1se8f0m04isb", 9223372036854775807ll, 29, 0, 0},
+ {"q1se8f0m04isc", 9223372036854775807ll, 29, 0, ERANGE},
+ {"hajppbc1fc207", 9223372036854775807ll, 30, 0, 0},
+ {"hajppbc1fc208", 9223372036854775807ll, 30, 0, ERANGE},
+ {"bm03i95hia437", 9223372036854775807ll, 31, 0, 0},
+ {"bm03i95hia438", 9223372036854775807ll, 31, 0, ERANGE},
+ {"7vvvvvvvvvvvv", 9223372036854775807ll, 32, 0, 0},
+ {"8000000000000", 9223372036854775807ll, 32, 0, ERANGE},
+ {"5hg4ck9jd4u37", 9223372036854775807ll, 33, 0, 0},
+ {"5hg4ck9jd4u38", 9223372036854775807ll, 33, 0, ERANGE},
+ {"3tdtk1v8j6tpp", 9223372036854775807ll, 34, 0, 0},
+ {"3tdtk1v8j6tpq", 9223372036854775807ll, 34, 0, ERANGE},
+ {"2pijmikexrxp7", 9223372036854775807ll, 35, 0, 0},
+ {"2pijmikexrxp8", 9223372036854775807ll, 35, 0, ERANGE},
+ {"1y2p0ij32e8e7", 9223372036854775807ll, 36, 0, 0},
+ {"1y2p0ij32e8e8", 9223372036854775807ll, 36, 0, ERANGE},
+
+ {"-1000000000000000000000000000000000000000000000000000000000000000",
+ -9223372036854775808ull, 2, 0, 0},
+ {"-1000000000000000000000000000000000000000000000000000000000000001",
+ -9223372036854775808ull, 2, 0, ERANGE},
+ {"-2021110011022210012102010021220101220222",
+ -9223372036854775808ull, 3, 0, 0},
+ {"-2021110011022210012102010021220101221000",
+ -9223372036854775808ull, 3, 0, ERANGE},
+ {"-20000000000000000000000000000000", -9223372036854775808ull, 4, 0, 0},
+ {"-20000000000000000000000000000001", -9223372036854775808ull, 4, 0, ERANGE},
+ {"-1104332401304422434310311213", -9223372036854775808ull, 5, 0, 0},
+ {"-1104332401304422434310311214", -9223372036854775808ull, 5, 0, ERANGE},
+ {"-1540241003031030222122212", -9223372036854775808ull, 6, 0, 0},
+ {"-1540241003031030222122213", -9223372036854775808ull, 6, 0, ERANGE},
+ {"-22341010611245052052301", -9223372036854775808ull, 7, 0, 0},
+ {"-22341010611245052052302", -9223372036854775808ull, 7, 0, ERANGE},
+ {"-1000000000000000000000", -9223372036854775808ull, 8, 0, 0},
+ {"-1000000000000000000001", -9223372036854775808ull, 8, 0, ERANGE},
+ {"-67404283172107811828", -9223372036854775808ull, 9, 0, 0},
+ {"-67404283172107811830", -9223372036854775808ull, 9, 0, ERANGE},
+ {"-9223372036854775808", -9223372036854775808ull, 10, 0, 0},
+ {"-9223372036854775809", -9223372036854775808ull, 10, 0, ERANGE},
+ {"-1728002635214590698", -9223372036854775808ull, 11, 0, 0},
+ {"-1728002635214590699", -9223372036854775808ull, 11, 0, ERANGE},
+ {"-41a792678515120368", -9223372036854775808ull, 12, 0, 0},
+ {"-41a792678515120369", -9223372036854775808ull, 12, 0, ERANGE},
+ {"-10b269549075433c38", -9223372036854775808ull, 13, 0, 0},
+ {"-10b269549075433c39", -9223372036854775808ull, 13, 0, ERANGE},
+ {"-4340724c6c71dc7a8", -9223372036854775808ull, 14, 0, 0},
+ {"-4340724c6c71dc7a9", -9223372036854775808ull, 14, 0, ERANGE},
+ {"-160e2ad3246366808", -9223372036854775808ull, 15, 0, 0},
+ {"-160e2ad3246366809", -9223372036854775808ull, 15, 0, ERANGE},
+ {"-8000000000000000", -9223372036854775808ull, 16, 0, 0},
+ {"-8000000000000001", -9223372036854775808ull, 16, 0, ERANGE},
+ {"-33d3d8307b214009", -9223372036854775808ull, 17, 0, 0},
+ {"-33d3d8307b21400a", -9223372036854775808ull, 17, 0, ERANGE},
+ {"-16agh595df825fa8", -9223372036854775808ull, 18, 0, 0},
+ {"-16agh595df825fa9", -9223372036854775808ull, 18, 0, ERANGE},
+ {"-ba643dci0ffeehi", -9223372036854775808ull, 19, 0, 0},
+ {"-ba643dci0ffeei0", -9223372036854775808ull, 19, 0, ERANGE},
+ {"-5cbfjia3fh26ja8", -9223372036854775808ull, 20, 0, 0},
+ {"-5cbfjia3fh26ja9", -9223372036854775808ull, 20, 0, ERANGE},
+ {"-2heiciiie82dh98", -9223372036854775808ull, 21, 0, 0},
+ {"-2heiciiie82dh99", -9223372036854775808ull, 21, 0, ERANGE},
+ {"-1adaibb21dckfa8", -9223372036854775808ull, 22, 0, 0},
+ {"-1adaibb21dckfa9", -9223372036854775808ull, 22, 0, ERANGE},
+ {"-i6k448cf4192c3", -9223372036854775808ull, 23, 0, 0},
+ {"-i6k448cf4192c4", -9223372036854775808ull, 23, 0, ERANGE},
+ {"-acd772jnc9l0l8", -9223372036854775808ull, 24, 0, 0},
+ {"-acd772jnc9l0l9", -9223372036854775808ull, 24, 0, ERANGE},
+ {"-64ie1focnn5g78", -9223372036854775808ull, 25, 0, 0},
+ {"-64ie1focnn5g79", -9223372036854775808ull, 25, 0, ERANGE},
+ {"-3igoecjbmca688", -9223372036854775808ull, 26, 0, 0},
+ {"-3igoecjbmca689", -9223372036854775808ull, 26, 0, ERANGE},
+ {"-27c48l5b37oaoq", -9223372036854775808ull, 27, 0, 0},
+ {"-27c48l5b37oap0", -9223372036854775808ull, 27, 0, ERANGE},
+ {"-1bk39f3ah3dmq8", -9223372036854775808ull, 28, 0, 0},
+ {"-1bk39f3ah3dmq9", -9223372036854775808ull, 28, 0, ERANGE},
+ {"-q1se8f0m04isc", -9223372036854775808ull, 29, 0, 0},
+ {"-q1se8f0m04isd", -9223372036854775808ull, 29, 0, ERANGE},
+ {"-hajppbc1fc208", -9223372036854775808ull, 30, 0, 0},
+ {"-hajppbc1fc209", -9223372036854775808ull, 30, 0, ERANGE},
+ {"-bm03i95hia438", -9223372036854775808ull, 31, 0, 0},
+ {"-bm03i95hia439", -9223372036854775808ull, 31, 0, ERANGE},
+ {"-8000000000000", -9223372036854775808ull, 32, 0, 0},
+ {"-8000000000001", -9223372036854775808ull, 32, 0, ERANGE},
+ {"-5hg4ck9jd4u38", -9223372036854775808ull, 33, 0, 0},
+ {"-5hg4ck9jd4u39", -9223372036854775808ull, 33, 0, ERANGE},
+ {"-3tdtk1v8j6tpq", -9223372036854775808ull, 34, 0, 0},
+ {"-3tdtk1v8j6tpr", -9223372036854775808ull, 34, 0, ERANGE},
+ {"-2pijmikexrxp8", -9223372036854775808ull, 35, 0, 0},
+ {"-2pijmikexrxp9", -9223372036854775808ull, 35, 0, ERANGE},
+ {"-1y2p0ij32e8e8", -9223372036854775808ull, 36, 0, 0},
+ {"-1y2p0ij32e8e9", -9223372036854775808ull, 36, 0, ERANGE},
+ {NULL, 0, 0, 0, 0},
+
+ /* Then unsigned. */
+ {" 0", 0, 0, 0, 0},
+ {"0xffffffffg", 0xffffffff, 0, 'g', 0},
+ {"0xffffffffffffffffg", 0xffffffffffffffffull, 0, 'g', 0},
+ {"-0xfedcba987654321", 0xf0123456789abcdfull, 0, 0, 0},
+ {"0xf1f2f3f4f5f6f7f8f9", 0xffffffffffffffffull, 0, 0, ERANGE},
+ {"-0x123456789abcdef01", 0xffffffffffffffffull, 0, 0, ERANGE},
+
+ {"1111111111111111111111111111111111111111111111111111111111111111",
+ 0xffffffffffffffff, 2, 0, 0},
+ {"10000000000000000000000000000000000000000000000000000000000000000",
+ 0xffffffffffffffff, 2, 0, ERANGE},
+ {"11112220022122120101211020120210210211220",
+ 0xffffffffffffffff, 3, 0, 0},
+ {"11112220022122120101211020120210210211221",
+ 0xffffffffffffffff, 3, 0, ERANGE},
+ {"33333333333333333333333333333333", 0xffffffffffffffff, 4, 0, 0},
+ {"100000000000000000000000000000000", 0xffffffffffffffff, 4, 0, ERANGE},
+ {"2214220303114400424121122430", 0xffffffffffffffff, 5, 0, 0},
+ {"2214220303114400424121122431", 0xffffffffffffffff, 5, 0, ERANGE},
+ {"3520522010102100444244423", 0xffffffffffffffff, 6, 0, 0},
+ {"3520522010102100444244424", 0xffffffffffffffff, 6, 0, ERANGE},
+ {"45012021522523134134601", 0xffffffffffffffff, 7, 0, 0},
+ {"45012021522523134134602", 0xffffffffffffffff, 7, 0, ERANGE},
+ {"1777777777777777777777", 0xffffffffffffffff, 8, 0, 0},
+ {"2000000000000000000000", 0xffffffffffffffff, 8, 0, ERANGE},
+ {"145808576354216723756", 0xffffffffffffffff, 9, 0, 0},
+ {"145808576354216723757", 0xffffffffffffffff, 9, 0, ERANGE},
+ {"18446744073709551615", 0xffffffffffffffff, 10, 0, 0},
+ {"18446744073709551616", 0xffffffffffffffff, 10, 0, ERANGE},
+ {"335500516a429071284", 0xffffffffffffffff, 11, 0, 0},
+ {"335500516a429071285", 0xffffffffffffffff, 11, 0, ERANGE},
+ {"839365134a2a240713", 0xffffffffffffffff, 12, 0, 0},
+ {"839365134a2a240714", 0xffffffffffffffff, 12, 0, ERANGE},
+ {"219505a9511a867b72", 0xffffffffffffffff, 13, 0, 0},
+ {"219505a9511a867b73", 0xffffffffffffffff, 13, 0, ERANGE},
+ {"8681049adb03db171", 0xffffffffffffffff, 14, 0, 0},
+ {"8681049adb03db172", 0xffffffffffffffff, 14, 0, ERANGE},
+ {"2c1d56b648c6cd110", 0xffffffffffffffff, 15, 0, 0},
+ {"2c1d56b648c6cd111", 0xffffffffffffffff, 15, 0, ERANGE},
+ {"ffffffffffffffff", 0xffffffffffffffff, 16, 0, 0},
+ {"10000000000000000", 0xffffffffffffffff, 16, 0, ERANGE},
+ {"67979g60f5428010", 0xffffffffffffffff, 17, 0, 0},
+ {"67979g60f5428011", 0xffffffffffffffff, 17, 0, ERANGE},
+ {"2d3fgb0b9cg4bd2f", 0xffffffffffffffff, 18, 0, 0},
+ {"2d3fgb0b9cg4bd2g", 0xffffffffffffffff, 18, 0, ERANGE},
+ {"141c8786h1ccaagg", 0xffffffffffffffff, 19, 0, 0},
+ {"141c8786h1ccaagh", 0xffffffffffffffff, 19, 0, ERANGE},
+ {"b53bjh07be4dj0f", 0xffffffffffffffff, 20, 0, 0},
+ {"b53bjh07be4dj0g", 0xffffffffffffffff, 20, 0, ERANGE},
+ {"5e8g4ggg7g56dif", 0xffffffffffffffff, 21, 0, 0},
+ {"5e8g4ggg7g56dig", 0xffffffffffffffff, 21, 0, ERANGE},
+ {"2l4lf104353j8kf", 0xffffffffffffffff, 22, 0, 0},
+ {"2l4lf104353j8kg", 0xffffffffffffffff, 22, 0, ERANGE},
+ {"1ddh88h2782i515", 0xffffffffffffffff, 23, 0, 0},
+ {"1ddh88h2782i516", 0xffffffffffffffff, 23, 0, ERANGE},
+ {"l12ee5fn0ji1if", 0xffffffffffffffff, 24, 0, 0},
+ {"l12ee5fn0ji1ig", 0xffffffffffffffff, 24, 0, ERANGE},
+ {"c9c336o0mlb7ef", 0xffffffffffffffff, 25, 0, 0},
+ {"c9c336o0mlb7eg", 0xffffffffffffffff, 25, 0, ERANGE},
+ {"7b7n2pcniokcgf", 0xffffffffffffffff, 26, 0, 0},
+ {"7b7n2pcniokcgg", 0xffffffffffffffff, 26, 0, ERANGE},
+ {"4eo8hfam6fllmo", 0xffffffffffffffff, 27, 0, 0},
+ {"4eo8hfam6fllmp", 0xffffffffffffffff, 27, 0, ERANGE},
+ {"2nc6j26l66rhof", 0xffffffffffffffff, 28, 0, 0},
+ {"2nc6j26l66rhog", 0xffffffffffffffff, 28, 0, ERANGE},
+ {"1n3rsh11f098rn", 0xffffffffffffffff, 29, 0, 0},
+ {"1n3rsh11f098ro", 0xffffffffffffffff, 29, 0, ERANGE},
+ {"14l9lkmo30o40f", 0xffffffffffffffff, 30, 0, 0},
+ {"14l9lkmo30o40g", 0xffffffffffffffff, 30, 0, ERANGE},
+ {"nd075ib45k86f", 0xffffffffffffffff, 31, 0, 0},
+ {"nd075ib45k86g", 0xffffffffffffffff, 31, 0, ERANGE},
+ {"fvvvvvvvvvvvv", 0xffffffffffffffff, 32, 0, 0},
+ {"g000000000000", 0xffffffffffffffff, 32, 0, ERANGE},
+ {"b1w8p7j5q9r6f", 0xffffffffffffffff, 33, 0, 0},
+ {"b1w8p7j5q9r6g", 0xffffffffffffffff, 33, 0, ERANGE},
+ {"7orp63sh4dphh", 0xffffffffffffffff, 34, 0, 0},
+ {"7orp63sh4dphi", 0xffffffffffffffff, 34, 0, ERANGE},
+ {"5g24a25twkwff", 0xffffffffffffffff, 35, 0, 0},
+ {"5g24a25twkwfg", 0xffffffffffffffff, 35, 0, ERANGE},
+ {"3w5e11264sgsf", 0xffffffffffffffff, 36, 0, 0},
+ {"3w5e11264sgsg", 0xffffffffffffffff, 36, 0, ERANGE},
+ {NULL, 0, 0, 0, 0},
+ };
+
+/* Prototypes for local functions. */
+static void expand (char *dst, int c);
+
+static int
+do_test (void)
+{
+ const struct ltest *lt;
+ char *ep;
+ int status = 0;
+ int save_errno;
+
+ for (lt = tests; lt->str != NULL; ++lt)
+ {
+ long long int l;
+
+ errno = 0;
+ l = strtoll (lt->str, &ep, lt->base);
+ save_errno = errno;
+ printf ("strtoll(\"%s\", , %d) test %u",
+ lt->str, lt->base, (unsigned int) (lt - tests));
+ if (l == (long long int) lt->expect && *ep == lt->left
+ && save_errno == lt->err)
+ puts("\tOK");
+ else
+ {
+ puts("\tBAD");
+ if (l != (long long int) lt->expect)
+ printf(" returns %lld, expected %lld\n",
+ l, (long long int) lt->expect);
+ if (lt->left != *ep)
+ {
+ char exp1[5], exp2[5];
+ expand (exp1, *ep);
+ expand (exp2, lt->left);
+ printf (" leaves '%s', expected '%s'\n", exp1, exp2);
+ }
+ if (save_errno != lt->err)
+ printf (" errno %d (%s) instead of %d (%s)\n",
+ save_errno, strerror (save_errno),
+ lt->err, strerror (lt->err));
+ status = 1;
+ }
+ }
+
+ for (++lt; lt->str != NULL; lt++)
+ {
+ unsigned long long int ul;
+
+ errno = 0;
+ ul = strtoull (lt->str, &ep, lt->base);
+ save_errno = errno;
+ printf ("strtoull(\"%s\", , %d) test %u",
+ lt->str, lt->base, (unsigned int) (lt - tests));
+ if (ul == lt->expect && *ep == lt->left && save_errno == lt->err)
+ puts("\tOK");
+ else
+ {
+ puts ("\tBAD");
+ if (ul != lt->expect)
+ printf (" returns %llu, expected %llu\n",
+ ul, lt->expect);
+ if (lt->left != *ep)
+ {
+ char exp1[5], exp2[5];
+ expand (exp1, *ep);
+ expand (exp2, lt->left);
+ printf (" leaves '%s', expected '%s'\n", exp1, exp2);
+ }
+ if (save_errno != lt->err)
+ printf (" errno %d (%s) instead of %d (%s)\n",
+ save_errno, strerror (save_errno),
+ lt->err, strerror (lt->err));
+ status = 1;
+ }
+ }
+
+ return status ? EXIT_FAILURE : EXIT_SUCCESS;
+}
+
+static void
+expand (char *dst, int c)
+{
+ if (isprint (c))
+ {
+ dst[0] = c;
+ dst[1] = '\0';
+ }
+ else
+ (void) sprintf (dst, "%#.3o", (unsigned int) c);
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-system.c b/REORG.TODO/stdlib/tst-system.c
new file mode 100644
index 0000000000..6cb62e1248
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-system.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 2002-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+
+static int
+do_test (void)
+{
+ return system (":");
+}
+
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-thread-quick_exit.cc b/REORG.TODO/stdlib/tst-thread-quick_exit.cc
new file mode 100644
index 0000000000..047df6043d
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-thread-quick_exit.cc
@@ -0,0 +1,66 @@
+/* Bug 20198: Do not call object destructors at exit.
+ Copyright (C) 2016-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <errno.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+struct A
+{
+ ~A () { abort (); }
+};
+
+thread_local A a1;
+thread_local A a2;
+
+void
+__attribute__ ((noinline, noclone))
+optimization_barrier (A &)
+{
+}
+
+/* Call std::quick_exit from a non-main thread. */
+void *
+non_main_thread (void *)
+{
+ optimization_barrier (a1);
+ /* The C++11 standard in 18.5.12 says:
+ "Objects shall not be destroyed as a result of calling
+ quick_exit."
+ If quick_exit calls the destructors the test aborts. */
+ quick_exit (0);
+}
+
+static int
+do_test()
+{
+ optimization_barrier (a2);
+ pthread_t thr;
+ int ret = pthread_create (&thr, NULL, non_main_thread, NULL);
+ if (ret != 0)
+ {
+ errno = ret;
+ printf ("error: pthread_create: %m\n");
+ }
+ pthread_join (thr, NULL);
+ return 1;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-tininess.c b/REORG.TODO/stdlib/tst-tininess.c
new file mode 100644
index 0000000000..c032454f96
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-tininess.c
@@ -0,0 +1,69 @@
+/* Test that tininess.h is correct for this architecture.
+ Copyright (C) 2012-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <fenv.h>
+#include <float.h>
+#include <stdio.h>
+#include <tininess.h>
+
+volatile float a = 0x1.fffp-126;
+volatile float b = 0x1.0008p-1;
+volatile float c;
+volatile float m = FLT_MIN;
+volatile float mm;
+
+static int
+do_test (void)
+{
+ int result = 0;
+#ifdef FE_UNDERFLOW
+ feclearexcept (FE_ALL_EXCEPT);
+ mm = m * m;
+ if (!fetestexcept (FE_UNDERFLOW))
+ {
+ puts ("underflow exception not supported at runtime, cannot test");
+ return 0;
+ }
+ feclearexcept (FE_ALL_EXCEPT);
+ c = a * b;
+ if (fetestexcept (FE_UNDERFLOW))
+ {
+ if (TININESS_AFTER_ROUNDING)
+ {
+ puts ("tininess.h says after rounding, "
+ "but detected before rounding");
+ result = 1;
+ }
+ }
+ else
+ {
+ if (!TININESS_AFTER_ROUNDING)
+ {
+ puts ("tininess.h says before rounding, "
+ "but detected after rounding");
+ result = 1;
+ }
+ }
+#else
+ puts ("underflow exception not supported at compile time, cannot test");
+#endif
+ return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-tls-atexit-lib.c b/REORG.TODO/stdlib/tst-tls-atexit-lib.c
new file mode 100644
index 0000000000..a227e4653c
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-tls-atexit-lib.c
@@ -0,0 +1,38 @@
+/* Verify that DSO is unloaded only if its TLS objects are destroyed - the DSO.
+ Copyright (C) 2013-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+
+extern void *__dso_handle;
+
+typedef struct
+{
+ void *val;
+} A;
+
+/* We only care about the destructor. */
+void A_dtor (void *obj)
+{
+ ((A *)obj)->val = obj;
+}
+
+void reg_dtor (void)
+{
+ static __thread A b;
+ __cxa_thread_atexit_impl (A_dtor, &b, __dso_handle);
+}
diff --git a/REORG.TODO/stdlib/tst-tls-atexit-nodelete.c b/REORG.TODO/stdlib/tst-tls-atexit-nodelete.c
new file mode 100644
index 0000000000..2293685144
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-tls-atexit-nodelete.c
@@ -0,0 +1,24 @@
+/* Verify that a RTLD_NODELETE DSO is not unloaded even if its TLS objects are
+ destroyed.
+
+ Copyright (C) 2015-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#define NO_DELETE 1
+#define H2_RTLD_FLAGS (RTLD_LAZY | RTLD_NODELETE)
+#define LOADED_IS_GOOD true
+#include "tst-tls-atexit.c"
diff --git a/REORG.TODO/stdlib/tst-tls-atexit.c b/REORG.TODO/stdlib/tst-tls-atexit.c
new file mode 100644
index 0000000000..6dbf49d460
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-tls-atexit.c
@@ -0,0 +1,156 @@
+/* Verify that DSO is unloaded only if its TLS objects are destroyed.
+ Copyright (C) 2013-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+/* For the default case, i.e. NO_DELETE not defined, the test dynamically loads
+ a DSO and spawns a thread that subsequently calls into the DSO to register a
+ destructor for an object in the DSO and then calls dlclose on the handle for
+ the DSO. When the thread exits, the DSO should not be unloaded or else the
+ destructor called during thread exit will crash. Further in the main
+ thread, the DSO is opened and closed again, at which point the DSO should be
+ unloaded.
+
+ When NO_DELETE is defined, the DSO is loaded twice, once with just RTLD_LAZY
+ flag and the second time with the RTLD_NODELETE flag set. The thread is
+ spawned, destructor registered and then thread exits without closing the
+ DSO. In the main thread, the first handle is then closed, followed by the
+ second handle. In the end, the DSO should remain loaded due to the
+ RTLD_NODELETE flag being set in the second dlopen call. */
+
+#include <dlfcn.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+#include <link.h>
+#include <stdbool.h>
+
+#ifndef NO_DELETE
+# define LOADED_IS_GOOD false
+#endif
+
+#ifndef H2_RTLD_FLAGS
+# define H2_RTLD_FLAGS (RTLD_LAZY)
+#endif
+
+#define DSO_NAME "$ORIGIN/tst-tls-atexit-lib.so"
+
+/* Walk through the map in the _r_debug structure to see if our lib is still
+ loaded. */
+static bool
+is_loaded (void)
+{
+ struct link_map *lm = (struct link_map *) _r_debug.r_map;
+
+ for (; lm; lm = lm->l_next)
+ if (lm->l_type == lt_loaded && lm->l_name
+ && strcmp (basename (DSO_NAME), basename (lm->l_name)) == 0)
+ {
+ printf ("%s is still loaded\n", lm->l_name);
+ return true;
+ }
+ return false;
+}
+
+/* Accept a valid handle returned by DLOPEN, load the reg_dtor symbol to
+ register a destructor and then call dlclose on the handle. The dlclose
+ should not unload the DSO since the destructor has not been called yet. */
+static void *
+reg_dtor_and_close (void *h)
+{
+ void (*reg_dtor) (void) = (void (*) (void)) dlsym (h, "reg_dtor");
+
+ if (reg_dtor == NULL)
+ {
+ printf ("Unable to find symbol: %s\n", dlerror ());
+ return (void *) (uintptr_t) 1;
+ }
+
+ reg_dtor ();
+
+#ifndef NO_DELETE
+ dlclose (h);
+#endif
+
+ return NULL;
+}
+
+static int
+spawn_thread (void *h)
+{
+ pthread_t t;
+ int ret;
+ void *thr_ret;
+
+ if ((ret = pthread_create (&t, NULL, reg_dtor_and_close, h)) != 0)
+ {
+ printf ("pthread_create failed: %s\n", strerror (ret));
+ return 1;
+ }
+
+ if ((ret = pthread_join (t, &thr_ret)) != 0)
+ {
+ printf ("pthread_join failed: %s\n", strerror (ret));
+ return 1;
+ }
+
+ if (thr_ret != NULL)
+ return 1;
+
+ return 0;
+}
+
+static int
+do_test (void)
+{
+ /* Load the DSO. */
+ void *h1 = dlopen (DSO_NAME, RTLD_LAZY);
+ if (h1 == NULL)
+ {
+ printf ("h1: Unable to load DSO: %s\n", dlerror ());
+ return 1;
+ }
+
+#ifndef NO_DELETE
+ if (spawn_thread (h1) != 0)
+ return 1;
+#endif
+
+ void *h2 = dlopen (DSO_NAME, H2_RTLD_FLAGS);
+ if (h2 == NULL)
+ {
+ printf ("h2: Unable to load DSO: %s\n", dlerror ());
+ return 1;
+ }
+
+#ifdef NO_DELETE
+ if (spawn_thread (h1) != 0)
+ return 1;
+
+ dlclose (h1);
+#endif
+ dlclose (h2);
+
+ /* Check link maps to ensure that the DSO has unloaded. In the normal case,
+ the DSO should be unloaded if there are no uses. However, if one of the
+ dlopen calls were with RTLD_NODELETE, the DSO should remain loaded. */
+ return is_loaded () == LOADED_IS_GOOD ? 0 : 1;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-unsetenv1.c b/REORG.TODO/stdlib/tst-unsetenv1.c
new file mode 100644
index 0000000000..a2a760d241
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-unsetenv1.c
@@ -0,0 +1,12 @@
+#include <stdlib.h>
+
+static int
+do_test (void)
+{
+ clearenv ();
+ unsetenv ("FOO");
+ return 0;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-width-stdint.c b/REORG.TODO/stdlib/tst-width-stdint.c
new file mode 100644
index 0000000000..9a4c4167b2
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-width-stdint.c
@@ -0,0 +1,185 @@
+/* Test integer width macros in <stdint.h>.
+ Copyright (C) 2016-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <signal.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <wchar.h>
+
+#define CHECK_WIDTH(TYPE, MAX, WIDTH) \
+ do \
+ { \
+ if ((MAX >> ((TYPE) -1 < 0 ? (WIDTH - 2) : (WIDTH - 1))) != 1) \
+ { \
+ puts ("bad width of " #TYPE); \
+ result = 1; \
+ } \
+ else \
+ puts ("width of " #TYPE " OK"); \
+ } \
+ while (0)
+
+static int
+do_test (void)
+{
+ int result = 0;
+
+#ifndef INT8_WIDTH
+# error "missing INT8_WIDTH"
+#endif
+ CHECK_WIDTH (int8_t, INT8_MAX, INT8_WIDTH);
+#ifndef INT16_WIDTH
+# error "missing INT16_WIDTH"
+#endif
+ CHECK_WIDTH (int16_t, INT16_MAX, INT16_WIDTH);
+#ifndef INT32_WIDTH
+# error "missing INT32_WIDTH"
+#endif
+ CHECK_WIDTH (int32_t, INT32_MAX, INT32_WIDTH);
+#ifndef INT64_WIDTH
+# error "missing INT64_WIDTH"
+#endif
+ CHECK_WIDTH (int64_t, INT64_MAX, INT64_WIDTH);
+#ifndef UINT8_WIDTH
+# error "missing UINT8_WIDTH"
+#endif
+ CHECK_WIDTH (uint8_t, UINT8_MAX, UINT8_WIDTH);
+#ifndef UINT16_WIDTH
+# error "missing UINT16_WIDTH"
+#endif
+ CHECK_WIDTH (uint16_t, UINT16_MAX, UINT16_WIDTH);
+#ifndef UINT32_WIDTH
+# error "missing UINT32_WIDTH"
+#endif
+ CHECK_WIDTH (uint32_t, UINT32_MAX, UINT32_WIDTH);
+#ifndef UINT64_WIDTH
+# error "missing UINT64_WIDTH"
+#endif
+ CHECK_WIDTH (uint64_t, UINT64_MAX, UINT64_WIDTH);
+
+#ifndef INT_LEAST8_WIDTH
+# error "missing INT_LEAST8_WIDTH"
+#endif
+ CHECK_WIDTH (int_least8_t, INT_LEAST8_MAX, INT_LEAST8_WIDTH);
+#ifndef INT_LEAST16_WIDTH
+# error "missing INT_LEAST16_WIDTH"
+#endif
+ CHECK_WIDTH (int_least16_t, INT_LEAST16_MAX, INT_LEAST16_WIDTH);
+#ifndef INT_LEAST32_WIDTH
+# error "missing INT_LEAST32_WIDTH"
+#endif
+ CHECK_WIDTH (int_least32_t, INT_LEAST32_MAX, INT_LEAST32_WIDTH);
+#ifndef INT_LEAST64_WIDTH
+# error "missing INT_LEAST64_WIDTH"
+#endif
+ CHECK_WIDTH (int_least64_t, INT_LEAST64_MAX, INT_LEAST64_WIDTH);
+#ifndef UINT_LEAST8_WIDTH
+# error "missing UINT_LEAST8_WIDTH"
+#endif
+ CHECK_WIDTH (uint_least8_t, UINT_LEAST8_MAX, UINT_LEAST8_WIDTH);
+#ifndef UINT_LEAST16_WIDTH
+# error "missing UINT_LEAST16_WIDTH"
+#endif
+ CHECK_WIDTH (uint_least16_t, UINT_LEAST16_MAX, UINT_LEAST16_WIDTH);
+#ifndef UINT_LEAST32_WIDTH
+# error "missing UINT_LEAST32_WIDTH"
+#endif
+ CHECK_WIDTH (uint_least32_t, UINT_LEAST32_MAX, UINT_LEAST32_WIDTH);
+#ifndef UINT_LEAST64_WIDTH
+# error "missing UINT_LEAST64_WIDTH"
+#endif
+ CHECK_WIDTH (uint_least64_t, UINT_LEAST64_MAX, UINT_LEAST64_WIDTH);
+
+#ifndef INT_FAST8_WIDTH
+# error "missing INT_FAST8_WIDTH"
+#endif
+ CHECK_WIDTH (int_fast8_t, INT_FAST8_MAX, INT_FAST8_WIDTH);
+#ifndef INT_FAST16_WIDTH
+# error "missing INT_FAST16_WIDTH"
+#endif
+ CHECK_WIDTH (int_fast16_t, INT_FAST16_MAX, INT_FAST16_WIDTH);
+#ifndef INT_FAST32_WIDTH
+# error "missing INT_FAST32_WIDTH"
+#endif
+ CHECK_WIDTH (int_fast32_t, INT_FAST32_MAX, INT_FAST32_WIDTH);
+#ifndef INT_FAST64_WIDTH
+# error "missing INT_FAST64_WIDTH"
+#endif
+ CHECK_WIDTH (int_fast64_t, INT_FAST64_MAX, INT_FAST64_WIDTH);
+#ifndef UINT_FAST8_WIDTH
+# error "missing UINT_FAST8_WIDTH"
+#endif
+ CHECK_WIDTH (uint_fast8_t, UINT_FAST8_MAX, UINT_FAST8_WIDTH);
+#ifndef UINT_FAST16_WIDTH
+# error "missing UINT_FAST16_WIDTH"
+#endif
+ CHECK_WIDTH (uint_fast16_t, UINT_FAST16_MAX, UINT_FAST16_WIDTH);
+#ifndef UINT_FAST32_WIDTH
+# error "missing UINT_FAST32_WIDTH"
+#endif
+ CHECK_WIDTH (uint_fast32_t, UINT_FAST32_MAX, UINT_FAST32_WIDTH);
+#ifndef UINT_FAST64_WIDTH
+# error "missing UINT_FAST64_WIDTH"
+#endif
+ CHECK_WIDTH (uint_fast64_t, UINT_FAST64_MAX, UINT_FAST64_WIDTH);
+
+#ifndef INTPTR_WIDTH
+# error "missing INTPTR_WIDTH"
+#endif
+ CHECK_WIDTH (intptr_t, INTPTR_MAX, INTPTR_WIDTH);
+#ifndef UINTPTR_WIDTH
+# error "missing UINTPTR_WIDTH"
+#endif
+ CHECK_WIDTH (uintptr_t, UINTPTR_MAX, UINTPTR_WIDTH);
+
+#ifndef INTMAX_WIDTH
+# error "missing INTMAX_WIDTH"
+#endif
+ CHECK_WIDTH (intmax_t, INTMAX_MAX, INTMAX_WIDTH);
+#ifndef UINTMAX_WIDTH
+# error "missing UINTMAX_WIDTH"
+#endif
+ CHECK_WIDTH (uintmax_t, UINTMAX_MAX, UINTMAX_WIDTH);
+
+#ifndef PTRDIFF_WIDTH
+# error "missing PTRDIFF_WIDTH"
+#endif
+ CHECK_WIDTH (ptrdiff_t, PTRDIFF_MAX, PTRDIFF_WIDTH);
+#ifndef SIG_ATOMIC_WIDTH
+# error "missing SIG_ATOMIC_WIDTH"
+#endif
+ CHECK_WIDTH (sig_atomic_t, SIG_ATOMIC_MAX, SIG_ATOMIC_WIDTH);
+#ifndef SIZE_WIDTH
+# error "missing SIZE_WIDTH"
+#endif
+ CHECK_WIDTH (size_t, SIZE_MAX, SIZE_WIDTH);
+#ifndef WCHAR_WIDTH
+# error "missing WCHAR_WIDTH"
+#endif
+ CHECK_WIDTH (wchar_t, WCHAR_MAX, WCHAR_WIDTH);
+#ifndef WINT_WIDTH
+# error "missing WINT_WIDTH"
+#endif
+ CHECK_WIDTH (wint_t, WINT_MAX, WINT_WIDTH);
+
+ return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-width.c b/REORG.TODO/stdlib/tst-width.c
new file mode 100644
index 0000000000..326bd9d37d
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-width.c
@@ -0,0 +1,87 @@
+/* Test integer width macros.
+ Copyright (C) 2016-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <limits.h>
+#include <stdio.h>
+
+#define CHECK_WIDTH(TYPE, MAX, WIDTH) \
+ do \
+ { \
+ if ((MAX >> ((TYPE) -1 < 0 ? (WIDTH - 2) : (WIDTH - 1))) != 1) \
+ { \
+ puts ("bad width of " #TYPE); \
+ result = 1; \
+ } \
+ else \
+ puts ("width of " #TYPE " OK"); \
+ } \
+ while (0)
+
+static int
+do_test (void)
+{
+ int result = 0;
+#ifndef CHAR_WIDTH
+# error "missing CHAR_WIDTH"
+#endif
+ CHECK_WIDTH (char, CHAR_MAX, CHAR_WIDTH);
+#ifndef SCHAR_WIDTH
+# error "missing SCHAR_WIDTH"
+#endif
+ CHECK_WIDTH (signed char, SCHAR_MAX, SCHAR_WIDTH);
+#ifndef UCHAR_WIDTH
+# error "missing UCHAR_WIDTH"
+#endif
+ CHECK_WIDTH (unsigned char, UCHAR_MAX, UCHAR_WIDTH);
+#ifndef SHRT_WIDTH
+# error "missing SHRT_WIDTH"
+#endif
+ CHECK_WIDTH (signed short, SHRT_MAX, SHRT_WIDTH);
+#ifndef USHRT_WIDTH
+# error "missing USHRT_WIDTH"
+#endif
+ CHECK_WIDTH (unsigned short, USHRT_MAX, USHRT_WIDTH);
+#ifndef INT_WIDTH
+# error "missing INT_WIDTH"
+#endif
+ CHECK_WIDTH (signed int, INT_MAX, INT_WIDTH);
+#ifndef UINT_WIDTH
+# error "missing UINT_WIDTH"
+#endif
+ CHECK_WIDTH (unsigned int, UINT_MAX, UINT_WIDTH);
+#ifndef LONG_WIDTH
+# error "missing LONG_WIDTH"
+#endif
+ CHECK_WIDTH (signed long, LONG_MAX, LONG_WIDTH);
+#ifndef ULONG_WIDTH
+# error "missing ULONG_WIDTH"
+#endif
+ CHECK_WIDTH (unsigned long, ULONG_MAX, ULONG_WIDTH);
+#ifndef LLONG_WIDTH
+# error "missing LLONG_WIDTH"
+#endif
+ CHECK_WIDTH (signed long long, LLONG_MAX, LLONG_WIDTH);
+#ifndef ULLONG_WIDTH
+# error "missing ULLONG_WIDTH"
+#endif
+ CHECK_WIDTH (unsigned long long, ULLONG_MAX, ULLONG_WIDTH);
+ return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/tst-xpg-basename.c b/REORG.TODO/stdlib/tst-xpg-basename.c
new file mode 100644
index 0000000000..baf5361747
--- /dev/null
+++ b/REORG.TODO/stdlib/tst-xpg-basename.c
@@ -0,0 +1,69 @@
+/* Copyright (C) 1999-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Andreas Jaeger <aj@suse.de>, 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <libgen.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+static struct
+{
+ const char *path;
+ const char *file;
+} tests [] =
+{
+ { "/dir/file", "file" },
+ { "file", "file"},
+ { "/dir/file///", "file" },
+ { "../file", "file" },
+ { "/", "/" },
+ { NULL, "."},
+ { "", "."}
+};
+
+
+static int
+do_test (void)
+{
+ size_t i = 0;
+ int errors = 0;
+ char path[1024];
+ char *file;
+
+ for (i = 0; i < sizeof (tests) / sizeof (tests [0]); ++i)
+ {
+ if (tests [i].path == NULL)
+ file = __xpg_basename (NULL);
+ else
+ {
+ strcpy (path, tests [i].path);
+ file = __xpg_basename (path);
+ }
+ if (strcmp (file, tests [i].file))
+ {
+ printf ("Test with `%s' failed: Result is: `%s'.\n",
+ (tests [i].path == NULL ? "NULL" : tests [i].path), file);
+ errors = 1;
+ }
+ }
+
+ return errors;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/REORG.TODO/stdlib/ucontext.h b/REORG.TODO/stdlib/ucontext.h
new file mode 100644
index 0000000000..2cef5f7869
--- /dev/null
+++ b/REORG.TODO/stdlib/ucontext.h
@@ -0,0 +1,52 @@
+/* Copyright (C) 1997-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+/* System V ABI compliant user-level context switching support. */
+
+#ifndef _UCONTEXT_H
+#define _UCONTEXT_H 1
+
+#include <features.h>
+
+/* Get machine dependent definition of data structures. */
+#include <sys/ucontext.h>
+
+__BEGIN_DECLS
+
+/* Get user context and store it in variable pointed to by UCP. */
+extern int getcontext (ucontext_t *__ucp) __THROWNL;
+
+/* Set user context from information of variable pointed to by UCP. */
+extern int setcontext (const ucontext_t *__ucp) __THROWNL;
+
+/* Save current context in context variable pointed to by OUCP and set
+ context from variable pointed to by UCP. */
+extern int swapcontext (ucontext_t *__restrict __oucp,
+ const ucontext_t *__restrict __ucp) __THROWNL;
+
+/* Manipulate user context UCP to continue with calling functions FUNC
+ and the ARGC-1 parameters following ARGC when the context is used
+ the next time in `setcontext' or `swapcontext'.
+
+ We cannot say anything about the parameters FUNC takes; `void'
+ is as good as any other choice. */
+extern void makecontext (ucontext_t *__ucp, void (*__func) (void),
+ int __argc, ...) __THROW;
+
+__END_DECLS
+
+#endif /* ucontext.h */
diff --git a/REORG.TODO/stdlib/udiv_qrnnd.c b/REORG.TODO/stdlib/udiv_qrnnd.c
new file mode 100644
index 0000000000..d32796c04d
--- /dev/null
+++ b/REORG.TODO/stdlib/udiv_qrnnd.c
@@ -0,0 +1,10 @@
+/* For some machines GNU MP needs to define an auxiliary function:
+
+ udiv_qrnnd (quotient, remainder, high_numerator, low_numerator, denominator)
+
+ Divides a two-word unsigned integer, composed by the integers
+ HIGH_NUMERATOR and LOW_NUMERATOR, by DENOMINATOR and places the quotient
+ in QUOTIENT and the remainder in REMAINDER. HIGH_NUMERATOR must be less
+ than DENOMINATOR for correct operation. If, in addition, the most
+ significant bit of DENOMINATOR must be 1, then the pre-processor symbol
+ UDIV_NEEDS_NORMALIZATION is defined to 1. */
diff --git a/REORG.TODO/stdlib/wcstoimax.c b/REORG.TODO/stdlib/wcstoimax.c
new file mode 100644
index 0000000000..f1de70f320
--- /dev/null
+++ b/REORG.TODO/stdlib/wcstoimax.c
@@ -0,0 +1 @@
+#error "The correct implementation must be chosen based on the `intmax_t' type"
diff --git a/REORG.TODO/stdlib/wcstombs.c b/REORG.TODO/stdlib/wcstombs.c
new file mode 100644
index 0000000000..7e1667b4a1
--- /dev/null
+++ b/REORG.TODO/stdlib/wcstombs.c
@@ -0,0 +1,35 @@
+/* Copyright (C) 1991-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+
+
+/* Convert the `wchar_t' string in PWCS to a multibyte character string
+ in S, writing no more than N characters. Return the number of bytes
+ written, or (size_t) -1 if an invalid `wchar_t' was found. */
+size_t
+wcstombs (char *s, const wchar_t *pwcs, size_t n)
+{
+ mbstate_t state;
+
+ memset (&state, '\0', sizeof state);
+
+ /* Return how many we wrote (or maybe an error). */
+ return __wcsrtombs (s, &pwcs, n, &state);
+}
diff --git a/REORG.TODO/stdlib/wcstoumax.c b/REORG.TODO/stdlib/wcstoumax.c
new file mode 100644
index 0000000000..508cb19f8c
--- /dev/null
+++ b/REORG.TODO/stdlib/wcstoumax.c
@@ -0,0 +1 @@
+#error "The correct implementation must be chosen based on the `uintmax_t' type"
diff --git a/REORG.TODO/stdlib/wctomb.c b/REORG.TODO/stdlib/wctomb.c
new file mode 100644
index 0000000000..c14d4266ec
--- /dev/null
+++ b/REORG.TODO/stdlib/wctomb.c
@@ -0,0 +1,57 @@
+/* Copyright (C) 1991-2017 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+#include <gconv.h>
+#include <wcsmbs/wcsmbsload.h>
+
+
+/* Shared with __wctomb_chk. */
+mbstate_t __wctomb_state attribute_hidden;
+
+/* Convert WCHAR into its multibyte character representation,
+ putting this in S and returning its length.
+
+ Attention: this function should NEVER be intentionally used.
+ The interface is completely stupid. The state is shared between
+ all conversion functions. You should use instead the restartable
+ version `wcrtomb'. */
+int
+wctomb (char *s, wchar_t wchar)
+{
+ /* If S is NULL the function has to return null or not null
+ depending on the encoding having a state depending encoding or
+ not. */
+ if (s == NULL)
+ {
+ const struct gconv_fcts *fcts;
+
+ /* Get the conversion functions. */
+ fcts = get_gconv_fcts (_NL_CURRENT_DATA (LC_CTYPE));
+
+ /* This is an extension in the Unix standard which does not directly
+ violate ISO C. */
+ memset (&__wctomb_state, '\0', sizeof __wctomb_state);
+
+ return fcts->tomb->__stateful;
+ }
+
+ return __wcrtomb (s, wchar, &__wctomb_state);
+}
+libc_hidden_def (wctomb)
diff --git a/REORG.TODO/stdlib/xpg_basename.c b/REORG.TODO/stdlib/xpg_basename.c
new file mode 100644
index 0000000000..57120f9cb2
--- /dev/null
+++ b/REORG.TODO/stdlib/xpg_basename.c
@@ -0,0 +1,71 @@
+/* Return basename of given pathname according to the weird XPG specification.
+ Copyright (C) 1997-2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+ 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, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <string.h>
+#include <libgen.h>
+
+
+char *
+__xpg_basename (char *filename)
+{
+ char *p;
+
+ if (filename == NULL || filename[0] == '\0')
+ /* We return a pointer to a static string containing ".". */
+ p = (char *) ".";
+ else
+ {
+ p = strrchr (filename, '/');
+
+ if (p == NULL)
+ /* There is no slash in the filename. Return the whole string. */
+ p = filename;
+ else
+ {
+ if (p[1] == '\0')
+ {
+ /* We must remove trailing '/'. */
+ while (p > filename && p[-1] == '/')
+ --p;
+
+ /* Now we can be in two situations:
+ a) the string only contains '/' characters, so we return
+ '/'
+ b) p points past the last component, but we have to remove
+ the trailing slash. */
+ if (p > filename)
+ {
+ *p-- = '\0';
+ while (p > filename && p[-1] != '/')
+ --p;
+ }
+ else
+ /* The last slash we already found is the right position
+ to return. */
+ while (p[1] != '\0')
+ ++p;
+ }
+ else
+ /* Go to the first character of the name. */
+ ++p;
+ }
+ }
+
+ return p;
+}